From 7279b58a5819fe786c7e5d290be6c40edeb34f98 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Sat, 22 Feb 2014 14:03:23 -0800 Subject: [PATCH] Metadata cleanup and fixes Fixed: Episode metadata will be renamed to match episode file names on refresh Fixed: Episode metadata is renamed when episode file is renamed --- .../Config/MediaManagementConfigModule.cs | 5 +- .../MetaData/Consumers/Fake/Fake.cs | 16 +- .../MetaData/Consumers/Xbmc/XbmcMetadata.cs | 160 ++++++++++++------ .../MetaData/Files/MetadataFilesUpdated.cs | 15 ++ src/NzbDrone.Core/MetaData/IMetadata.cs | 4 +- src/NzbDrone.Core/MetaData/MetadataService.cs | 37 +++- .../Metadata/ExistingMetadataService.cs | 12 +- .../Metadata/Files/MetadataFileService.cs | 16 +- .../Metadata/Files/MetadataFileUpdated.cs | 14 -- src/NzbDrone.Core/Metadata/MetadataBase.cs | 4 +- src/NzbDrone.Core/NzbDrone.Core.csproj | 2 +- 11 files changed, 185 insertions(+), 100 deletions(-) create mode 100644 src/NzbDrone.Core/MetaData/Files/MetadataFilesUpdated.cs delete mode 100644 src/NzbDrone.Core/Metadata/Files/MetadataFileUpdated.cs diff --git a/src/NzbDrone.Api/Config/MediaManagementConfigModule.cs b/src/NzbDrone.Api/Config/MediaManagementConfigModule.cs index 6c8b8c65e..2ed63fc2d 100644 --- a/src/NzbDrone.Api/Config/MediaManagementConfigModule.cs +++ b/src/NzbDrone.Api/Config/MediaManagementConfigModule.cs @@ -1,4 +1,5 @@ -using FluentValidation; +using System; +using FluentValidation; using NzbDrone.Core.Configuration; using NzbDrone.Core.Validation.Paths; @@ -11,7 +12,7 @@ namespace NzbDrone.Api.Config { SharedValidator.RuleFor(c => c.FileChmod).NotEmpty(); SharedValidator.RuleFor(c => c.FolderChmod).NotEmpty(); - SharedValidator.RuleFor(c => c.RecycleBin).IsValidPath().SetValidator(pathExistsValidator); + SharedValidator.RuleFor(c => c.RecycleBin).IsValidPath().SetValidator(pathExistsValidator).When(c => !String.IsNullOrWhiteSpace(c.RecycleBin)); } } } \ No newline at end of file diff --git a/src/NzbDrone.Core/MetaData/Consumers/Fake/Fake.cs b/src/NzbDrone.Core/MetaData/Consumers/Fake/Fake.cs index 2eeb539ac..6ae86b093 100644 --- a/src/NzbDrone.Core/MetaData/Consumers/Fake/Fake.cs +++ b/src/NzbDrone.Core/MetaData/Consumers/Fake/Fake.cs @@ -1,10 +1,5 @@ using System; using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Xml; -using System.Xml.Linq; using NLog; using NzbDrone.Common; using NzbDrone.Common.Disk; @@ -16,19 +11,12 @@ namespace NzbDrone.Core.Metadata.Consumers.Fake { public class FakeMetadata : MetadataBase { - private readonly IDiskProvider _diskProvider; - private readonly IHttpProvider _httpProvider; - private readonly Logger _logger; - public FakeMetadata(IDiskProvider diskProvider, IHttpProvider httpProvider, Logger logger) : base(diskProvider, httpProvider, logger) { - _diskProvider = diskProvider; - _httpProvider = httpProvider; - _logger = logger; } - public override void OnSeriesUpdated(Series series, List existingMetadataFiles) + public override void OnSeriesUpdated(Series series, List existingMetadataFiles, List episodeFiles) { throw new NotImplementedException(); } @@ -38,7 +26,7 @@ namespace NzbDrone.Core.Metadata.Consumers.Fake throw new NotImplementedException(); } - public override void AfterRename(Series series) + public override void AfterRename(Series series, List existingMetadataFiles, List episodeFiles) { throw new NotImplementedException(); } diff --git a/src/NzbDrone.Core/MetaData/Consumers/Xbmc/XbmcMetadata.cs b/src/NzbDrone.Core/MetaData/Consumers/Xbmc/XbmcMetadata.cs index 9874df12f..d2bac9d22 100644 --- a/src/NzbDrone.Core/MetaData/Consumers/Xbmc/XbmcMetadata.cs +++ b/src/NzbDrone.Core/MetaData/Consumers/Xbmc/XbmcMetadata.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.IO; using System.Linq; +using System.Runtime.Remoting.Messaging; using System.Text; using System.Text.RegularExpressions; using System.Xml; @@ -53,8 +54,10 @@ namespace NzbDrone.Core.Metadata.Consumers.Xbmc private static readonly Regex SeasonImagesRegex = new Regex(@"^season(?\d{2,}|-all|-specials)-(?poster|banner|fanart)\.(?:png|jpg)", RegexOptions.Compiled | RegexOptions.IgnoreCase); private static readonly Regex EpisodeImageRegex = new Regex(@"-thumb\.(?:png|jpg)", RegexOptions.Compiled | RegexOptions.IgnoreCase); - public override void OnSeriesUpdated(Series series, List existingMetadataFiles) + public override void OnSeriesUpdated(Series series, List existingMetadataFiles, List episodeFiles) { + var metadataFiles = new List(); + if (!_diskProvider.FolderExists(series.Path)) { _logger.Info("Series folder does not exist, skipping metadata creation"); @@ -63,26 +66,24 @@ namespace NzbDrone.Core.Metadata.Consumers.Xbmc if (Settings.SeriesMetadata) { - WriteTvShowNfo(series, existingMetadataFiles); + metadataFiles.Add(WriteTvShowNfo(series, existingMetadataFiles)); } if (Settings.SeriesImages) { - WriteSeriesImages(series, existingMetadataFiles); + metadataFiles.AddRange(WriteSeriesImages(series, existingMetadataFiles)); } if (Settings.SeasonImages) { - WriteSeasonImages(series, existingMetadataFiles); + metadataFiles.AddRange(WriteSeasonImages(series, existingMetadataFiles)); } - var episodeFiles = GetEpisodeFiles(series.Id); - foreach (var episodeFile in episodeFiles) { if (Settings.EpisodeMetadata) { - WriteEpisodeNfo(series, episodeFile, existingMetadataFiles); + metadataFiles.Add(WriteEpisodeNfo(series, episodeFile, existingMetadataFiles)); } } @@ -90,54 +91,83 @@ namespace NzbDrone.Core.Metadata.Consumers.Xbmc { if (Settings.EpisodeImages) { - WriteEpisodeImages(series, episodeFile, existingMetadataFiles); + var metadataFile = WriteEpisodeImages(series, episodeFile, existingMetadataFiles); + + if (metadataFile != null) + { + metadataFiles.Add(metadataFile); + } } } + + _eventAggregator.PublishEvent(new MetadataFilesUpdated(metadataFiles)); } public override void OnEpisodeImport(Series series, EpisodeFile episodeFile, bool newDownload) { + var metadataFiles = new List(); + if (Settings.EpisodeMetadata) { - WriteEpisodeNfo(series, episodeFile, new List()); + metadataFiles.Add(WriteEpisodeNfo(series, episodeFile, new List())); } if (Settings.EpisodeImages) { + var metadataFile = WriteEpisodeImages(series, episodeFile, new List()); + + if (metadataFile != null) + { + metadataFiles.Add(metadataFile); + } WriteEpisodeImages(series, episodeFile, new List()); } + + _eventAggregator.PublishEvent(new MetadataFilesUpdated(metadataFiles)); } - public override void AfterRename(Series series) + public override void AfterRename(Series series, List existingMetadataFiles, List episodeFiles) { - //TODO: This should be part of the base class, but could be overwritten if the logic needs to be different - //or it could be done in MetadataService instead of having each metadata consumer do it - var episodeFiles = _mediaFileService.GetFilesBySeries(series.Id); - var episodeFilesMetadata = _metadataFileService.GetFilesBySeries(series.Id).Where(c => c.EpisodeFileId > 0).ToList(); + var episodeFilesMetadata = existingMetadataFiles.Where(c => c.EpisodeFileId > 0).ToList(); + var updatedMetadataFiles = new List(); foreach (var episodeFile in episodeFiles) { var metadataFiles = episodeFilesMetadata.Where(m => m.EpisodeFileId == episodeFile.Id).ToList(); - var episodeFilenameWithoutExtension = - Path.GetFileNameWithoutExtension(DiskProviderBase.GetRelativePath(series.Path, episodeFile.Path)); foreach (var metadataFile in metadataFiles) { - var fileNameWithoutExtension = Path.GetFileNameWithoutExtension(metadataFile.RelativePath); - var extension = Path.GetExtension(metadataFile.RelativePath); + string newFilename; - if (!fileNameWithoutExtension.Equals(episodeFilenameWithoutExtension)) + if (metadataFile.Type == MetadataType.EpisodeImage) { - var source = Path.Combine(series.Path, metadataFile.RelativePath); - var destination = Path.Combine(series.Path, fileNameWithoutExtension + extension); + newFilename = GetEpisodeImageFilename(episodeFile.Path); + } - _diskProvider.MoveFile(source, destination); - metadataFile.RelativePath = fileNameWithoutExtension + extension; + else if (metadataFile.Type == MetadataType.EpisodeMetadata) + { + newFilename = GetEpisodeNfoFilename(episodeFile.Path); + } - _eventAggregator.PublishEvent(new MetadataFileUpdated(metadataFile)); + else + { + _logger.Trace("Unknown episode file metadata: {0}", metadataFile.RelativePath); + continue; + } + + var existingFilename = Path.Combine(series.Path, metadataFile.RelativePath); + + if (!newFilename.PathEquals(existingFilename)) + { + _diskProvider.MoveFile(existingFilename, newFilename); + metadataFile.RelativePath = DiskProviderBase.GetRelativePath(series.Path, newFilename); + + updatedMetadataFiles.Add(metadataFile); } } } + + _eventAggregator.PublishEvent(new MetadataFilesUpdated(updatedMetadataFiles)); } public override MetadataFile FindMetadataFile(Series series, string path) @@ -205,7 +235,7 @@ namespace NzbDrone.Core.Metadata.Consumers.Xbmc return null; } - private void WriteTvShowNfo(Series series, List existingMetadataFiles) + private MetadataFile WriteTvShowNfo(Series series, List existingMetadataFiles) { _logger.Trace("Generating tvshow.nfo for: {0}", series.Title); var sb = new StringBuilder(); @@ -266,11 +296,11 @@ namespace NzbDrone.Core.Metadata.Consumers.Xbmc RelativePath = DiskProviderBase.GetRelativePath(series.Path, path) }; - _eventAggregator.PublishEvent(new MetadataFileUpdated(metadata)); + return metadata; } } - private void WriteSeriesImages(Series series, List existingMetadataFiles) + private IEnumerable WriteSeriesImages(Series series, List existingMetadataFiles) { foreach (var image in series.Images) { @@ -295,11 +325,11 @@ namespace NzbDrone.Core.Metadata.Consumers.Xbmc RelativePath = DiskProviderBase.GetRelativePath(series.Path, destination) }; - _eventAggregator.PublishEvent(new MetadataFileUpdated(metadata)); + yield return metadata; } } - private void WriteSeasonImages(Series series, List existingMetadataFiles) + private IEnumerable WriteSeasonImages(Series series, List existingMetadataFiles) { foreach (var season in series.Seasons) { @@ -327,14 +357,28 @@ namespace NzbDrone.Core.Metadata.Consumers.Xbmc RelativePath = DiskProviderBase.GetRelativePath(series.Path, path) }; - _eventAggregator.PublishEvent(new MetadataFileUpdated(metadata)); + yield return metadata; } } } - private void WriteEpisodeNfo(Series series, EpisodeFile episodeFile, List existingMetadataFiles) + private MetadataFile WriteEpisodeNfo(Series series, EpisodeFile episodeFile, List existingMetadataFiles) { - var filename = episodeFile.Path.Replace(Path.GetExtension(episodeFile.Path), ".nfo"); + var filename = GetEpisodeNfoFilename(episodeFile.Path); + var relativePath = DiskProviderBase.GetRelativePath(series.Path, filename); + + var existingMetadata = existingMetadataFiles.SingleOrDefault(c => c.Type == MetadataType.EpisodeMetadata && + c.EpisodeFileId == episodeFile.Id); + + if (existingMetadata != null) + { + var fullPath = Path.Combine(series.Path, existingMetadata.RelativePath); + if (!filename.PathEquals(fullPath)) + { + _diskProvider.MoveFile(fullPath, filename); + existingMetadata.RelativePath = relativePath; + } + } _logger.Debug("Generating {0} for: {1}", filename, episodeFile.Path); @@ -390,8 +434,7 @@ namespace NzbDrone.Core.Metadata.Consumers.Xbmc _logger.Debug("Saving episodedetails to: {0}", filename); _diskProvider.WriteAllText(filename, xmlResult.Trim(Environment.NewLine.ToCharArray())); - var metadata = existingMetadataFiles.SingleOrDefault(c => c.Type == MetadataType.EpisodeMetadata && - c.EpisodeFileId == episodeFile.Id) ?? + var metadata = existingMetadata ?? new MetadataFile { SeriesId = series.Id, @@ -401,19 +444,38 @@ namespace NzbDrone.Core.Metadata.Consumers.Xbmc RelativePath = DiskProviderBase.GetRelativePath(series.Path, filename) }; - _eventAggregator.PublishEvent(new MetadataFileUpdated(metadata)); + return metadata; } - private void WriteEpisodeImages(Series series, EpisodeFile episodeFile, List existingMetadataFiles) + private MetadataFile WriteEpisodeImages(Series series, EpisodeFile episodeFile, List existingMetadataFiles) { - var screenshot = episodeFile.Episodes.Value.First().Images.Single(i => i.CoverType == MediaCoverTypes.Screenshot); + var screenshot = episodeFile.Episodes.Value.First().Images.SingleOrDefault(i => i.CoverType == MediaCoverTypes.Screenshot); + + if (screenshot == null) + { + _logger.Trace("Episode screenshot not available"); + return null; + } + + var filename = GetEpisodeImageFilename(episodeFile.Path); + var relativePath = DiskProviderBase.GetRelativePath(series.Path, filename); - var filename = Path.ChangeExtension(episodeFile.Path, "").Trim('.') + "-thumb.jpg"; + var existingMetadata = existingMetadataFiles.SingleOrDefault(c => c.Type == MetadataType.EpisodeImage && + c.EpisodeFileId == episodeFile.Id); + + if (existingMetadata != null) + { + var fullPath = Path.Combine(series.Path, existingMetadata.RelativePath); + if (!filename.PathEquals(fullPath)) + { + _diskProvider.MoveFile(fullPath, filename); + existingMetadata.RelativePath = relativePath; + } + } DownloadImage(series, screenshot.Url, filename); - var metadata = existingMetadataFiles.SingleOrDefault(c => c.Type == MetadataType.EpisodeImage && - c.EpisodeFileId == episodeFile.Id) ?? + var metadata = existingMetadata ?? new MetadataFile { SeriesId = series.Id, @@ -423,21 +485,17 @@ namespace NzbDrone.Core.Metadata.Consumers.Xbmc RelativePath = DiskProviderBase.GetRelativePath(series.Path, filename) }; - _eventAggregator.PublishEvent(new MetadataFileUpdated(metadata)); + return metadata; } - private List GetEpisodeFiles(int seriesId) + private string GetEpisodeNfoFilename(string episodeFilePath) { - var episodeFiles = _mediaFileService.GetFilesBySeries(seriesId); - var episodes = _episodeService.GetEpisodeBySeries(seriesId); - - foreach (var episodeFile in episodeFiles) - { - var localEpisodeFile = episodeFile; - episodeFile.Episodes = new LazyList(episodes.Where(e => e.EpisodeFileId == localEpisodeFile.Id)); - } + return Path.ChangeExtension(episodeFilePath, "nfo"); + } - return episodeFiles; + private string GetEpisodeImageFilename(string episodeFilePath) + { + return Path.ChangeExtension(episodeFilePath, "").Trim('.') + "-thumb.jpg"; } } } diff --git a/src/NzbDrone.Core/MetaData/Files/MetadataFilesUpdated.cs b/src/NzbDrone.Core/MetaData/Files/MetadataFilesUpdated.cs new file mode 100644 index 000000000..98427d7dd --- /dev/null +++ b/src/NzbDrone.Core/MetaData/Files/MetadataFilesUpdated.cs @@ -0,0 +1,15 @@ +using System.Collections.Generic; +using NzbDrone.Common.Messaging; + +namespace NzbDrone.Core.Metadata.Files +{ + public class MetadataFilesUpdated : IEvent + { + public List MetadataFiles { get; set; } + + public MetadataFilesUpdated(List metadataFiles) + { + MetadataFiles = metadataFiles; + } + } +} diff --git a/src/NzbDrone.Core/MetaData/IMetadata.cs b/src/NzbDrone.Core/MetaData/IMetadata.cs index 02a51554c..63fa19d73 100644 --- a/src/NzbDrone.Core/MetaData/IMetadata.cs +++ b/src/NzbDrone.Core/MetaData/IMetadata.cs @@ -8,9 +8,9 @@ namespace NzbDrone.Core.Metadata { public interface IMetadata : IProvider { - void OnSeriesUpdated(Series series, List existingMetadataFiles); + void OnSeriesUpdated(Series series, List existingMetadataFiles, List episodeFiles); void OnEpisodeImport(Series series, EpisodeFile episodeFile, bool newDownload); - void AfterRename(Series series); + void AfterRename(Series series, List existingMetadataFiles, List episodeFiles); MetadataFile FindMetadataFile(Series series, string path); } } diff --git a/src/NzbDrone.Core/MetaData/MetadataService.cs b/src/NzbDrone.Core/MetaData/MetadataService.cs index 008354c75..681eed8d0 100644 --- a/src/NzbDrone.Core/MetaData/MetadataService.cs +++ b/src/NzbDrone.Core/MetaData/MetadataService.cs @@ -1,9 +1,13 @@ -using System.Linq; +using System.Collections.Generic; +using System.Linq; using NLog; +using NzbDrone.Core.Datastore; using NzbDrone.Core.MediaCover; +using NzbDrone.Core.MediaFiles; using NzbDrone.Core.MediaFiles.Events; using NzbDrone.Core.Messaging.Events; using NzbDrone.Core.Metadata.Files; +using NzbDrone.Core.Tv; namespace NzbDrone.Core.Metadata { @@ -15,16 +19,22 @@ namespace NzbDrone.Core.Metadata private readonly IMetadataFactory _metadataFactory; private readonly IMetadataFileService _metadataFileService; private readonly ICleanMetadataService _cleanMetadataService; + private readonly IMediaFileService _mediaFileService; + private readonly IEpisodeService _episodeService; private readonly Logger _logger; public MetadataService(IMetadataFactory metadataFactory, IMetadataFileService metadataFileService, ICleanMetadataService cleanMetadataService, + IMediaFileService mediaFileService, + IEpisodeService episodeService, Logger logger) { _metadataFactory = metadataFactory; _metadataFileService = metadataFileService; _cleanMetadataService = cleanMetadataService; + _mediaFileService = mediaFileService; + _episodeService = episodeService; _logger = logger; } @@ -35,7 +45,7 @@ namespace NzbDrone.Core.Metadata foreach (var consumer in _metadataFactory.Enabled()) { - consumer.OnSeriesUpdated(message.Series, seriesMetadata.Where(c => c.Consumer == consumer.GetType().Name).ToList()); + consumer.OnSeriesUpdated(message.Series, GetMetadataFilesForConsumer(consumer, seriesMetadata), GetEpisodeFiles(message.Series.Id)); } } @@ -49,10 +59,31 @@ namespace NzbDrone.Core.Metadata public void Handle(SeriesRenamedEvent message) { + var seriesMetadata = _metadataFileService.GetFilesBySeries(message.Series.Id); + foreach (var consumer in _metadataFactory.Enabled()) { - consumer.AfterRename(message.Series); + consumer.AfterRename(message.Series, GetMetadataFilesForConsumer(consumer, seriesMetadata), GetEpisodeFiles(message.Series.Id)); + } + } + + private List GetEpisodeFiles(int seriesId) + { + var episodeFiles = _mediaFileService.GetFilesBySeries(seriesId); + var episodes = _episodeService.GetEpisodeBySeries(seriesId); + + foreach (var episodeFile in episodeFiles) + { + var localEpisodeFile = episodeFile; + episodeFile.Episodes = new LazyList(episodes.Where(e => e.EpisodeFileId == localEpisodeFile.Id)); } + + return episodeFiles; + } + + private List GetMetadataFilesForConsumer(IMetadata consumer, List seriesMetadata) + { + return seriesMetadata.Where(c => c.Consumer == consumer.GetType().Name).ToList(); } } } diff --git a/src/NzbDrone.Core/Metadata/ExistingMetadataService.cs b/src/NzbDrone.Core/Metadata/ExistingMetadataService.cs index aca05235a..4c5d89aa1 100644 --- a/src/NzbDrone.Core/Metadata/ExistingMetadataService.cs +++ b/src/NzbDrone.Core/Metadata/ExistingMetadataService.cs @@ -12,7 +12,7 @@ using NzbDrone.Core.Tv.Events; namespace NzbDrone.Core.Metadata { - public class ExistingMetadataService : IHandleAsync + public class ExistingMetadataService : IHandle { private readonly IDiskProvider _diskProvider; private readonly IMetadataFileService _metadataFileService; @@ -33,7 +33,7 @@ namespace NzbDrone.Core.Metadata _consumers = consumers.ToList(); } - public void HandleAsync(SeriesUpdatedEvent message) + public void Handle(SeriesUpdatedEvent message) { if (!_diskProvider.FolderExists(message.Series.Path)) return; @@ -42,7 +42,9 @@ namespace NzbDrone.Core.Metadata var filesOnDisk = _diskProvider.GetFiles(message.Series.Path, SearchOption.AllDirectories); var possibleMetadataFiles = filesOnDisk.Where(c => !MediaFileExtensions.Extensions.Contains(Path.GetExtension(c).ToLower())).ToList(); var filteredFiles = _metadataFileService.FilterExistingFiles(possibleMetadataFiles, message.Series); - + + var metadataFiles = new List(); + foreach (var possibleMetadataFile in filteredFiles) { foreach (var consumer in _consumers) @@ -71,9 +73,11 @@ namespace NzbDrone.Core.Metadata metadata.EpisodeFileId = localEpisode.Episodes.First().EpisodeFileId; } - _metadataFileService.Upsert(metadata); + metadataFiles.Add(metadata); } } + + _metadataFileService.Upsert(metadataFiles); } } } diff --git a/src/NzbDrone.Core/Metadata/Files/MetadataFileService.cs b/src/NzbDrone.Core/Metadata/Files/MetadataFileService.cs index 56471a0b1..e53c403af 100644 --- a/src/NzbDrone.Core/Metadata/Files/MetadataFileService.cs +++ b/src/NzbDrone.Core/Metadata/Files/MetadataFileService.cs @@ -18,14 +18,14 @@ namespace NzbDrone.Core.Metadata.Files List GetFilesByEpisodeFile(int episodeFileId); MetadataFile FindByPath(string path); List FilterExistingFiles(List files, Series series); - MetadataFile Upsert(MetadataFile metadataFile); + void Upsert(List metadataFiles); void Delete(int id); } public class MetadataFileService : IMetadataFileService, IHandleAsync, IHandleAsync, - IHandle + IHandle { private readonly IMetadataFileRepository _repository; private readonly ISeriesService _seriesService; @@ -67,10 +67,12 @@ namespace NzbDrone.Core.Metadata.Files return files.Except(seriesFiles, PathEqualityComparer.Instance).ToList(); } - public MetadataFile Upsert(MetadataFile metadataFile) + public void Upsert(List metadataFiles) { - metadataFile.LastUpdated = DateTime.UtcNow; - return _repository.Upsert(metadataFile); + metadataFiles.ForEach(m => m.LastUpdated = DateTime.UtcNow); + + _repository.InsertMany(metadataFiles.Where(m => m.Id == 0).ToList()); + _repository.UpdateMany(metadataFiles.Where(m => m.Id > 0).ToList()); } public void Delete(int id) @@ -103,9 +105,9 @@ namespace NzbDrone.Core.Metadata.Files _repository.DeleteForEpisodeFile(episodeFile.Id); } - public void Handle(MetadataFileUpdated message) + public void Handle(MetadataFilesUpdated message) { - Upsert(message.Metadata); + Upsert(message.MetadataFiles); } } } diff --git a/src/NzbDrone.Core/Metadata/Files/MetadataFileUpdated.cs b/src/NzbDrone.Core/Metadata/Files/MetadataFileUpdated.cs deleted file mode 100644 index 7f7b4b189..000000000 --- a/src/NzbDrone.Core/Metadata/Files/MetadataFileUpdated.cs +++ /dev/null @@ -1,14 +0,0 @@ -using NzbDrone.Common.Messaging; - -namespace NzbDrone.Core.Metadata.Files -{ - public class MetadataFileUpdated : IEvent - { - public MetadataFile Metadata { get; set; } - - public MetadataFileUpdated(MetadataFile metadata) - { - Metadata = metadata; - } - } -} diff --git a/src/NzbDrone.Core/Metadata/MetadataBase.cs b/src/NzbDrone.Core/Metadata/MetadataBase.cs index 29143a424..04be5860a 100644 --- a/src/NzbDrone.Core/Metadata/MetadataBase.cs +++ b/src/NzbDrone.Core/Metadata/MetadataBase.cs @@ -42,9 +42,9 @@ namespace NzbDrone.Core.Metadata public ProviderDefinition Definition { get; set; } - public abstract void OnSeriesUpdated(Series series, List existingMetadataFiles); + public abstract void OnSeriesUpdated(Series series, List existingMetadataFiles, List episodeFiles); public abstract void OnEpisodeImport(Series series, EpisodeFile episodeFile, bool newDownload); - public abstract void AfterRename(Series series); + public abstract void AfterRename(Series series, List existingMetadataFiles, List episodeFiles); public abstract MetadataFile FindMetadataFile(Series series, string path); protected TSettings Settings diff --git a/src/NzbDrone.Core/NzbDrone.Core.csproj b/src/NzbDrone.Core/NzbDrone.Core.csproj index 671d53bcb..220e27eca 100644 --- a/src/NzbDrone.Core/NzbDrone.Core.csproj +++ b/src/NzbDrone.Core/NzbDrone.Core.csproj @@ -344,10 +344,10 @@ + -