New endpoint

New endpoint to upload song with metadata and cover art as separate entities
This commit is contained in:
kdeng00
2021-12-29 14:06:52 -05:00
parent aa0a1ab5fe
commit 3a6e0f64bc
10 changed files with 221 additions and 40 deletions
+63 -18
View File
@@ -176,27 +176,24 @@ namespace Icarus.Controllers.Managers
_logger.Info("Starting the process of saving the song to the filesystem");
var song = await SaveSongTemp(songFile);
System.IO.File.Delete(song.SongPath());
DirectoryManager dirMgr = new DirectoryManager(_config, song);
dirMgr.CreateDirectory();
var fileDir = dirMgr.SongDirectory;
var filePath = fileDir;
var songFilename = song.Filename;
if (!songFilename.EndsWith(".mp3"))
filePath += $"{songFilename}.mp3";
else
filePath += $"{songFilename}";
var filePath = dirMgr.SongDirectory;
filePath += $"{song.Filename}";
_logger.Info($"Absolute song path: {filePath}");
using (var fileStream = new FileStream(filePath, FileMode.Create))
{
await (songFile.CopyToAsync(fileStream));
song.SongDirectory = fileDir;
var songBytes = await System.IO.File.ReadAllBytesAsync(song.SongPath());
System.IO.File.WriteAllBytesAsync(filePath, songBytes);
System.IO.File.Delete(song.SongPath());
song.SongDirectory = dirMgr.SongDirectory;
_logger.Info("Song successfully saved to filesystem");
}
@@ -214,6 +211,55 @@ namespace Icarus.Controllers.Managers
}
}
public async Task SaveSongToFileSystem(IFormFile songFile, IFormFile coverArtData, Song song)
{
if (string.IsNullOrEmpty(song.Filename))
{
song.Filename = song.GenerateFilename(1);
}
song.SongDirectory = _tempDirectoryRoot;
song.DateCreated = DateTime.Now;
using (var filestream = new FileStream(song.SongPath(), FileMode.Create))
{
_logger.Info("Saving song to temporary directory");
await songFile.CopyToAsync(filestream);
}
var coverMgr = new CoverArtManager(_config);
var coverArt = coverMgr.SaveCoverArt(coverArtData, song);
var meta = new MetadataRetriever();
song.Duration = meta.RetrieveSongDuration(song.SongPath());
// const int trackCount = meta.RetrieveTrackCount(song.)
meta.UpdateMetadata(song, song);
meta.UpdateCoverArt(song, coverArt);
DirectoryManager dirMgr = new DirectoryManager(_config, song);
dirMgr.CreateDirectory();
var filePath = dirMgr.SongDirectory + song.Filename;
_logger.Info($"Absolute song path: {filePath}");
using (var fileStream = new FileStream(filePath, FileMode.Create))
{
var songBytes = await System.IO.File.ReadAllBytesAsync(song.SongPath());
await System.IO.File.WriteAllBytesAsync(filePath, songBytes);
System.IO.File.Delete(song.SongPath());
song.SongDirectory = dirMgr.SongDirectory;
_logger.Info("Song successfully saved to filesystem");
}
coverMgr.SaveCoverArtToDatabase(ref song, ref coverArt);
SaveSongToDatabase(song);
}
public async Task<SongData> RetrieveSong(Song songMetaData)
@@ -248,22 +294,21 @@ namespace Icarus.Controllers.Managers
private async Task<Song> SaveSongTemp(IFormFile songFile)
{
var song = new Song();
var filename = song.GenerateFilename();
var filePath = Path.Combine(_tempDirectoryRoot, filename);
_logger.Info("Assigning song filename");
song.SongDirectory = _tempDirectoryRoot;
song.Filename = song.GenerateFilename(1);
using (var filestream = new FileStream(filePath, FileMode.Create))
using (var filestream = new FileStream(song.SongPath(), FileMode.Create))
{
_logger.Info("Saving song to temporary directory");
await songFile.CopyToAsync(filestream);
}
MetadataRetriever meta = new MetadataRetriever();
song = meta.RetrieveMetaData(filePath);
song = meta.RetrieveMetaData(song.SongPath());
_logger.Info("Assigning song filename");
song.Filename = filename;
song.SongDirectory = _tempDirectoryRoot;
song.Filename = song.GenerateFilename(1);
song.DateCreated = DateTime.Now;
return song;