From 2e9cf66b57fe9e20d003ca90f9b61aef29a54cb1 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Thu, 12 Jul 2012 14:48:09 -0700 Subject: [PATCH] Tweaks to XML and thumbs #ND-21 --- .../Metadata/Xbmc_ForSeries_Fixture.cs | 37 +++++++++++++++++++ NzbDrone.Core/CentralDispatch.cs | 15 +++++++- NzbDrone.Core/Providers/Metadata/Xbmc.cs | 27 ++++++++++---- 3 files changed, 70 insertions(+), 9 deletions(-) diff --git a/NzbDrone.Core.Test/ProviderTests/Metadata/Xbmc_ForSeries_Fixture.cs b/NzbDrone.Core.Test/ProviderTests/Metadata/Xbmc_ForSeries_Fixture.cs index 5df294d65..30ac38dd6 100644 --- a/NzbDrone.Core.Test/ProviderTests/Metadata/Xbmc_ForSeries_Fixture.cs +++ b/NzbDrone.Core.Test/ProviderTests/Metadata/Xbmc_ForSeries_Fixture.cs @@ -75,6 +75,34 @@ namespace NzbDrone.Core.Test.ProviderTests.Metadata Mocker.GetMock().SetupGet(s => s.MetadataUseBanners).Returns(true); } + private void WithSpecials() + { + var seasonBanners = Builder + .CreateListOfSize(2) + .All() + .With(b => b.Season = 0) + .TheFirst(1) + .With(b => b.BannerType = TvdbSeasonBanner.Type.season) + .With(b => b.BannerPath = "seasons/79488-0-1.jpg") + .TheLast(1) + .With(b => b.BannerType = TvdbSeasonBanner.Type.seasonwide) + .With(b => b.BannerPath = "banners/seasons/79488-0-1.jpg") + .Build(); + + var seriesActors = Builder + .CreateListOfSize(5) + .Build(); + + tvdbSeries = Builder + .CreateNew() + .With(s => s.Id = 79488) + .With(s => s.SeriesName = "30 Rock") + .With(s => s.TvdbActors = seriesActors.ToList()) + .Build(); + + tvdbSeries.Banners.AddRange(seasonBanners); + } + [Test] public void should_not_blowup() { @@ -124,5 +152,14 @@ namespace NzbDrone.Core.Test.ProviderTests.Metadata Mocker.Resolve().CreateForSeries(series, tvdbSeries); Mocker.GetMock().Verify(v => v.Download(It.Is(s => s.Contains("banners")), It.IsRegex(@"season\d{2}\.tbn")), Times.Exactly(2)); } + + [Test] + public void should_download_special_thumb_with_proper_name() + { + WithUseBanners(); + WithSpecials(); + Mocker.Resolve().CreateForSeries(series, tvdbSeries); + Mocker.GetMock().Verify(v => v.Download(It.Is(s => s.Contains("banners")), It.IsRegex(@"season-specials.tbn")), Times.Exactly(1)); + } } } \ No newline at end of file diff --git a/NzbDrone.Core/CentralDispatch.cs b/NzbDrone.Core/CentralDispatch.cs index d7223b3b9..25d9fb1c5 100644 --- a/NzbDrone.Core/CentralDispatch.cs +++ b/NzbDrone.Core/CentralDispatch.cs @@ -13,6 +13,7 @@ using NzbDrone.Core.Providers; using NzbDrone.Core.Providers.Core; using NzbDrone.Core.Providers.ExternalNotification; using NzbDrone.Core.Providers.Indexer; +using NzbDrone.Core.Providers.Metadata; using NzbDrone.Core.Repository; using PetaPoco; using SignalR; @@ -20,6 +21,7 @@ using SignalR.Hosting.AspNet; using SignalR.Infrastructure; using SignalR.Ninject; using Connection = NzbDrone.Core.Datastore.Connection; +using Xbmc = NzbDrone.Core.Providers.ExternalNotification.Xbmc; namespace NzbDrone.Core { @@ -45,8 +47,9 @@ namespace NzbDrone.Core InitQuality(); InitExternalNotifications(); + InitMetadataProviders(); InitIndexers(); - InitJobs(); + InitJobs(); } private void InitDatabase() @@ -160,6 +163,16 @@ namespace NzbDrone.Core Kernel.Get().InitializeNotifiers(notifiers.ToList()); } + private void InitMetadataProviders() + { + logger.Debug("Initializing Metadata Providers..."); + + Kernel.Bind().To().InSingletonScope(); + + var providers = Kernel.GetAll(); + Kernel.Get().Initialize(providers.ToList()); + } + public void DedicateToHost() { try diff --git a/NzbDrone.Core/Providers/Metadata/Xbmc.cs b/NzbDrone.Core/Providers/Metadata/Xbmc.cs index e81092e61..6f4a5587a 100644 --- a/NzbDrone.Core/Providers/Metadata/Xbmc.cs +++ b/NzbDrone.Core/Providers/Metadata/Xbmc.cs @@ -36,7 +36,7 @@ namespace NzbDrone.Core.Providers.Metadata _logger.Debug("Generating tvshow.nfo for: {0}", series.Title); var sb = new StringBuilder(); var xws = new XmlWriterSettings(); - xws.OmitXmlDeclaration = false; + xws.OmitXmlDeclaration = true; xws.Indent = false; using (var xw = XmlWriter.Create(sb, xws)) @@ -63,11 +63,11 @@ namespace NzbDrone.Core.Providers.Metadata var doc = new XDocument(tvShow); doc.Save(xw); + + _logger.Debug("Saving tvshow.nfo for {0}", series.Title); + _diskProvider.WriteAllText(Path.Combine(series.Path, "tvshow.nfo"), doc.ToString()); } - _logger.Debug("Saving tvshow.nfo for {0}", series.Title); - _diskProvider.WriteAllText(Path.Combine(series.Path, "tvshow.nfo"), sb.ToString()); - _logger.Debug("Downloading fanart for: {0}", series.Title); _bannerProvider.Download(tvDbSeries.FanartPath, Path.Combine(series.Path, "fanart.jpg")); @@ -122,7 +122,7 @@ namespace NzbDrone.Core.Providers.Metadata { var sb = new StringBuilder(); var xws = new XmlWriterSettings(); - xws.OmitXmlDeclaration = false; + xws.OmitXmlDeclaration = true; xws.Indent = false; using (var xw = XmlWriter.Create(sb, xws)) @@ -182,8 +182,9 @@ namespace NzbDrone.Core.Providers.Metadata doc.Add(details); doc.Save(xw); - } - xmlResult += sb.ToString(); + + xmlResult += doc.ToString(); + } } var filename = episodeFile.Path.Replace(Path.GetExtension(episodeFile.Path), ".nfo"); _logger.Debug("Saving episodedetails to: {0}", filename); @@ -229,8 +230,18 @@ namespace NzbDrone.Core.Providers.Metadata { var banner = tvDbSeries.SeasonBanners.FirstOrDefault(b => b.BannerType == bannerType && b.Season == season); _logger.Debug("Downloading banner for Season: {0} Series: {1}", season, series.Title); - _bannerProvider.Download(banner.BannerPath, + + if (season == 0) + { + _bannerProvider.Download(banner.BannerPath, + Path.Combine(series.Path, "season-specials.tbn")); + } + + else + { + _bannerProvider.Download(banner.BannerPath, Path.Combine(series.Path, String.Format("season{0:00}.tbn", season))); + } } } }