diff --git a/src/NzbDrone.Common/Cache/Cached.cs b/src/NzbDrone.Common/Cache/Cached.cs index b2319cf39..4c17ed3f2 100644 --- a/src/NzbDrone.Common/Cache/Cached.cs +++ b/src/NzbDrone.Common/Cache/Cached.cs @@ -67,6 +67,14 @@ namespace NzbDrone.Common.Cache _store.TryRemove(key, out value); } + public int Count + { + get + { + return _store.Count; + } + } + public T Get(string key, Func function, TimeSpan? lifeTime = null) { Ensure.That(key, () => key).IsNotNullOrWhiteSpace(); diff --git a/src/NzbDrone.Common/Cache/ICached.cs b/src/NzbDrone.Common/Cache/ICached.cs index 1c9e50812..6f68cb37f 100644 --- a/src/NzbDrone.Common/Cache/ICached.cs +++ b/src/NzbDrone.Common/Cache/ICached.cs @@ -6,6 +6,8 @@ namespace NzbDrone.Common.Cache public interface ICached { void Clear(); + void Remove(string key); + int Count { get; } } public interface ICached : ICached @@ -13,7 +15,6 @@ namespace NzbDrone.Common.Cache void Set(string key, T value, TimeSpan? lifetime = null); T Get(string key, Func function, TimeSpan? lifeTime = null); T Find(string key); - void Remove(string key); ICollection Values { get; } } diff --git a/src/NzbDrone.Core/DataAugmentation/Xem/UpdateXemMappingsCommand.cs b/src/NzbDrone.Core/DataAugmentation/Xem/UpdateXemMappingsCommand.cs deleted file mode 100644 index 832e0ed58..000000000 --- a/src/NzbDrone.Core/DataAugmentation/Xem/UpdateXemMappingsCommand.cs +++ /dev/null @@ -1,9 +0,0 @@ -using NzbDrone.Core.Messaging.Commands; - -namespace NzbDrone.Core.DataAugmentation.Xem -{ - public class UpdateXemMappingsCommand : Command - { - - } -} \ No newline at end of file diff --git a/src/NzbDrone.Core/DataAugmentation/Xem/XemService.cs b/src/NzbDrone.Core/DataAugmentation/Xem/XemService.cs index dd1e277cc..c7e7b3441 100644 --- a/src/NzbDrone.Core/DataAugmentation/Xem/XemService.cs +++ b/src/NzbDrone.Core/DataAugmentation/Xem/XemService.cs @@ -1,17 +1,14 @@ using System; -using System.Collections.Generic; using System.Linq; using NLog; using NzbDrone.Common.Cache; -using NzbDrone.Core.Lifecycle; -using NzbDrone.Core.Messaging.Commands; using NzbDrone.Core.Messaging.Events; using NzbDrone.Core.Tv; using NzbDrone.Core.Tv.Events; namespace NzbDrone.Core.DataAugmentation.Xem { - public class XemService : IExecute, IHandle, IHandleAsync + public class XemService : IHandle { private readonly IEpisodeService _episodeService; private readonly IXemProxy _xemProxy; @@ -33,63 +30,28 @@ namespace NzbDrone.Core.DataAugmentation.Xem } - public void Execute(UpdateXemMappingsCommand message) - { - UpdateMappings(); - } - public void Handle(SeriesUpdatedEvent message) { - UpdateMappings(message.Series); - } - - public void HandleAsync(ApplicationStartedEvent message) - { - GetXemSeriesIds(); - } - - private void UpdateMappings() - { - _logger.Trace("Starting scene numbering update"); - - try + if (_cache.Count == 0) { - var ids = GetXemSeriesIds(); - var series = _seriesService.GetAllSeries(); - var wantedSeries = series.Where(s => ids.Contains(s.TvdbId)).ToList(); - - foreach (var ser in wantedSeries) - { - PerformUpdate(ser); - } - - _logger.Trace("Completed scene numbering update"); + RefreshCache(); } - catch (Exception ex) + if (!_cache.Find(message.Series.TvdbId.ToString())) { - _logger.WarnException("Error updating Scene Mappings", ex); - throw; - } - } - - private void UpdateMappings(Series series) - { - if (!_cache.Find(series.TvdbId.ToString())) - { - _logger.Trace("Scene numbering is not available for {0} [{1}]", series.Title, series.TvdbId); + _logger.Trace("Scene numbering is not available for {0} [{1}]", message.Series.Title, message.Series.TvdbId); return; } - PerformUpdate(series); + PerformUpdate(message.Series); } private void PerformUpdate(Series series) { _logger.Trace("Updating scene numbering mapping for: {0}", series); + try { - var episodesToUpdate = new List(); var mappings = _xemProxy.GetSceneTvdbMappings(series.TvdbId); if (!mappings.Any()) @@ -101,6 +63,13 @@ namespace NzbDrone.Core.DataAugmentation.Xem var episodes = _episodeService.GetEpisodeBySeries(series.Id); + foreach (var episode in episodes) + { + episode.AbsoluteEpisodeNumber = 0; + episode.SceneSeasonNumber = 0; + episode.SceneEpisodeNumber = 0; + } + foreach (var mapping in mappings) { _logger.Trace("Setting scene numbering mappings for {0} S{1:00}E{2:00}", series, mapping.Tvdb.Season, mapping.Tvdb.Episode); @@ -116,24 +85,21 @@ namespace NzbDrone.Core.DataAugmentation.Xem episode.AbsoluteEpisodeNumber = mapping.Scene.Absolute; episode.SceneSeasonNumber = mapping.Scene.Season; episode.SceneEpisodeNumber = mapping.Scene.Episode; - episodesToUpdate.Add(episode); } - _logger.Trace("Committing scene numbering mappings to database for: {0}", series); - _episodeService.UpdateEpisodes(episodesToUpdate); - - _logger.Trace("Setting UseSceneMapping for {0}", series); + _episodeService.UpdateEpisodes(episodes); series.UseSceneNumbering = true; _seriesService.UpdateSeries(series); - } + _logger.Debug("XEM mapping updated for {0}", series); + } catch (Exception ex) { _logger.ErrorException("Error updating scene numbering mappings for: " + series, ex); } } - private List GetXemSeriesIds() + private void RefreshCache() { _cache.Clear(); @@ -141,10 +107,8 @@ namespace NzbDrone.Core.DataAugmentation.Xem foreach (var id in ids) { - _cache.Set(id.ToString(), true); + _cache.Set(id.ToString(), true, TimeSpan.FromHours(1)); } - - return ids; } } } diff --git a/src/NzbDrone.Core/Jobs/TaskManager.cs b/src/NzbDrone.Core/Jobs/TaskManager.cs index eeb5e29fb..d87ded193 100644 --- a/src/NzbDrone.Core/Jobs/TaskManager.cs +++ b/src/NzbDrone.Core/Jobs/TaskManager.cs @@ -47,7 +47,6 @@ namespace NzbDrone.Core.Jobs var defaultTasks = new[] { new ScheduledTask{ Interval = _configService.RssSyncInterval, TypeName = typeof(RssSyncCommand).FullName}, - new ScheduledTask{ Interval = 12*60, TypeName = typeof(UpdateXemMappingsCommand).FullName}, new ScheduledTask{ Interval = 12*60, TypeName = typeof(RefreshSeriesCommand).FullName}, new ScheduledTask{ Interval = 1, TypeName = typeof(DownloadedEpisodesScanCommand).FullName}, new ScheduledTask{ Interval = 60, TypeName = typeof(ApplicationUpdateCommand).FullName}, diff --git a/src/NzbDrone.Core/NzbDrone.Core.csproj b/src/NzbDrone.Core/NzbDrone.Core.csproj index 93787fd08..14c94c1e0 100644 --- a/src/NzbDrone.Core/NzbDrone.Core.csproj +++ b/src/NzbDrone.Core/NzbDrone.Core.csproj @@ -139,7 +139,6 @@ -