automatically download banner,poster, fanart. without a job :D
This commit is contained in:
@@ -1,81 +0,0 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using NLog;
|
||||
using NzbDrone.Common;
|
||||
using NzbDrone.Core.Tv;
|
||||
using NzbDrone.Core.Model.Notification;
|
||||
using NzbDrone.Core.Providers;
|
||||
using NzbDrone.Core.Providers.Core;
|
||||
using NzbDrone.Core.Repository;
|
||||
|
||||
namespace NzbDrone.Core.Jobs
|
||||
{
|
||||
public class BannerDownloadJob : IJob
|
||||
{
|
||||
private readonly ISeriesService _seriesService;
|
||||
private readonly BannerProvider _bannerProvider;
|
||||
private readonly ISeriesRepository _seriesRepository;
|
||||
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
|
||||
|
||||
private const string BANNER_URL_PREFIX = "http://www.thetvdb.com/banners/";
|
||||
|
||||
public BannerDownloadJob(ISeriesService seriesService, BannerProvider bannerProvider, ISeriesRepository seriesRepository)
|
||||
{
|
||||
_seriesService = seriesService;
|
||||
_bannerProvider = bannerProvider;
|
||||
_seriesRepository = seriesRepository;
|
||||
}
|
||||
|
||||
public BannerDownloadJob()
|
||||
{
|
||||
}
|
||||
|
||||
public string Name
|
||||
{
|
||||
get { return "Banner Download"; }
|
||||
}
|
||||
|
||||
public TimeSpan DefaultInterval
|
||||
{
|
||||
get { return TimeSpan.FromDays(30); }
|
||||
}
|
||||
|
||||
public virtual void Start(ProgressNotification notification, dynamic options)
|
||||
{
|
||||
Logger.Debug("Starting banner download job");
|
||||
|
||||
if (options != null)
|
||||
{
|
||||
Series series = _seriesRepository.Get((int)options.SeriesId);
|
||||
|
||||
if (series != null && !String.IsNullOrEmpty(series.BannerUrl))
|
||||
{
|
||||
DownloadBanner(notification, series);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
var seriesInDb = _seriesRepository.All();
|
||||
|
||||
foreach (var series in seriesInDb.Where(s => !String.IsNullOrEmpty(s.BannerUrl)))
|
||||
{
|
||||
DownloadBanner(notification, series);
|
||||
}
|
||||
|
||||
Logger.Debug("Finished banner download job");
|
||||
}
|
||||
|
||||
public virtual void DownloadBanner(ProgressNotification notification, Series series)
|
||||
{
|
||||
notification.CurrentMessage = string.Format("Downloading banner for '{0}'", series.Title);
|
||||
|
||||
if (_bannerProvider.Download(series))
|
||||
notification.CurrentMessage = string.Format("Successfully download banner for '{0}'", series.Title);
|
||||
|
||||
else
|
||||
notification.CurrentMessage = string.Format("Failed to download banner for '{0}'", series.Title);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -64,7 +64,7 @@ namespace NzbDrone.Core.Jobs
|
||||
return;
|
||||
}
|
||||
|
||||
if (episode.Series.SeriesType == SeriesType.Daily)
|
||||
if (episode.Series.SeriesTypes == SeriesTypes.Daily)
|
||||
{
|
||||
if (!episode.AirDate.HasValue)
|
||||
{
|
||||
|
||||
@@ -22,7 +22,6 @@ namespace NzbDrone.Core.Jobs
|
||||
private readonly IMediaFileService _mediaFileService;
|
||||
private readonly UpdateInfoJob _updateInfoJob;
|
||||
private readonly DiskScanJob _diskScanJob;
|
||||
private readonly BannerDownloadJob _bannerDownloadJob;
|
||||
private readonly ISeasonRepository _seasonRepository;
|
||||
private readonly XemUpdateJob _xemUpdateJob;
|
||||
private readonly ISeriesRepository _seriesRepository;
|
||||
@@ -34,15 +33,14 @@ namespace NzbDrone.Core.Jobs
|
||||
|
||||
public ImportNewSeriesJob(ISeriesService seriesService, IEpisodeService episodeService,
|
||||
IMediaFileService mediaFileService, UpdateInfoJob updateInfoJob,
|
||||
DiskScanJob diskScanJob, BannerDownloadJob bannerDownloadJob,
|
||||
ISeasonRepository seasonRepository, XemUpdateJob xemUpdateJob, ISeriesRepository seriesRepository,ISeasonService seasonService)
|
||||
DiskScanJob diskScanJob,
|
||||
ISeasonRepository seasonRepository, XemUpdateJob xemUpdateJob, ISeriesRepository seriesRepository, ISeasonService seasonService)
|
||||
{
|
||||
_seriesService = seriesService;
|
||||
_episodeService = episodeService;
|
||||
_mediaFileService = mediaFileService;
|
||||
_updateInfoJob = updateInfoJob;
|
||||
_diskScanJob = diskScanJob;
|
||||
_bannerDownloadJob = bannerDownloadJob;
|
||||
_seasonRepository = seasonRepository;
|
||||
_xemUpdateJob = xemUpdateJob;
|
||||
_seriesRepository = seriesRepository;
|
||||
@@ -86,9 +84,6 @@ namespace NzbDrone.Core.Jobs
|
||||
var updatedSeries = _seriesRepository.Get(((ModelBase)currentSeries).Id);
|
||||
AutoIgnoreSeasons(((ModelBase)updatedSeries).Id);
|
||||
|
||||
//Download the banner for the new series
|
||||
_bannerDownloadJob.Start(notification, new { SeriesId = ((ModelBase)updatedSeries).Id });
|
||||
|
||||
//Get Scene Numbering if applicable
|
||||
_xemUpdateJob.Start(notification, new { SeriesId = ((ModelBase)updatedSeries).Id });
|
||||
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
using System.Linq;
|
||||
|
||||
namespace NzbDrone.Core.MediaCover
|
||||
{
|
||||
|
||||
public enum MediaCoverTypes
|
||||
{
|
||||
Poster = 0,
|
||||
Banner = 1,
|
||||
Fanart = 2
|
||||
}
|
||||
|
||||
public class MediaCover
|
||||
{
|
||||
public MediaCoverTypes CoverType { get; set; }
|
||||
public string Url { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,68 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using NLog;
|
||||
using NzbDrone.Common;
|
||||
using NzbDrone.Common.Eventing;
|
||||
using NzbDrone.Core.Tv;
|
||||
using NzbDrone.Core.Tv.Events;
|
||||
|
||||
namespace NzbDrone.Core.MediaCover
|
||||
{
|
||||
public class MediaCoverService : IHandle<SeriesUpdatedEvent>
|
||||
{
|
||||
private readonly HttpProvider _httpProvider;
|
||||
private readonly DiskProvider _diskProvider;
|
||||
private readonly Logger _logger;
|
||||
|
||||
private readonly string _coverRootFolder;
|
||||
|
||||
private const string COVER_URL_PREFIX = "http://www.thetvdb.com/banners/";
|
||||
|
||||
public MediaCoverService(HttpProvider httpProvider, DiskProvider diskProvider, EnvironmentProvider environmentProvider, Logger logger)
|
||||
{
|
||||
_httpProvider = httpProvider;
|
||||
_diskProvider = diskProvider;
|
||||
_logger = logger;
|
||||
|
||||
_coverRootFolder = environmentProvider.GetMediaCoverPath();
|
||||
}
|
||||
|
||||
public void Handle(SeriesUpdatedEvent message)
|
||||
{
|
||||
EnsureCovers(message.Series);
|
||||
}
|
||||
|
||||
private void EnsureCovers(Series series)
|
||||
{
|
||||
foreach (var cover in series.Covers)
|
||||
{
|
||||
var fileName = GetCoverPath(series.Id, cover.CoverType);
|
||||
if (!_diskProvider.FileExists(fileName))
|
||||
{
|
||||
DownloadCover(series, cover);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void DownloadCover(Series series, MediaCover cover)
|
||||
{
|
||||
try
|
||||
{
|
||||
var fileName = GetCoverPath(series.Id, cover.CoverType);
|
||||
|
||||
_logger.Info("Downloading {0} for {1}", cover.CoverType, series.Title);
|
||||
_httpProvider.DownloadFile(COVER_URL_PREFIX + cover.Url, fileName);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
_logger.ErrorException("Couldn't download media cover for " + series.TvDbId, e);
|
||||
}
|
||||
}
|
||||
|
||||
private string GetCoverPath(int seriesId, MediaCoverTypes coverTypes)
|
||||
{
|
||||
return Path.Combine(_coverRootFolder, seriesId.ToString("0000"), coverTypes.ToString().ToLower() + ".jpg");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -132,7 +132,7 @@ namespace NzbDrone.Core.MediaFiles
|
||||
result += series.Title + separatorStyle.Pattern;
|
||||
}
|
||||
|
||||
if (series.SeriesType == SeriesType.Standard)
|
||||
if (series.SeriesTypes == SeriesTypes.Standard)
|
||||
{
|
||||
result += numberStyle.Pattern.Replace("%0e",
|
||||
String.Format("{0:00}", sortedEpisodes.First().EpisodeNumber));
|
||||
|
||||
+23
-6
@@ -3,12 +3,13 @@ using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text.RegularExpressions;
|
||||
using NLog;
|
||||
using NzbDrone.Core.MediaCover;
|
||||
using NzbDrone.Core.Tv;
|
||||
using NzbDrone.Common;
|
||||
|
||||
namespace NzbDrone.Core.Providers
|
||||
namespace NzbDrone.Core.MetadataSource
|
||||
{
|
||||
public class TvDbProvider
|
||||
public class TvDbProxy
|
||||
{
|
||||
public const string TVDB_APIKEY = "5D2D188E86E07F4F";
|
||||
private static readonly Logger logger = LogManager.GetCurrentClassLogger();
|
||||
@@ -18,7 +19,7 @@ namespace NzbDrone.Core.Providers
|
||||
private readonly Tvdb.Tvdb _handlerV2;
|
||||
|
||||
|
||||
public TvDbProvider()
|
||||
public TvDbProxy()
|
||||
{
|
||||
_handlerV2 = new Tvdb.Tvdb(TVDB_APIKEY);
|
||||
}
|
||||
@@ -58,13 +59,29 @@ namespace NzbDrone.Core.Providers
|
||||
series.Language = tvDbSeries.Language ?? string.Empty;
|
||||
series.CleanTitle = Parser.NormalizeTitle(tvDbSeries.SeriesName);
|
||||
series.LastInfoSync = DateTime.Now;
|
||||
|
||||
|
||||
if (tvDbSeries.Runtime.HasValue)
|
||||
{
|
||||
series.Runtime = Convert.ToInt32(tvDbSeries.Runtime);
|
||||
}
|
||||
|
||||
series.BannerUrl = tvDbSeries.banner;
|
||||
|
||||
series.Covers = new List<MediaCover.MediaCover>();
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(tvDbSeries.banner))
|
||||
{
|
||||
series.Covers.Add(new MediaCover.MediaCover { CoverType = MediaCoverTypes.Banner, Url = tvDbSeries.banner });
|
||||
}
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(tvDbSeries.fanart))
|
||||
{
|
||||
series.Covers.Add(new MediaCover.MediaCover { CoverType = MediaCoverTypes.Fanart, Url = tvDbSeries.fanart });
|
||||
}
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(tvDbSeries.poster))
|
||||
{
|
||||
series.Covers.Add(new MediaCover.MediaCover { CoverType = MediaCoverTypes.Poster, Url = tvDbSeries.poster });
|
||||
}
|
||||
|
||||
series.Network = tvDbSeries.Network;
|
||||
|
||||
if (tvDbSeries.FirstAired.HasValue && tvDbSeries.FirstAired.Value.Year > 1900)
|
||||
+7
-9
@@ -1,29 +1,27 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using NLog;
|
||||
using NzbDrone.Core.Datastore;
|
||||
using NzbDrone.Core.Providers;
|
||||
using NzbDrone.Core.ReferenceData;
|
||||
using NzbDrone.Core.Tv;
|
||||
using NzbDrone.Core.Model.TvRage;
|
||||
using NzbDrone.Core.Repository;
|
||||
|
||||
namespace NzbDrone.Core.Providers
|
||||
namespace NzbDrone.Core.MetadataSource
|
||||
{
|
||||
public class TvRageMappingProvider
|
||||
{
|
||||
private readonly SceneMappingService _sceneMappingService;
|
||||
private readonly TvRageProvider _tvRageProvider;
|
||||
private readonly TvRageProxy _tvRageProxy;
|
||||
private readonly IEpisodeService _episodeService;
|
||||
|
||||
private static readonly Logger logger = LogManager.GetCurrentClassLogger();
|
||||
|
||||
public TvRageMappingProvider(SceneMappingService sceneMappingService,
|
||||
TvRageProvider tvRageProvider, IEpisodeService episodeService)
|
||||
TvRageProxy tvRageProxy, IEpisodeService episodeService)
|
||||
{
|
||||
_sceneMappingService = sceneMappingService;
|
||||
_tvRageProvider = tvRageProvider;
|
||||
_tvRageProxy = tvRageProxy;
|
||||
_episodeService = episodeService;
|
||||
}
|
||||
|
||||
@@ -36,7 +34,7 @@ namespace NzbDrone.Core.Providers
|
||||
var firstEpisode = _episodeService.GetEpisode(series.Id, 1, 1);
|
||||
|
||||
var cleanName = _sceneMappingService.GetCleanName(series.Id);
|
||||
var results = _tvRageProvider.SearchSeries(series.Title);
|
||||
var results = _tvRageProxy.SearchSeries(series.Title);
|
||||
var result = ProcessResults(results, series, cleanName, firstEpisode);
|
||||
|
||||
if (result != null)
|
||||
@@ -44,7 +42,7 @@ namespace NzbDrone.Core.Providers
|
||||
logger.Trace("TV Rage: {0} matches TVDB: {1}", result.Name, series.Title);
|
||||
series.TvRageId = result.ShowId;
|
||||
series.TvRageTitle = result.Name;
|
||||
series.UtcOffset = _tvRageProvider.GetSeries(result.ShowId).UtcOffset;
|
||||
series.UtcOffset = _tvRageProxy.GetSeries(result.ShowId).UtcOffset;
|
||||
}
|
||||
|
||||
return series;
|
||||
+4
-5
@@ -1,27 +1,26 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Xml.Linq;
|
||||
using NLog;
|
||||
using NzbDrone.Common;
|
||||
using NzbDrone.Core.Helpers;
|
||||
using NzbDrone.Core.Model.TvRage;
|
||||
|
||||
namespace NzbDrone.Core.Providers
|
||||
namespace NzbDrone.Core.MetadataSource
|
||||
{
|
||||
public class TvRageProvider
|
||||
public class TvRageProxy
|
||||
{
|
||||
private readonly HttpProvider _httpProvider;
|
||||
private const string TVRAGE_APIKEY = "NW4v0PSmQIoVmpbASLdD";
|
||||
private static readonly Logger logger = LogManager.GetCurrentClassLogger();
|
||||
|
||||
public TvRageProvider(HttpProvider httpProvider)
|
||||
public TvRageProxy(HttpProvider httpProvider)
|
||||
{
|
||||
_httpProvider = httpProvider;
|
||||
}
|
||||
|
||||
public TvRageProvider()
|
||||
public TvRageProxy()
|
||||
{
|
||||
}
|
||||
|
||||
@@ -91,7 +91,7 @@ namespace NzbDrone.Core.Model
|
||||
return seasonResult;
|
||||
}
|
||||
|
||||
if (Series.SeriesType == SeriesType.Daily)
|
||||
if (Series.SeriesTypes == SeriesTypes.Daily)
|
||||
{
|
||||
var dailyResult = String.Format("{0} - {1:yyyy-MM-dd} - {2} [{3}]", seriesTitle,
|
||||
AirDate, Episodes.First().Title, Quality.Quality);
|
||||
|
||||
@@ -232,6 +232,7 @@
|
||||
<Compile Include="Jobs\RefreshEpsiodeMetadata.cs" />
|
||||
<Compile Include="Jobs\PastWeekBacklogSearchJob.cs" />
|
||||
<Compile Include="Lifecycle\IInitializable.cs" />
|
||||
<Compile Include="MediaCover\MediaCover.cs" />
|
||||
<Compile Include="MediaFiles\MediaFileRepository.cs" />
|
||||
<Compile Include="Model\DownloadClientType.cs" />
|
||||
<Compile Include="Instrumentation\LogService.cs" />
|
||||
@@ -264,6 +265,7 @@
|
||||
<Compile Include="Tv\Events\EpisodeInfoUpdatedEvent.cs" />
|
||||
<Compile Include="Tv\Events\EpisodeInfoAddedEvent.cs" />
|
||||
<Compile Include="Tv\Events\SeriesAddedEvent.cs" />
|
||||
<Compile Include="Tv\Events\SeriesUpdatedEvent.cs" />
|
||||
<Compile Include="Tv\SeasonRepository.cs" />
|
||||
<Compile Include="Tv\SeriesRepository.cs" />
|
||||
<Compile Include="Tv\QualityModel.cs" />
|
||||
@@ -294,7 +296,7 @@
|
||||
<Compile Include="Model\Xem\XemSceneTvdbMapping.cs" />
|
||||
<Compile Include="Model\Xem\XemValues.cs" />
|
||||
<Compile Include="AutofacSignalrDependencyResolver.cs" />
|
||||
<Compile Include="Providers\BannerProvider.cs" />
|
||||
<Compile Include="MediaCover\MediaCoverService.cs" />
|
||||
<Compile Include="DecisionEngine\LanguageSpecification.cs" />
|
||||
<Compile Include="Providers\DownloadClients\NzbgetProvider.cs" />
|
||||
<Compile Include="Providers\MediaInfoProvider.cs" />
|
||||
@@ -321,7 +323,6 @@
|
||||
<Compile Include="Jobs\RenameSeriesJob.cs" />
|
||||
<Compile Include="Lifecycle\AppUpdateJob.cs" />
|
||||
<Compile Include="Jobs\BacklogSearchJob.cs" />
|
||||
<Compile Include="Jobs\BannerDownloadJob.cs" />
|
||||
<Compile Include="Jobs\ConvertEpisodeJob.cs" />
|
||||
<Compile Include="Jobs\SeriesSearchJob.cs" />
|
||||
<Compile Include="Jobs\SeasonSearchJob.cs" />
|
||||
@@ -337,8 +338,8 @@
|
||||
<Compile Include="Jobs\IJob.cs" />
|
||||
<Compile Include="Jobs\RssSyncJob.cs" />
|
||||
<Compile Include="Jobs\UpdateInfoJob.cs" />
|
||||
<Compile Include="Providers\TvRageMappingProvider.cs" />
|
||||
<Compile Include="Providers\TvRageProvider.cs" />
|
||||
<Compile Include="MetadataSource\TvRageMappingProvider.cs" />
|
||||
<Compile Include="MetadataSource\TvRageProxy.cs" />
|
||||
<Compile Include="Providers\XemCommunicationProvider.cs" />
|
||||
<Compile Include="Providers\XemProvider.cs" />
|
||||
<Compile Include="Qualities\Quality.cs" />
|
||||
@@ -504,7 +505,7 @@
|
||||
<Compile Include="Providers\SmtpProvider.cs">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Providers\TvDbProvider.cs">
|
||||
<Compile Include="MetadataSource\TvDbProxy.cs">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Providers\TwitterProvider.cs">
|
||||
|
||||
@@ -1,102 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using NLog;
|
||||
using NzbDrone.Common;
|
||||
using NzbDrone.Core.Datastore;
|
||||
using NzbDrone.Core.Tv;
|
||||
using NzbDrone.Core.Model.Notification;
|
||||
using NzbDrone.Core.Repository;
|
||||
|
||||
namespace NzbDrone.Core.Providers
|
||||
{
|
||||
public class BannerProvider
|
||||
{
|
||||
private readonly HttpProvider _httpProvider;
|
||||
private readonly EnvironmentProvider _environmentProvider;
|
||||
private readonly DiskProvider _diskProvider;
|
||||
private static readonly Logger logger = LogManager.GetCurrentClassLogger();
|
||||
|
||||
private const string BANNER_URL_PREFIX = "http://www.thetvdb.com/banners/";
|
||||
|
||||
public BannerProvider(HttpProvider httpProvider, EnvironmentProvider environmentProvider,
|
||||
DiskProvider diskProvider)
|
||||
{
|
||||
_httpProvider = httpProvider;
|
||||
_environmentProvider = environmentProvider;
|
||||
_diskProvider = diskProvider;
|
||||
}
|
||||
|
||||
public BannerProvider()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public virtual bool Download(Series series)
|
||||
{
|
||||
var bannerPath = _environmentProvider.GetBannerPath();
|
||||
|
||||
logger.Trace("Ensuring Banner Folder exists: ", bannerPath);
|
||||
_diskProvider.CreateDirectory(bannerPath);
|
||||
|
||||
var bannerFilename = Path.Combine(bannerPath, series.Id.ToString()) + ".jpg";
|
||||
|
||||
logger.Trace("Downloading banner for '{0}'", series.Title);
|
||||
|
||||
try
|
||||
{
|
||||
_httpProvider.DownloadFile(BANNER_URL_PREFIX + series.BannerUrl, bannerFilename);
|
||||
logger.Trace("Successfully download banner for '{0}'", series.Title);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
logger.Debug("Failed to download banner for '{0}'", series.Title);
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public virtual bool Delete(int seriesId)
|
||||
{
|
||||
var bannerPath = _environmentProvider.GetBannerPath();
|
||||
var bannerFilename = Path.Combine(bannerPath, seriesId.ToString()) + ".jpg";
|
||||
|
||||
try
|
||||
{
|
||||
logger.Trace("Checking if banner exists: {0}", bannerFilename);
|
||||
|
||||
if (_diskProvider.FileExists(bannerFilename))
|
||||
{
|
||||
logger.Trace("Deleting existing banner: {0}", bannerFilename);
|
||||
_diskProvider.DeleteFile(bannerFilename);
|
||||
}
|
||||
}
|
||||
catch(Exception ex)
|
||||
{
|
||||
logger.WarnException("Failed to delete banner: " + bannerFilename, ex);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public virtual void Download(string remotePath, string filename)
|
||||
{
|
||||
var url = BANNER_URL_PREFIX + remotePath;
|
||||
|
||||
try
|
||||
{
|
||||
_httpProvider.DownloadFile(url, filename);
|
||||
logger.Trace("Successfully download banner from '{0}' to '{1}'", url, filename);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
var message = String.Format("Failed to download Banner from '{0}' to '{1}'", url, filename);
|
||||
logger.DebugException(message, ex);
|
||||
throw;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -117,7 +117,7 @@ namespace NzbDrone.Core.Providers
|
||||
var size = _diskProvider.GetSize(filePath);
|
||||
var runTime = _mediaInfoProvider.GetRunTime(filePath);
|
||||
|
||||
if (series.SeriesType == SeriesType.Daily || parseResult.SeasonNumber > 0)
|
||||
if (series.SeriesTypes == SeriesTypes.Daily || parseResult.SeasonNumber > 0)
|
||||
{
|
||||
if (size < Constants.IgnoreFileSize && runTime < 180)
|
||||
{
|
||||
|
||||
@@ -43,7 +43,7 @@ namespace NzbDrone.Core.Providers.DownloadClients
|
||||
var matchingTitleWithQuality = matchigTitle.Where(q => q.ParseResult.Quality >= newParseResult.Quality);
|
||||
|
||||
|
||||
if (newParseResult.Series.SeriesType == SeriesType.Daily)
|
||||
if (newParseResult.Series.SeriesTypes == SeriesTypes.Daily)
|
||||
{
|
||||
return matchingTitleWithQuality.Any(q => q.ParseResult.AirDate.Value.Date == newParseResult.AirDate.Value.Date);
|
||||
}
|
||||
|
||||
@@ -42,7 +42,7 @@ namespace NzbDrone.Core.Providers.DownloadClients
|
||||
|
||||
var matchingTitleWithQuality = matchigTitle.Where(q => q.ParseResult.Quality >= newParseResult.Quality);
|
||||
|
||||
if (newParseResult.Series.SeriesType == SeriesType.Daily)
|
||||
if (newParseResult.Series.SeriesTypes == SeriesTypes.Daily)
|
||||
{
|
||||
return matchingTitleWithQuality.Any(q => q.ParseResult.AirDate.Value.Date == newParseResult.AirDate.Value.Date);
|
||||
}
|
||||
|
||||
@@ -46,7 +46,7 @@ namespace NzbDrone.Core.Providers
|
||||
return new List<int>();
|
||||
}
|
||||
|
||||
if (series.SeriesType == SeriesType.Daily)
|
||||
if (series.SeriesTypes == SeriesTypes.Daily)
|
||||
{
|
||||
logger.Trace("Daily series detected, skipping season search: {0}", series.Title);
|
||||
return new List<int>();
|
||||
@@ -75,7 +75,7 @@ namespace NzbDrone.Core.Providers
|
||||
return new List<int>();
|
||||
}
|
||||
|
||||
if (series.SeriesType == SeriesType.Daily)
|
||||
if (series.SeriesTypes == SeriesTypes.Daily)
|
||||
{
|
||||
logger.Trace("Daily series detected, skipping season search: {0}", series.Title);
|
||||
return new List<int>();
|
||||
|
||||
@@ -24,7 +24,7 @@ namespace NzbDrone.Core.ReferenceData
|
||||
|
||||
if (series != null)
|
||||
{
|
||||
_seriesService.SetSeriesType(series.Id, SeriesType.Daily);
|
||||
_seriesService.SetSeriesType(series.Id, SeriesTypes.Daily);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -86,7 +86,7 @@ namespace NzbDrone.Core.Tv
|
||||
{
|
||||
string seriesTitle = Series == null ? "[NULL]" : Series.Title;
|
||||
|
||||
if (Series != null && Series.SeriesType == SeriesType.Daily && AirDate.HasValue)
|
||||
if (Series != null && Series.SeriesTypes == SeriesTypes.Daily && AirDate.HasValue)
|
||||
return string.Format("{0} - {1:yyyy-MM-dd}", seriesTitle, AirDate.Value);
|
||||
|
||||
return string.Format("{0} - S{1:00}E{2:00}", seriesTitle, SeasonNumber, EpisodeNumber);
|
||||
|
||||
@@ -5,6 +5,7 @@ using NLog;
|
||||
using NzbDrone.Common.Eventing;
|
||||
using NzbDrone.Core.Datastore;
|
||||
using NzbDrone.Core.Download;
|
||||
using NzbDrone.Core.MetadataSource;
|
||||
using NzbDrone.Core.Model;
|
||||
using NzbDrone.Core.Providers;
|
||||
using NzbDrone.Core.Tv.Events;
|
||||
@@ -39,14 +40,14 @@ namespace NzbDrone.Core.Tv
|
||||
|
||||
private static readonly Logger logger = LogManager.GetCurrentClassLogger();
|
||||
|
||||
private readonly TvDbProvider _tvDbProvider;
|
||||
private readonly TvDbProxy _tvDbProxy;
|
||||
private readonly ISeasonRepository _seasonRepository;
|
||||
private readonly IEpisodeRepository _episodeRepository;
|
||||
private readonly IEventAggregator _eventAggregator;
|
||||
|
||||
public EpisodeService(TvDbProvider tvDbProviderProvider, ISeasonRepository seasonRepository, IEpisodeRepository episodeRepository, IEventAggregator eventAggregator)
|
||||
public EpisodeService(TvDbProxy tvDbProxyProxy, ISeasonRepository seasonRepository, IEpisodeRepository episodeRepository, IEventAggregator eventAggregator)
|
||||
{
|
||||
_tvDbProvider = tvDbProviderProvider;
|
||||
_tvDbProxy = tvDbProxyProxy;
|
||||
_seasonRepository = seasonRepository;
|
||||
_episodeRepository = episodeRepository;
|
||||
_eventAggregator = eventAggregator;
|
||||
@@ -89,7 +90,7 @@ namespace NzbDrone.Core.Tv
|
||||
|
||||
if (parseResult.AirDate.HasValue)
|
||||
{
|
||||
if (parseResult.Series.SeriesType == SeriesType.Standard)
|
||||
if (parseResult.Series.SeriesTypes == SeriesTypes.Standard)
|
||||
{
|
||||
//Todo: Collect this as a Series we want to treat as a daily series, or possible parsing error
|
||||
logger.Warn("Found daily-style episode for non-daily series: {0}. {1}", parseResult.Series.Title, parseResult.OriginalString);
|
||||
@@ -182,7 +183,7 @@ namespace NzbDrone.Core.Tv
|
||||
var successCount = 0;
|
||||
var failCount = 0;
|
||||
|
||||
var tvdbEpisodes = _tvDbProvider.GetEpisodes(series.TvDbId);
|
||||
var tvdbEpisodes = _tvDbProxy.GetEpisodes(series.TvDbId);
|
||||
|
||||
var seriesEpisodes = GetEpisodeBySeries(series.Id);
|
||||
var updateList = new List<Episode>();
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
using System.Linq;
|
||||
using NzbDrone.Common.Eventing;
|
||||
|
||||
namespace NzbDrone.Core.Tv.Events
|
||||
{
|
||||
public class SeriesUpdatedEvent : IEvent
|
||||
{
|
||||
public Series Series { get; private set; }
|
||||
|
||||
public SeriesUpdatedEvent(Series series)
|
||||
{
|
||||
Series = series;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -9,10 +9,10 @@ using Sqo.Attributes;
|
||||
|
||||
namespace NzbDrone.Core.Tv
|
||||
{
|
||||
public enum SeriesType
|
||||
public enum SeriesTypes
|
||||
{
|
||||
Standard =0,
|
||||
Daily =1,
|
||||
Standard = 0,
|
||||
Daily = 1,
|
||||
Anime = 2,
|
||||
}
|
||||
|
||||
@@ -35,8 +35,8 @@ namespace NzbDrone.Core.Tv
|
||||
public DateTime? LastInfoSync { get; set; }
|
||||
public DateTime? LastDiskSync { get; set; }
|
||||
public int Runtime { get; set; }
|
||||
public string BannerUrl { get; set; }
|
||||
public SeriesType SeriesType { get; set; }
|
||||
public List<MediaCover.MediaCover> Covers { get; set; }
|
||||
public SeriesTypes SeriesTypes { get; set; }
|
||||
public BacklogSettingType BacklogSetting { get; set; }
|
||||
public string Network { get; set; }
|
||||
public DateTime? CustomStartDate { get; set; }
|
||||
|
||||
@@ -11,7 +11,7 @@ namespace NzbDrone.Core.Tv
|
||||
List<Series> Search(string title);
|
||||
Series GetByTitle(string cleanTitle);
|
||||
Series FindByTvdbId(int tvdbId);
|
||||
void SetSeriesType(int seriesId, SeriesType seriesType);
|
||||
void SetSeriesType(int seriesId, SeriesTypes seriesTypes);
|
||||
|
||||
}
|
||||
|
||||
@@ -42,9 +42,9 @@ namespace NzbDrone.Core.Tv
|
||||
return Queryable.SingleOrDefault(s => s.TvDbId == tvdbId);
|
||||
}
|
||||
|
||||
public void SetSeriesType(int seriesId, SeriesType seriesType)
|
||||
public void SetSeriesType(int seriesId, SeriesTypes seriesTypes)
|
||||
{
|
||||
ObjectDatabase.UpdateField(new Series(){Id = seriesId, SeriesType =seriesType }, "SeriesType");
|
||||
ObjectDatabase.UpdateField(new Series(){Id = seriesId, SeriesTypes =seriesTypes }, "SeriesType");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -6,6 +6,7 @@ using NzbDrone.Common.EnsureThat;
|
||||
using NzbDrone.Common.Eventing;
|
||||
using NzbDrone.Core.Configuration;
|
||||
using NzbDrone.Core.Datastore;
|
||||
using NzbDrone.Core.MetadataSource;
|
||||
using NzbDrone.Core.Model;
|
||||
using NzbDrone.Core.Providers;
|
||||
using NzbDrone.Core.Qualities;
|
||||
@@ -22,14 +23,14 @@ namespace NzbDrone.Core.Tv
|
||||
void AddSeries(string title, string path, int tvDbSeriesId, int qualityProfileId, DateTime? airedAfter);
|
||||
void UpdateFromSeriesEditor(IList<Series> editedSeries);
|
||||
Series FindByTvdbId(int tvdbId);
|
||||
void SetSeriesType(int seriesId, SeriesType seriesType);
|
||||
void SetSeriesType(int seriesId, SeriesTypes seriesTypes);
|
||||
}
|
||||
|
||||
public class SeriesService : ISeriesService
|
||||
{
|
||||
private readonly ISeriesRepository _seriesRepository;
|
||||
private readonly IConfigService _configService;
|
||||
private readonly TvDbProvider _tvDbProvider;
|
||||
private readonly TvDbProxy _tvDbProxy;
|
||||
private readonly TvRageMappingProvider _tvRageMappingProvider;
|
||||
private readonly IEventAggregator _eventAggregator;
|
||||
private readonly IQualityProfileService _qualityProfileService;
|
||||
@@ -39,12 +40,12 @@ namespace NzbDrone.Core.Tv
|
||||
private readonly SceneMappingService _sceneNameMappingService;
|
||||
|
||||
public SeriesService(ISeriesRepository seriesRepository, IConfigService configServiceService,
|
||||
TvDbProvider tvDbProviderProvider, SceneMappingService sceneNameMappingService,
|
||||
TvDbProxy tvDbProxyProxy, SceneMappingService sceneNameMappingService,
|
||||
TvRageMappingProvider tvRageMappingProvider, IEventAggregator eventAggregator, IQualityProfileService qualityProfileService)
|
||||
{
|
||||
_seriesRepository = seriesRepository;
|
||||
_configService = configServiceService;
|
||||
_tvDbProvider = tvDbProviderProvider;
|
||||
_tvDbProxy = tvDbProxyProxy;
|
||||
_sceneNameMappingService = sceneNameMappingService;
|
||||
_tvRageMappingProvider = tvRageMappingProvider;
|
||||
_eventAggregator = eventAggregator;
|
||||
@@ -61,7 +62,7 @@ namespace NzbDrone.Core.Tv
|
||||
public Series UpdateSeriesInfo(int seriesId)
|
||||
{
|
||||
var series = _seriesRepository.Get(seriesId);
|
||||
var tvDbSeries = _tvDbProvider.GetSeries(series.TvDbId);
|
||||
var tvDbSeries = _tvDbProxy.GetSeries(series.TvDbId);
|
||||
|
||||
series.Title = tvDbSeries.Title;
|
||||
series.AirTime = tvDbSeries.AirTime;
|
||||
@@ -71,7 +72,7 @@ namespace NzbDrone.Core.Tv
|
||||
series.CleanTitle = tvDbSeries.CleanTitle;
|
||||
series.LastInfoSync = DateTime.Now;
|
||||
series.Runtime = tvDbSeries.Runtime;
|
||||
series.BannerUrl = tvDbSeries.BannerUrl;
|
||||
series.Covers = tvDbSeries.Covers;
|
||||
series.Network = tvDbSeries.Network;
|
||||
series.FirstAired = tvDbSeries.FirstAired;
|
||||
|
||||
@@ -88,6 +89,8 @@ namespace NzbDrone.Core.Tv
|
||||
|
||||
_seriesRepository.Update(series);
|
||||
|
||||
_eventAggregator.Publish(new SeriesUpdatedEvent(series));
|
||||
|
||||
return series;
|
||||
}
|
||||
|
||||
@@ -159,9 +162,9 @@ namespace NzbDrone.Core.Tv
|
||||
return _seriesRepository.FindByTvdbId(tvdbId);
|
||||
}
|
||||
|
||||
public void SetSeriesType(int seriesId, SeriesType seriesType)
|
||||
public void SetSeriesType(int seriesId, SeriesTypes seriesTypes)
|
||||
{
|
||||
_seriesRepository.SetSeriesType(seriesId, seriesType);
|
||||
_seriesRepository.SetSeriesType(seriesId, seriesTypes);
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user