diff --git a/Controllers/Managers/SongManager.cs b/Controllers/Managers/SongManager.cs index 6cf1003..b8608ae 100644 --- a/Controllers/Managers/SongManager.cs +++ b/Controllers/Managers/SongManager.cs @@ -15,6 +15,7 @@ using MySql.Data.MySqlClient; using TagLib; using Icarus.Models; +using Icarus.Controllers.Utilities; namespace Icarus.Controllers.Managers { @@ -281,6 +282,20 @@ namespace Icarus.Controllers.Managers return song; } + public async Task RetrieveCompressedSong(int id) + { + SongData song = new SongData(); + try + { + _song = await RetrieveSongDetails(id); + } + catch (Exception ex) + { + var exMsg = ex.Message; + Console.WriteLine($"An error occurred: {exMsg}"); + } + return song; + } Song RetrieveMetaData(string filePath) @@ -324,10 +339,11 @@ namespace Icarus.Controllers.Managers SongData RetrieveSongFromFileSystem(Song details) { + byte[] uncompressedSong = System.IO.File.ReadAllBytes(details.SongPath); return new SongData { - Data = System.IO.File.ReadAllBytes(details.SongPath) + Data = uncompressedSong }; } diff --git a/Controllers/SongDataController.cs b/Controllers/SongDataController.cs index a60e571..b74dd1d 100644 --- a/Controllers/SongDataController.cs +++ b/Controllers/SongDataController.cs @@ -56,6 +56,7 @@ namespace Icarus.Controllers song = await _songMgr.RetrieveSong(id); return File(song.Data, "application/x-msdownload", _songMgr.SongDetails.Filename); + //return File(song.Data, "application/x-msdownload", "demo.zip"); } [HttpPost] diff --git a/Controllers/Utilities/SongCompression.cs b/Controllers/Utilities/SongCompression.cs new file mode 100644 index 0000000..eb9be1d --- /dev/null +++ b/Controllers/Utilities/SongCompression.cs @@ -0,0 +1,59 @@ +using System; +using System.IO; +using System.IO.Compression; +using System.Threading.Tasks; + + +using SevenZip.Compression.LZMA; + +namespace Icarus.Controllers.Utilities +{ + public class SongCompression + { + #region Fields + byte[] _uncompressedSong; + #endregion + + + #region Propterties + #endregion + + + #region Constructors + public SongCompression() + { + } + public SongCompression(byte[] uncompressedSong) + { + _uncompressedSong = uncompressedSong; + } + #endregion + + + #region Methods + //public async Task CompressedSong(byte[] uncompressedSong) + public async Task CompressedSong(byte[] uncompressedSong) + { + byte[] compressedSong = null; + try + { + //compressedSong = SevenZip.Compression.LZMA.SevenZipHelper.Compress(uncompressedSong); + MemoryStream output = new MemoryStream(); + using (DeflateStream dstream = new DeflateStream(output, CompressionLevel.Optimal)) + { + dstream.Write(uncompressedSong, 0, uncompressedSong.Length); + compressedSong = output.ToArray(); + } + } + catch (Exception ex) + { + var exMsg = ex.Message; + Console.WriteLine("An error ocurred:"); + Console.WriteLine(exMsg); + } + + return compressedSong; + } + #endregion + } +} diff --git a/Icarus.csproj b/Icarus.csproj index c079427..8e295bf 100644 --- a/Icarus.csproj +++ b/Icarus.csproj @@ -11,6 +11,7 @@ +