Added job for updating XEM mappings

XEM mappings will also be updated when a new series is imported
pull/4/head
Mark McDowall 12 years ago
parent 7b5d57d224
commit 5cd9438939

@ -137,6 +137,7 @@ namespace NzbDrone.Core
Kernel.Bind<IJob>().To<RefreshEpisodeMetadata>().InSingletonScope(); Kernel.Bind<IJob>().To<RefreshEpisodeMetadata>().InSingletonScope();
Kernel.Bind<IJob>().To<CleanupRecycleBinJob>().InSingletonScope(); Kernel.Bind<IJob>().To<CleanupRecycleBinJob>().InSingletonScope();
Kernel.Bind<IJob>().To<EmptyRecycleBinJob>().InSingletonScope(); Kernel.Bind<IJob>().To<EmptyRecycleBinJob>().InSingletonScope();
Kernel.Bind<IJob>().To<XemUpdateJob>().InSingletonScope();
Kernel.Get<JobProvider>().Initialize(); Kernel.Get<JobProvider>().Initialize();
Kernel.Get<WebTimer>().StartTimer(30); Kernel.Get<WebTimer>().StartTimer(30);

@ -22,6 +22,7 @@ namespace NzbDrone.Core.Jobs
private readonly DiskScanJob _diskScanJob; private readonly DiskScanJob _diskScanJob;
private readonly BannerDownloadJob _bannerDownloadJob; private readonly BannerDownloadJob _bannerDownloadJob;
private readonly SeasonProvider _seasonProvider; private readonly SeasonProvider _seasonProvider;
private readonly XemUpdateJob _xemUpdateJob;
private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
@ -30,7 +31,8 @@ namespace NzbDrone.Core.Jobs
[Inject] [Inject]
public ImportNewSeriesJob(SeriesProvider seriesProvider, EpisodeProvider episodeProvider, public ImportNewSeriesJob(SeriesProvider seriesProvider, EpisodeProvider episodeProvider,
MediaFileProvider mediaFileProvider, UpdateInfoJob updateInfoJob, MediaFileProvider mediaFileProvider, UpdateInfoJob updateInfoJob,
DiskScanJob diskScanJob, BannerDownloadJob bannerDownloadJob,SeasonProvider seasonProvider) DiskScanJob diskScanJob, BannerDownloadJob bannerDownloadJob,
SeasonProvider seasonProvider, XemUpdateJob xemUpdateJob)
{ {
_seriesProvider = seriesProvider; _seriesProvider = seriesProvider;
_episodeProvider = episodeProvider; _episodeProvider = episodeProvider;
@ -39,6 +41,7 @@ namespace NzbDrone.Core.Jobs
_diskScanJob = diskScanJob; _diskScanJob = diskScanJob;
_bannerDownloadJob = bannerDownloadJob; _bannerDownloadJob = bannerDownloadJob;
_seasonProvider = seasonProvider; _seasonProvider = seasonProvider;
_xemUpdateJob = xemUpdateJob;
} }
public string Name public string Name
@ -81,6 +84,9 @@ namespace NzbDrone.Core.Jobs
//Download the banner for the new series //Download the banner for the new series
_bannerDownloadJob.Start(notification, updatedSeries.SeriesId, 0); _bannerDownloadJob.Start(notification, updatedSeries.SeriesId, 0);
//Get Scene Numbering if applicable
_xemUpdateJob.Start(notification, updatedSeries.SeriesId, 0);
notification.CurrentMessage = String.Format("{0} was successfully imported", updatedSeries.Title); notification.CurrentMessage = String.Format("{0} was successfully imported", updatedSeries.Title);
} }

@ -0,0 +1,52 @@
using System;
using System.Collections.Generic;
using System.Linq;
using NLog;
using Ninject;
using NzbDrone.Core.Helpers;
using NzbDrone.Core.Model.Notification;
using NzbDrone.Core.Providers;
using NzbDrone.Core.Repository;
namespace NzbDrone.Core.Jobs
{
public class XemUpdateJob : IJob
{
private readonly XemProvider _xemProvider;
private static readonly Logger _logger = LogManager.GetCurrentClassLogger();
[Inject]
public XemUpdateJob(XemProvider xemProvider)
{
_xemProvider = xemProvider;
}
public XemUpdateJob()
{
}
public string Name
{
get { return "XEM Update"; }
}
public TimeSpan DefaultInterval
{
get { return TimeSpan.FromHours(12); }
}
public virtual void Start(ProgressNotification notification, int targetId, int secondaryTargetId)
{
if (targetId == 0)
{
_logger.Trace("Starting XEM Update for all series");
_xemProvider.UpdateMappings();
}
_logger.Trace("Starting XEM Update for series: {0}", targetId);
_xemProvider.UpdateMappings(targetId);
_logger.Trace("XEM Update complete");
}
}
}

@ -40,46 +40,64 @@ namespace NzbDrone.Core.Providers
foreach(var ser in wantedSeries) foreach(var ser in wantedSeries)
{ {
_logger.Trace("Updating scene numbering mapping for: {0}", ser.Title); PerformUpdate(ser);
}
_logger.Trace("Completed scene numbering update");
}
catch(Exception ex)
{
_logger.WarnException("Error updating Scene Mappings", ex);
throw;
}
}
public virtual void UpdateMappings(int seriesId)
{
var series = _seriesProvider.GetSeries(seriesId);
if (series == null)
{
_logger.Trace("Series could not be found: {0}", seriesId);
return;
}
PerformUpdate(series);
}
public virtual void PerformUpdate(Series series)
{
_logger.Trace("Updating scene numbering mapping for: {0}", series.Title);
try try
{ {
var episodesToUpdate = new List<Episode>(); var episodesToUpdate = new List<Episode>();
var mappings = _xemCommunicationProvider.GetSceneTvdbMappings(ser.SeriesId); var mappings = _xemCommunicationProvider.GetSceneTvdbMappings(series.SeriesId);
if (mappings == null) if (mappings == null)
{ {
_logger.Trace("Mappings for: {0} are null, skipping", ser.Title); _logger.Trace("Mappings for: {0} are null, skipping", series.Title);
continue; return;
} }
foreach(var mapping in mappings) foreach (var mapping in mappings)
{ {
_logger.Trace("Setting scene numbering mappings for {0} S{1:00}E{2:00}", ser.Title, mapping.Tvdb.Season, mapping.Tvdb.Episode); _logger.Trace("Setting scene numbering mappings for {0} S{1:00}E{2:00}", series.Title, mapping.Tvdb.Season, mapping.Tvdb.Episode);
var episode = _episodeProvider.GetEpisode(ser.SeriesId, mapping.Tvdb.Season, mapping.Tvdb.Episode); var episode = _episodeProvider.GetEpisode(series.SeriesId, mapping.Tvdb.Season, mapping.Tvdb.Episode);
episode.AbsoluteEpisodeNumber = mapping.Scene.Absolute; episode.AbsoluteEpisodeNumber = mapping.Scene.Absolute;
episode.SceneSeasonNumber = mapping.Scene.Season; episode.SceneSeasonNumber = mapping.Scene.Season;
episode.SceneEpisodeNumber = mapping.Scene.Episode; episode.SceneEpisodeNumber = mapping.Scene.Episode;
episodesToUpdate.Add(episode); episodesToUpdate.Add(episode);
} }
_logger.Trace("Committing scene numbering mappings to database for: {0}", ser.Title); _logger.Trace("Committing scene numbering mappings to database for: {0}", series.Title);
_episodeProvider.UpdateEpisodes(episodesToUpdate); _episodeProvider.UpdateEpisodes(episodesToUpdate);
} }
catch(Exception ex) catch (Exception ex)
{ {
_logger.WarnException("Error updating scene numbering mappings for: " + ser, ex); _logger.WarnException("Error updating scene numbering mappings for: " + series, ex);
}
}
_logger.Trace("Completed scene numbering update");
}
catch(Exception ex)
{
_logger.WarnException("Error updating Scene Mappings", ex);
throw;
} }
} }
} }

Loading…
Cancel
Save