using System.Collections.Generic; using System.Linq; using System; using NLog; using NzbDrone.Core.Datastore; using NzbDrone.Core.MediaFiles; using NzbDrone.Core.Tv; using NzbDrone.Core.Model.Notification; using NzbDrone.Core.Providers; using NzbDrone.Core.Repository; namespace NzbDrone.Core.Jobs { public class RefreshEpisodeMetadata : IJob { private readonly IMediaFileService _mediaFileService; private readonly ISeriesService _seriesService; private readonly ISeriesRepository _seriesRepository; private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); public RefreshEpisodeMetadata(IMediaFileService mediaFileService, ISeriesService seriesService, ISeriesRepository seriesRepository) { _mediaFileService = mediaFileService; _seriesService = seriesService; _seriesRepository = seriesRepository; } public string Name { get { return "Refresh Episode Metadata"; } } public TimeSpan DefaultInterval { get { return TimeSpan.FromTicks(0); } } public void Start(ProgressNotification notification, dynamic options) { List seriesToRefresh; if (options == null || options.SeriesId <= 0) seriesToRefresh = _seriesRepository.All().ToList(); else seriesToRefresh = new List { _seriesRepository.Get(options.SeriesId) }; foreach(var series in seriesToRefresh) { RefreshMetadata(notification, series); } } private void RefreshMetadata(ProgressNotification notification, Series series) { notification.CurrentMessage = String.Format("Refreshing episode metadata for '{0}'", series.Title); Logger.Debug("Getting episodes from database for series: {0}", series.Id); var episodeFiles = _mediaFileService.GetFilesBySeries(series.Id); if (episodeFiles == null || episodeFiles.Count == 0) { Logger.Warn("No episodes in database found for series: {0}", series.Id); return; } notification.CurrentMessage = String.Format("Epsiode metadata refresh completed for {0}", series.Title); } } }