Added functionality to delete empty directorie after updating songs #45
This commit is contained in:
@@ -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");
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user