reset existing xem info during update

pull/3113/head
kayone 11 years ago
parent b43c4e04f8
commit 575dc03e35

@ -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<T> function, TimeSpan? lifeTime = null)
{
Ensure.That(key, () => key).IsNotNullOrWhiteSpace();

@ -6,6 +6,8 @@ namespace NzbDrone.Common.Cache
public interface ICached
{
void Clear();
void Remove(string key);
int Count { get; }
}
public interface ICached<T> : ICached
@ -13,7 +15,6 @@ namespace NzbDrone.Common.Cache
void Set(string key, T value, TimeSpan? lifetime = null);
T Get(string key, Func<T> function, TimeSpan? lifeTime = null);
T Find(string key);
void Remove(string key);
ICollection<T> Values { get; }
}

@ -1,9 +0,0 @@
using NzbDrone.Core.Messaging.Commands;
namespace NzbDrone.Core.DataAugmentation.Xem
{
public class UpdateXemMappingsCommand : Command
{
}
}

@ -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<UpdateXemMappingsCommand>, IHandle<SeriesUpdatedEvent>, IHandleAsync<ApplicationStartedEvent>
public class XemService : IHandle<SeriesUpdatedEvent>
{
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)
if (_cache.Count == 0)
{
GetXemSeriesIds();
RefreshCache();
}
private void UpdateMappings()
{
_logger.Trace("Starting scene numbering update");
try
if (!_cache.Find(message.Series.TvdbId.ToString()))
{
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");
}
catch (Exception ex)
{
_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<Episode>();
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<int> 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;
}
}
}

@ -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},

@ -139,7 +139,6 @@
<Compile Include="DataAugmentation\Xem\Model\XemResult.cs" />
<Compile Include="DataAugmentation\Xem\Model\XemSceneTvdbMapping.cs" />
<Compile Include="DataAugmentation\Xem\Model\XemValues.cs" />
<Compile Include="DataAugmentation\Xem\UpdateXemMappingsCommand.cs" />
<Compile Include="DataAugmentation\Xem\XemProxy.cs" />
<Compile Include="DataAugmentation\Xem\XemService.cs" />
<Compile Include="Datastore\ConnectionStringFactory.cs" />

Loading…
Cancel
Save