8900afdfd2
* Added script shell to convert wav files to flac * #93: Minor change to script to convert wav files to flac * #93: Added more code to for the music file conversion * #93: Script to convert wav files to flac files is done * #93: Clean up * #93: Starting work to implement flac support * #93: Minor update to conversion script * #93: Added dotnet manifest file Includes the dotnet-ef tool * #93: Updated README and migration script * #93: Created skeleton for saving flac files * #93: Making some changes to how the file extension is determined * #93: Updated gitignore * #93: Another gitignore update * #93: Making some changes to the process of saving a song to the filesystem * #93: Adding SQL script to drop and create database * #93: Saving uploaded song to a temporary location for processing * #93: Initializing some properties in the song model earlier * #93: Uploading wav songs works. Moving on to flac support * #93: Added more code to save flac files * #93: Updated some code that affects filename generation for audio files * #93: Song Model changes and support for different file types * #93: Working on build errors, removed DotnetZip dependency, and added new Ionic.Zlip.Netstandard dependency * #93: Reduce build errors * #93: Removed ID3 dependency * #93: Cleanup
127 lines
3.3 KiB
C#
127 lines
3.3 KiB
C#
using Icarus.Models;
|
|
|
|
namespace Icarus.Controllers.Utilities;
|
|
|
|
public class SongCompression
|
|
{
|
|
#region Fields
|
|
string? _compressedSongFilename;
|
|
string? _tempDirectory;
|
|
byte[]? _uncompressedSong;
|
|
#endregion
|
|
|
|
|
|
#region Propterties
|
|
public string? CompressedSongFilename
|
|
{
|
|
get => _compressedSongFilename;
|
|
set => _compressedSongFilename = value;
|
|
}
|
|
#endregion
|
|
|
|
|
|
#region Constructors
|
|
public SongCompression()
|
|
{
|
|
}
|
|
public SongCompression(string tempDirectory)
|
|
{
|
|
_tempDirectory = tempDirectory;
|
|
}
|
|
public SongCompression(byte[] uncompressedSong)
|
|
{
|
|
_uncompressedSong = uncompressedSong;
|
|
}
|
|
#endregion
|
|
|
|
|
|
#region Methods
|
|
public async Task<SongData> RetrieveCompressedSong(Song song)
|
|
{
|
|
SongData songData = new SongData();
|
|
try
|
|
{
|
|
var archivePath = RetrieveCompressesSongPath(song);
|
|
Console.WriteLine($"Compressed song saved to: {archivePath}");
|
|
|
|
songData.Data = await System.IO.File.ReadAllBytesAsync(archivePath);
|
|
}
|
|
catch(Exception ex)
|
|
{
|
|
var exMsg = ex.Message;
|
|
Console.WriteLine($"An error ocurred: \n{exMsg}");
|
|
}
|
|
|
|
return songData;
|
|
}
|
|
|
|
public string RetrieveCompressesSongPath(Song songDetails)
|
|
{
|
|
string tmpZipFilePath = _tempDirectory + songDetails.Filename;
|
|
|
|
try
|
|
{
|
|
using (var fi = new FileStream(songDetails.SongPath(), FileMode.Open))
|
|
{
|
|
using (var z = new Ionic.Zlib.ZlibStream(fi, Ionic.Zlib.CompressionMode.Compress))
|
|
{
|
|
using (var tr = new FileStream(tmpZipFilePath, FileMode.CreateNew))
|
|
{
|
|
z.CopyTo(tr);
|
|
}
|
|
}
|
|
}
|
|
|
|
Console.WriteLine("Successfully compressed");
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
var exMsg = ex.Message;
|
|
Console.WriteLine("An error ocurred");
|
|
Console.WriteLine(exMsg);
|
|
}
|
|
|
|
if (songDetails.Filename!.Contains(Constants.FileExtensions.WAV_EXTENSION))
|
|
{
|
|
_compressedSongFilename = StripExtension(songDetails.Filename);
|
|
}
|
|
|
|
return tmpZipFilePath;
|
|
}
|
|
|
|
// Method not being used
|
|
public byte[] CompressedSong(byte[] uncompressedSong)
|
|
{
|
|
byte[]? compressedSong = null;
|
|
try
|
|
{
|
|
Console.WriteLine("Song has been successfully compressed");
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
var exMsg = ex.Message;
|
|
Console.WriteLine("An error ocurred:");
|
|
Console.WriteLine(exMsg);
|
|
}
|
|
|
|
return compressedSong!;
|
|
}
|
|
|
|
|
|
string StripExtension(string filename)
|
|
{
|
|
Console.WriteLine($"Before: {filename}");
|
|
int filenameLength = filename.Length;
|
|
Console.WriteLine($"Filename length {filenameLength}");
|
|
var endIndex = filenameLength - 1;
|
|
var startIndex = endIndex - 3;
|
|
Console.WriteLine($"Starting index {startIndex} and ending index {endIndex}");
|
|
var stripped = filename.Remove(startIndex, 4);
|
|
stripped += Constants.FileExtensions.ZIP_EXTENSION;
|
|
Console.WriteLine($"After {stripped}");
|
|
|
|
return stripped;
|
|
}
|
|
#endregion
|
|
}
|