Refactor ExtraFile/MetadataFile Services (#104)

* Preliminary Work for Extras for Music

* DB Migration for ExtraFiles, Other Cleanup

* More Extras Work, Add Album Metadata Type

* Update Housekeeps for Music Extras

* Fix HouseKeeper and add new Tests

* Final round of Cleanup
This commit is contained in:
Qstick
2017-10-16 21:40:31 -04:00
committed by GitHub
parent 4016d359ac
commit 38cbb2114f
43 changed files with 985 additions and 841 deletions
@@ -1,4 +1,4 @@
using System;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
@@ -8,16 +8,16 @@ using NzbDrone.Common.Extensions;
using NzbDrone.Core.MediaFiles;
using NzbDrone.Core.MediaFiles.Events;
using NzbDrone.Core.Messaging.Events;
using NzbDrone.Core.Tv;
using NzbDrone.Core.Tv.Events;
using NzbDrone.Core.Music;
using NzbDrone.Core.Music.Events;
namespace NzbDrone.Core.Extras.Files
{
public interface IExtraFileService<TExtraFile>
where TExtraFile : ExtraFile, new()
{
List<TExtraFile> GetFilesBySeries(int seriesId);
List<TExtraFile> GetFilesByEpisodeFile(int episodeFileId);
List<TExtraFile> GetFilesByArtist(int artistId);
List<TExtraFile> GetFilesByTrackFile(int trackFileId);
TExtraFile FindByPath(string path);
void Upsert(TExtraFile extraFile);
void Upsert(List<TExtraFile> extraFiles);
@@ -26,24 +26,24 @@ namespace NzbDrone.Core.Extras.Files
}
public abstract class ExtraFileService<TExtraFile> : IExtraFileService<TExtraFile>,
IHandleAsync<SeriesDeletedEvent>,
IHandleAsync<EpisodeFileDeletedEvent>
IHandleAsync<ArtistDeletedEvent>,
IHandleAsync<TrackFileDeletedEvent>
where TExtraFile : ExtraFile, new()
{
private readonly IExtraFileRepository<TExtraFile> _repository;
private readonly ISeriesService _seriesService;
private readonly IArtistService _artistService;
private readonly IDiskProvider _diskProvider;
private readonly IRecycleBinProvider _recycleBinProvider;
private readonly Logger _logger;
public ExtraFileService(IExtraFileRepository<TExtraFile> repository,
ISeriesService seriesService,
IArtistService artistService,
IDiskProvider diskProvider,
IRecycleBinProvider recycleBinProvider,
Logger logger)
{
_repository = repository;
_seriesService = seriesService;
_artistService = artistService;
_diskProvider = diskProvider;
_recycleBinProvider = recycleBinProvider;
_logger = logger;
@@ -51,14 +51,14 @@ namespace NzbDrone.Core.Extras.Files
public virtual bool PermanentlyDelete => false;
public List<TExtraFile> GetFilesBySeries(int seriesId)
public List<TExtraFile> GetFilesByArtist(int artistId)
{
return _repository.GetFilesBySeries(seriesId);
return _repository.GetFilesByArtist(artistId);
}
public List<TExtraFile> GetFilesByEpisodeFile(int episodeFileId)
public List<TExtraFile> GetFilesByTrackFile(int trackFileId)
{
return _repository.GetFilesByEpisodeFile(episodeFileId);
return _repository.GetFilesByTrackFile(trackFileId);
}
public TExtraFile FindByPath(string path)
@@ -97,28 +97,28 @@ namespace NzbDrone.Core.Extras.Files
_repository.DeleteMany(ids);
}
public void HandleAsync(SeriesDeletedEvent message)
public void HandleAsync(ArtistDeletedEvent message)
{
_logger.Debug("Deleting Extra from database for series: {0}", message.Series);
_repository.DeleteForSeries(message.Series.Id);
_logger.Debug("Deleting Extra from database for artist: {0}", message.Artist);
_repository.DeleteForArtist(message.Artist.Id);
}
public void HandleAsync(EpisodeFileDeletedEvent message)
public void HandleAsync(TrackFileDeletedEvent message)
{
var episodeFile = message.EpisodeFile;
var trackFile = message.TrackFile;
if (message.Reason == DeleteMediaFileReason.NoLinkedEpisodes)
{
_logger.Debug("Removing episode file from DB as part of cleanup routine, not deleting extra files from disk.");
_logger.Debug("Removing track file from DB as part of cleanup routine, not deleting extra files from disk.");
}
else
{
var series = _seriesService.GetSeries(message.EpisodeFile.SeriesId);
var artist = _artistService.GetArtist(message.TrackFile.ArtistId);
foreach (var extra in _repository.GetFilesByEpisodeFile(episodeFile.Id))
foreach (var extra in _repository.GetFilesByTrackFile(trackFile.Id))
{
var path = Path.Combine(series.Path, extra.RelativePath);
var path = Path.Combine(artist.Path, extra.RelativePath);
if (_diskProvider.FileExists(path))
{
@@ -130,15 +130,15 @@ namespace NzbDrone.Core.Extras.Files
else
{
// Send extra files to the recycling bin so they can be recovered if necessary
var subfolder = _diskProvider.GetParentFolder(series.Path).GetRelativePath(_diskProvider.GetParentFolder(path));
var subfolder = _diskProvider.GetParentFolder(artist.Path).GetRelativePath(_diskProvider.GetParentFolder(path));
_recycleBinProvider.DeleteFile(path, subfolder);
}
}
}
}
_logger.Debug("Deleting Extra from database for episode file: {0}", episodeFile);
_repository.DeleteForEpisodeFile(episodeFile.Id);
_logger.Debug("Deleting Extra from database for track file: {0}", trackFile);
_repository.DeleteForTrackFile(trackFile.Id);
}
}
}