Added functionality to delete empty directorie after updating songs #45

This commit is contained in:
amazing-username
2019-05-22 20:37:14 -04:00
parent d4c3d94d1a
commit 0cf1bf1c2d
3 changed files with 85 additions and 17 deletions
+42
View File
@@ -87,7 +87,49 @@ namespace Icarus.Controllers.Managers
Console.WriteLine($"An error occurred {exMsg}"); Console.WriteLine($"An error occurred {exMsg}");
} }
} }
public void DeleteEmptyDirectories(Song song)
{
try
{
var albumDirectory = AlbumDirectory(song);
var artistDirectory = ArtistDirectory(song);
if (IsDirectoryEmpty(albumDirectory))
{
Directory.Delete(albumDirectory);
_logger.Info("Album directory deleted");
}
if (IsDirectoryEmpty(artistDirectory))
{
Directory.Delete(artistDirectory);
_logger.Info("Artist directory deleted");
}
}
catch (Exception ex)
{
var msg = ex.Message;
_logger.Error(msg, "An error occurred");
}
}
public string RetrieveAlbumPath(Song song)
{
_logger.Info("Retrieving album song path");
var albumPath = string.Empty;
albumPath = AlbumDirectory(song);
return albumPath;
}
public string RetrieveArtistPath(Song song)
{
_logger.Info("Retrieving artist path");
var artistPath = string.Empty;
artistPath = ArtistDirectory(song);
return artistPath;
}
public string GenerateSongPath(Song song) public string GenerateSongPath(Song song)
{ {
_logger.Info("Generating song path"); _logger.Info("Generating song path");
+41 -14
View File
@@ -94,11 +94,12 @@ namespace Icarus.Controllers.Managers
#region Methods #region Methods
// TODO: This method should update the Song, Album, and Artist records in the database
public SongResult UpdateSong(Song song, MusicStoreContext songStore, AlbumStoreContext albumStore, public SongResult UpdateSong(Song song, MusicStoreContext songStore, AlbumStoreContext albumStore,
ArtistStoreContext artistStore, GenreStoreContext genreStore, ArtistStoreContext artistStore, GenreStoreContext genreStore,
YearStoreContext yearStore) YearStoreContext yearStore)
{ {
var result = new SongResult();
try try
{ {
var oldSongRecord = songStore.GetSong(song); var oldSongRecord = songStore.GetSong(song);
@@ -109,7 +110,6 @@ namespace Icarus.Controllers.Managers
var updatedSong = updateMetadata.UpdatedSongRecord; var updatedSong = updateMetadata.UpdatedSongRecord;
// TODO: Add the following methods
var updatedAlbum = UpdateAlbumInDatabase(oldSongRecord, updatedSong, albumStore); var updatedAlbum = UpdateAlbumInDatabase(oldSongRecord, updatedSong, albumStore);
oldSongRecord.AlbumId = updatedAlbum.AlbumId; oldSongRecord.AlbumId = updatedAlbum.AlbumId;
var updatedArtist = UpdateArtistInDatabase(oldSongRecord, updatedSong, artistStore); var updatedArtist = UpdateArtistInDatabase(oldSongRecord, updatedSong, artistStore);
@@ -119,15 +119,20 @@ namespace Icarus.Controllers.Managers
var updatedYear = UpdateYearInDatabase(oldSongRecord, updatedSong, yearStore); var updatedYear = UpdateYearInDatabase(oldSongRecord, updatedSong, yearStore);
oldSongRecord.YearId = updatedYear.YearId; oldSongRecord.YearId = updatedYear.YearId;
UpdateSongInDatabase(oldSongRecord, updatedSong, songStore); UpdateSongInDatabase(ref oldSongRecord, ref updatedSong, songStore, ref result);
DeleteEmptyDirectories(ref oldSongRecord, ref updatedSong);
} }
catch (Exception ex) catch (Exception ex)
{ {
var msg = ex.Message; var msg = ex.Message;
_logger.Error(msg, "An error occurred"); _logger.Error(msg, "An error occurred");
result.Message = $"An error occurred: {msg}";
result.SongTitle = song.Title;
} }
return new SongResult(); return result;
} }
public bool DeleteSongFromFileSystem(Song songMetaData) public bool DeleteSongFromFileSystem(Song songMetaData)
@@ -585,6 +590,14 @@ namespace Icarus.Controllers.Managers
return false; return false;
} }
private void DeleteEmptyDirectories(ref Song oldSong, ref Song updatedSong)
{
DirectoryManager mgr = new DirectoryManager(_config);
_logger.Info("Checking to see if there are any directories to delete");
mgr.DeleteEmptyDirectories(oldSong);
}
private void Initialize() private void Initialize()
{ {
try try
@@ -968,22 +981,34 @@ namespace Icarus.Controllers.Managers
return yearStore.GetSongYear(newSongRecord); return yearStore.GetSongYear(newSongRecord);
} }
private void UpdateSongInDatabase(Song oldSongRecord, Song newSongRecord, MusicStoreContext songStore) private void UpdateSongInDatabase(ref Song oldSongRecord, ref Song newSongRecord, MusicStoreContext songStore,
ref SongResult result)
{ {
var updatedSongRecord = oldSongRecord; var updatedSongRecord = new Song
{
Id = oldSongRecord.Id,
Title = oldSongRecord.Title,
Artist = oldSongRecord.Artist,
AlbumTitle = oldSongRecord.AlbumTitle,
Genre = oldSongRecord.Genre,
Year = oldSongRecord.Year,
Filename = oldSongRecord.Filename,
SongPath = oldSongRecord.SongPath,
ArtistId = oldSongRecord.ArtistId,
AlbumId = oldSongRecord.AlbumId,
GenreId = oldSongRecord.GenreId,
YearId = oldSongRecord.YearId
};
var artistOrAlbumChanged = false; var artistOrAlbumChanged = false;
if (!SongRecordChanged(updatedSongRecord, newSongRecord)) if (!SongRecordChanged(oldSongRecord, newSongRecord))
{ {
_logger.Info("No change to the song record"); _logger.Info("No change to the song record");
return; return;
} }
_logger.Info("Changes to song record found"); _logger.Info("Changes to song record found");
Console.WriteLine($"Song id {updatedSongRecord.Id}");
Console.WriteLine("Before updated song values");
MetadataRetriever.PrintMetadata(updatedSongRecord);
if (!string.IsNullOrEmpty(newSongRecord.Title)) if (!string.IsNullOrEmpty(newSongRecord.Title))
{ {
@@ -1010,9 +1035,6 @@ namespace Icarus.Controllers.Managers
_logger.Info("Applied changes to song record"); _logger.Info("Applied changes to song record");
Console.WriteLine("Updated song values\n");
MetadataRetriever.PrintMetadata(updatedSongRecord);
if (artistOrAlbumChanged) if (artistOrAlbumChanged)
{ {
_logger.Info("Change to song's album or artist"); _logger.Info("Change to song's album or artist");
@@ -1060,6 +1082,11 @@ namespace Icarus.Controllers.Managers
{ {
songStore.SaveSong(updatedSongRecord); songStore.SaveSong(updatedSongRecord);
} }
newSongRecord = updatedSongRecord;
result.Message = "Successfully updated song";
result.SongTitle = updatedSongRecord.Title;
} }
private async Task PopulateSongDetails() private async Task PopulateSongDetails()
+2 -3
View File
@@ -121,12 +121,11 @@ namespace Icarus.Controllers
Message = "Song does not exist" Message = "Song does not exist"
}); });
} }
// TODO: Provide functionality for the UpdateSong(...) method
// before removing the below return statement
var songRes = _songMgr.UpdateSong(song, context, albumStore, artistStore, genreStore, var songRes = _songMgr.UpdateSong(song, context, albumStore, artistStore, genreStore,
yearStore); yearStore);
return Ok("song exists"); return Ok(songRes);
} }
} }
} }