Song uploads

Uploading songs is functional and does not use the song metadata for the filename or directory creation
This commit is contained in:
kdeng00
2021-12-25 21:36:42 -05:00
parent 64e6f33d7c
commit b529731c95
9 changed files with 105 additions and 77 deletions
+10 -8
View File
@@ -37,9 +37,7 @@ namespace Icarus.Controllers.Managers
{
_logger.Info("Saving cover art record to the database");
_coverArtContext.Add(coverArt);
var songTitle = coverArt.SongTitle;
coverArt = _coverArtContext.CoverArtImages.FirstOrDefault(cov => cov.SongTitle.Equals(songTitle));
_coverArtContext.SaveChanges();
song.CoverArtID = coverArt.CoverArtID;
}
@@ -80,15 +78,19 @@ namespace Icarus.Controllers.Managers
try
{
var dirMgr = new DirectoryManager(_rootCoverArtPath);
var defaultExtension = ".png";
dirMgr.CreateDirectory(song);
// TODO: Do not use metadata for file structure
var imagePath = dirMgr.SongDirectory + song.Title + ".png";
var coverArt = new CoverArt
{
SongTitle = song.Title,
ImagePath = imagePath
SongTitle = song.Title
};
var segment = coverArt.GenerateFilename(0);
var imagePath = dirMgr.SongDirectory + segment + defaultExtension;
coverArt.ImagePath = imagePath;
var metaData = new MetadataRetriever();
var imgBytes = metaData.RetrieveCoverArtBytes(song);
@@ -100,7 +102,7 @@ namespace Icarus.Controllers.Managers
else
{
_logger.Info("Song has no cover art, applying stock cover art");
coverArt.ImagePath = _rootCoverArtPath + "CoverArt.png";
coverArt.ImagePath = _rootCoverArtPath + $"{segment}{defaultExtension}";
metaData.UpdateCoverArt(song, coverArt);
File.WriteAllBytes(coverArt.ImagePath, _stockCoverArt);
}
+19 -29
View File
@@ -50,24 +50,7 @@ namespace Icarus.Controllers.Managers
#region Methods
public void CreateDirectory()
{
try
{
_songDirectory = AlbumDirectory();
if (!Directory.Exists(_songDirectory))
{
Directory.CreateDirectory(_songDirectory);
Console.WriteLine("The directory has been created");
}
Console.WriteLine($"The song will be saved in the following" +
$" directory: {_songDirectory}");
}
catch (Exception ex)
{
Console.WriteLine($"An error occurred {ex.Message}");
}
CreateDirectory(_song);
}
public void CreateDirectory(Song song)
{
@@ -209,34 +192,41 @@ namespace Icarus.Controllers.Managers
private string AlbumDirectory()
{
string directory = _rootSongDirectory;
directory += $@"{_song.Artist}/{_song.AlbumTitle}/";
return directory;
return AlbumDirectory(_song);
}
private string AlbumDirectory(Song song)
{
var directory = _rootSongDirectory;
directory += $@"{song.Artist}/{song.AlbumTitle}/";
var directory = ArtistDirectory(song);
var segment = SerializeValue(song.AlbumTitle);
directory += $@"{segment}/";
Console.WriteLine($"Album directory {directory}");
return directory;
}
private string ArtistDirectory()
{
var directory = _rootSongDirectory;
directory += $@"{_song.Artist}/";
return directory;
return ArtistDirectory(_song);
}
private string ArtistDirectory(Song song)
{
var directory = _rootSongDirectory;
directory += $@"{song.Artist}/";
var segment = SerializeValue(song.Artist);
directory += $@"{segment}/";
Console.WriteLine($"Artist directory {directory}");
return directory;
}
private string SerializeValue(string value)
{
const int length = 15;
const string chars = "ABCDEF0123456789";
var random = new Random();
var output = new string(Enumerable.Repeat(chars, length).Select(s =>
s[random.Next(s.Length)]).ToArray());
return output;
}
#endregion
}
}
+30 -35
View File
@@ -162,18 +162,15 @@ namespace Icarus.Controllers.Managers
{
_logger.Info("Starting the process of saving the song to the filesystem");
var fileTempPath = Path.Combine(_tempDirectoryRoot, songFile.FileName);
var song = await SaveSongTemp(songFile, fileTempPath);
song.SongDirectory = _tempDirectoryRoot;
song.Filename = songFile.FileName;
var song = await SaveSongTemp(songFile);
System.IO.File.Delete(song.SongPath());
DirectoryManager dirMgr = new DirectoryManager(_config, song);
dirMgr.CreateDirectory();
System.IO.File.Delete(fileTempPath);
var filePath = dirMgr.SongDirectory;
var songFilename = songFile.FileName;
var fileDir = dirMgr.SongDirectory;
var filePath = fileDir;
var songFilename = song.Filename;
if (!songFilename.EndsWith(".mp3"))
filePath += $"{songFilename}.mp3";
@@ -188,7 +185,6 @@ namespace Icarus.Controllers.Managers
await (songFile.CopyToAsync(fileStream));
song.SongDirectory = dirMgr.SongDirectory;
_logger.Info("Song successfully saved to filesystem");
}
@@ -209,7 +205,8 @@ namespace Icarus.Controllers.Managers
public async Task<SongData> RetrieveSong(Song songMetaData)
{
SongData song = new SongData();
var song = new SongData();
try
{
Console.WriteLine("Fetching song from filesystem");
@@ -235,9 +232,11 @@ namespace Icarus.Controllers.Managers
Data = uncompressedSong
};
}
private async Task<Song> SaveSongTemp(IFormFile songFile, string filePath)
private async Task<Song> SaveSongTemp(IFormFile songFile)
{
var song = new Song();
var filename = song.GenerateFilename();
var filePath = Path.Combine(_tempDirectoryRoot, filename);
using (var filestream = new FileStream(filePath, FileMode.Create))
@@ -250,7 +249,8 @@ namespace Icarus.Controllers.Managers
song = meta.RetrieveMetaData(filePath);
_logger.Info("Assigning song filename");
song.Filename = songFile.FileName;
song.Filename = filename;
song.SongDirectory = _tempDirectoryRoot;
song.DateCreated = DateTime.Now;
return song;
@@ -300,14 +300,15 @@ namespace Icarus.Controllers.Managers
{
_logger.Info("Starting process to save the song to the database");
SaveAlbumToDatabase(ref song);//, albumStore);
SaveArtistToDatabase(ref song);//, artistStore);
SaveGenreToDatabase(ref song);//, genreStore);
SaveAlbumToDatabase(ref song);
SaveArtistToDatabase(ref song);
SaveGenreToDatabase(ref song);
var info = "Saving Song to DB";
Console.WriteLine(info);
_logger.Info(info);
_songContext.Add(song);
_songContext.SaveChanges();
}
private void SaveAlbumToDatabase(ref Song song)
{
@@ -318,22 +319,22 @@ namespace Icarus.Controllers.Managers
album.Title = song.AlbumTitle;
album.AlbumArtist = song.Artist;
var albumTitle = song.AlbumTitle;
var albumArtist = song.Artist;
AlbumContext albumContext = new AlbumContext(_connectionString);
if (!(albumContext.Albums.FirstOrDefault(alb => alb.Title.Equals(albumTitle)) != null))
var albumRetrieved = albumContext.Albums.FirstOrDefault(alb => alb.Title.Equals(albumTitle) && alb.AlbumArtist.Equals(albumArtist));
if (albumRetrieved == null)
{
album.SongCount = 1;
albumContext.Add(album);
album = albumContext.Albums.FirstOrDefault(alb => alb.Title.Equals(albumTitle));
albumContext.SaveChanges();
Console.WriteLine($"Album Id {album.AlbumID}");
}
else
{
var albumRetrieved = albumContext.Albums.FirstOrDefault(alb => alb.Title.Equals(albumTitle));
album.AlbumID = albumRetrieved.AlbumID;
album.SongCount = albumRetrieved.SongCount + 1;
albumContext.Update(album);
}
song.AlbumID = album.AlbumID;
@@ -349,20 +350,17 @@ namespace Icarus.Controllers.Managers
var artistTitle = artist.Name;
ArtistContext artistContext = new ArtistContext(_connectionString);
if (!(artistContext.Artists.FirstOrDefault(art => art.Name.Equals(artistTitle)) != null))
var artistRetrieved = artistContext.Artists.FirstOrDefault(art => art.Name.Equals(artistTitle));
if (artistRetrieved == null)
{
artist.SongCount = 1;
artistContext.Add(artist);
artist = artistContext.Artists.FirstOrDefault(art => art.Name.Equals(artistTitle));
artistContext.SaveChanges();
}
else
{
var artistRetrieved = artistContext.Artists.FirstOrDefault(art => art.Name.Equals(artistTitle));
artist.ArtistID = artistRetrieved.ArtistID;
artist.SongCount = artistRetrieved.SongCount + 1;
artistContext.Update(artist);
artistContext.SaveChanges();
}
song.ArtistID = artist.ArtistID;
@@ -379,12 +377,14 @@ namespace Icarus.Controllers.Managers
var genreName = song.Genre;
var genreContext = new GenreContext(_connectionString);
var genreRetrieved = genreContext.Genres.FirstOrDefault(gnr => gnr.GenreName.Equals(genreName));
if (! (genreContext.Genres.FirstOrDefault(gnr => gnr.GenreName.Equals(genreName)) != null))
if (genreRetrieved == null)
{
genreContext.Add(genre);
genreContext.SaveChanges();
Console.WriteLine("Going to find genre");
genre = genreContext.Genres.FirstOrDefault(gnr => gnr.GenreName.Equals(genreName));
var genreDump = $"Genre ID {genre.GenreID} GenreName {genre.GenreName}" +
$" Genre song Count {genre.SongCount}";
Console.WriteLine(genreDump);
@@ -392,12 +392,7 @@ namespace Icarus.Controllers.Managers
}
else
{
var genreRetrieved = genreContext.Genres.FirstOrDefault(gnr => gnr.GenreName.Equals(genreName));
genre.GenreID = genreRetrieved.GenreID;
genre.SongCount = genreRetrieved.SongCount + 1;
genreContext.Update(genre);
genreContext.SaveChanges();
}
song.GenreID = genre.GenreID;