diff --git a/Libraries/XemLib/XemLib.dll b/Libraries/XemLib/XemLib.dll new file mode 100644 index 000000000..b32ae3128 Binary files /dev/null and b/Libraries/XemLib/XemLib.dll differ diff --git a/Libraries/XemLib/XemLib.pdb b/Libraries/XemLib/XemLib.pdb new file mode 100644 index 000000000..a71ae0ff8 Binary files /dev/null and b/Libraries/XemLib/XemLib.pdb differ diff --git a/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj b/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj index 42e947a8a..91bf04d2c 100644 --- a/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj +++ b/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj @@ -128,14 +128,13 @@ - - False - ..\Libraries\TvdbLib.dll - False ..\packages\WebActivator.1.5\lib\net40\WebActivator.dll + + ..\Libraries\XemLib\XemLib.dll + diff --git a/NzbDrone.Core.Test/ProviderTests/EpisodeProviderTest.cs b/NzbDrone.Core.Test/ProviderTests/EpisodeProviderTest.cs index 9870924f1..d17aa670a 100644 --- a/NzbDrone.Core.Test/ProviderTests/EpisodeProviderTest.cs +++ b/NzbDrone.Core.Test/ProviderTests/EpisodeProviderTest.cs @@ -17,7 +17,7 @@ using NzbDrone.Core.Repository.Quality; using NzbDrone.Core.Test.Framework; using NzbDrone.Test.Common.AutoMoq; using PetaPoco; -using TvdbLib.Data; +using XemLib.Data; namespace NzbDrone.Core.Test.ProviderTests { @@ -161,7 +161,7 @@ namespace NzbDrone.Core.Test.ProviderTests c => c.Episodes = new List(Builder.CreateListOfSize(episodeCount). All() - .With(l => l.Language = new TvdbLanguage(0, "eng", "a")) + .With(l => l.Language = "en") .Build()) ).With(c => c.Id = seriesId).Build(); @@ -172,7 +172,7 @@ namespace NzbDrone.Core.Test.ProviderTests Db.Insert(fakeSeries); Mocker.GetMock() - .Setup(c => c.GetSeries(seriesId, true, false)) + .Setup(c => c.GetSeries(seriesId, true, false, false)) .Returns(fakeEpisodes); //Act @@ -195,7 +195,7 @@ namespace NzbDrone.Core.Test.ProviderTests c => c.Episodes = new List(Builder.CreateListOfSize(10). All() - .With(l => l.Language = new TvdbLanguage(0, "eng", "a")).And(e => e.FirstAired = DateTime.Now) + .With(l => l.Language = "en").And(e => e.FirstAired = DateTime.Now) .TheFirst(7).With(e => e.FirstAired = new DateTime(1800, 1, 1)) .Build()) ).With(c => c.Id = seriesId).Build(); @@ -207,7 +207,7 @@ namespace NzbDrone.Core.Test.ProviderTests Db.Insert(fakeSeries); Mocker.GetMock() - .Setup(c => c.GetSeries(seriesId, true, false)) + .Setup(c => c.GetSeries(seriesId, true, false, false)) .Returns(fakeEpisodes); @@ -236,7 +236,7 @@ namespace NzbDrone.Core.Test.ProviderTests c => c.Episodes = new List(Builder.CreateListOfSize(1) .All() - .With(l => l.Language = new TvdbLanguage(0, "eng", "a")).And(e => e.FirstAired = DateTime.Now) + .With(l => l.Language = "en").And(e => e.FirstAired = DateTime.Now) .TheFirst(1).With(e => e.FirstAired = new DateTime(1800, 1, 1)) .Build()) ).With(c => c.Id = seriesId).Build(); @@ -248,7 +248,7 @@ namespace NzbDrone.Core.Test.ProviderTests Db.Insert(fakeEpisode); Mocker.GetMock() - .Setup(c => c.GetSeries(seriesId, true, false)) + .Setup(c => c.GetSeries(seriesId, true, false, false)) .Returns(fakeTvDbEpisodes); //Act @@ -271,7 +271,7 @@ namespace NzbDrone.Core.Test.ProviderTests c => c.Episodes = new List(Builder.CreateListOfSize(episodeCount). All() - .With(l => l.Language = new TvdbLanguage(0, "eng", "a")) + .With(l => l.Language = "en") .TheFirst(1) .With(e => e.EpisodeNumber = 0) .With(e => e.SeasonNumber = 15) @@ -285,7 +285,7 @@ namespace NzbDrone.Core.Test.ProviderTests Db.Insert(fakeSeries); Mocker.GetMock() - .Setup(c => c.GetSeries(seriesId, true, false)) + .Setup(c => c.GetSeries(seriesId, true, false, false)) .Returns(fakeEpisodes); @@ -324,7 +324,7 @@ namespace NzbDrone.Core.Test.ProviderTests Db.Insert(fakeSeries); Mocker.GetMock() - .Setup(c => c.GetSeries(seriesId, true, false)) + .Setup(c => c.GetSeries(seriesId, true, false, false)) .Returns(fakeEpisodes); @@ -362,7 +362,7 @@ namespace NzbDrone.Core.Test.ProviderTests Db.Insert(fakeSeries); Mocker.GetMock() - .Setup(c => c.GetSeries(seriesId, true, false)) + .Setup(c => c.GetSeries(seriesId, true, false, false)) .Returns(fakeEpisodes); @@ -395,7 +395,7 @@ namespace NzbDrone.Core.Test.ProviderTests Db.Insert(fakeSeries); Mocker.GetMock() - .Setup(c => c.GetSeries(seriesId, true, false)) + .Setup(c => c.GetSeries(seriesId, true, false, false)) .Returns(fakeEpisodes); @@ -428,7 +428,7 @@ namespace NzbDrone.Core.Test.ProviderTests Db.Insert(fakeSeries); Mocker.GetMock() - .Setup(c => c.GetSeries(seriesId, true, false)) + .Setup(c => c.GetSeries(seriesId, true, false, false)) .Returns(fakeEpisodes); @@ -451,7 +451,7 @@ namespace NzbDrone.Core.Test.ProviderTests c => c.Episodes = new List(Builder.CreateListOfSize(episodeCount). All() - .With(l => l.Language = new TvdbLanguage(0, "eng", "a")) + .With(l => l.Language = "en") .With(e => e.SeasonNumber = 0) .Build()) ).With(c => c.Id = seriesId).Build(); @@ -463,7 +463,7 @@ namespace NzbDrone.Core.Test.ProviderTests Db.Insert(fakeSeries); Mocker.GetMock() - .Setup(c => c.GetSeries(seriesId, true, false)) + .Setup(c => c.GetSeries(seriesId, true, false, false)) .Returns(fakeEpisodes); Mocker.GetMock() @@ -493,7 +493,7 @@ namespace NzbDrone.Core.Test.ProviderTests var currentEpisodes = new List(); Mocker.GetMock(MockBehavior.Strict) - .Setup(c => c.GetSeries(seriesId, true, false)) + .Setup(c => c.GetSeries(seriesId, true, false, false)) .Returns(tvdbSeries); Mocker.GetMock() @@ -528,7 +528,7 @@ namespace NzbDrone.Core.Test.ProviderTests } Mocker.GetMock(MockBehavior.Strict) - .Setup(c => c.GetSeries(seriesId, true, false)) + .Setup(c => c.GetSeries(seriesId, true, false, false)) .Returns(tvdbSeries); Mocker.GetMock() @@ -565,7 +565,7 @@ namespace NzbDrone.Core.Test.ProviderTests .Returns(fakeEpisodeList); Mocker.GetMock() - .Setup(c => c.GetSeries(seriesId, true, false)) + .Setup(c => c.GetSeries(seriesId, true, false, false)) .Returns(fakeTvDbResult); //Act @@ -602,7 +602,7 @@ namespace NzbDrone.Core.Test.ProviderTests var fakeSeries = Builder.CreateNew().With(c => c.SeriesId = seriesId).Build(); Mocker.GetMock(MockBehavior.Strict) - .Setup(c => c.GetSeries(seriesId, true, false)) + .Setup(c => c.GetSeries(seriesId, true, false, false)) .Returns(tvdbSeries); Mocker.GetMock() @@ -643,7 +643,7 @@ namespace NzbDrone.Core.Test.ProviderTests } Mocker.GetMock(MockBehavior.Strict) - .Setup(c => c.GetSeries(seriesId, true, false)) + .Setup(c => c.GetSeries(seriesId, true, false, false)) .Returns(tvdbSeries); var updatedEpisodes = new List(); @@ -692,7 +692,7 @@ namespace NzbDrone.Core.Test.ProviderTests } Mocker.GetMock(MockBehavior.Strict) - .Setup(c => c.GetSeries(seriesId, true, false)) + .Setup(c => c.GetSeries(seriesId, true, false, false)) .Returns(tvdbSeries); var updatedEpisodes = new List(); @@ -738,7 +738,7 @@ namespace NzbDrone.Core.Test.ProviderTests } Mocker.GetMock(MockBehavior.Strict) - .Setup(c => c.GetSeries(seriesId, true, false)) + .Setup(c => c.GetSeries(seriesId, true, false, false)) .Returns(tvdbSeries); var updatedEpisodes = new List(); @@ -777,7 +777,7 @@ namespace NzbDrone.Core.Test.ProviderTests c => c.Episodes = new List(Builder.CreateListOfSize(episodeCount). All() - .With(l => l.Language = new TvdbLanguage(0, "eng", "a")) + .With(l => l.Language = "en") .With(e => e.SeasonNumber = 5) .TheFirst(1) .With(e => e.EpisodeNumber = 1) @@ -796,7 +796,7 @@ namespace NzbDrone.Core.Test.ProviderTests Db.Insert(fakeEpisode); Mocker.GetMock() - .Setup(c => c.GetSeries(seriesId, true, false)) + .Setup(c => c.GetSeries(seriesId, true, false, false)) .Returns(tvdbSeries); Mocker.GetMock() @@ -1486,7 +1486,7 @@ namespace NzbDrone.Core.Test.ProviderTests c => c.Episodes = new List(Builder.CreateListOfSize(episodeCount). All() - .With(l => l.Language = new TvdbLanguage(0, "eng", "a")) + .With(l => l.Language = "en") .With(e => e.EpisodeNumber = 0) .TheFirst(1) .With(e => e.SeasonNumber = 1) @@ -1508,7 +1508,7 @@ namespace NzbDrone.Core.Test.ProviderTests Db.Insert(fakeSeries); Mocker.GetMock() - .Setup(c => c.GetSeries(seriesId, true, false)) + .Setup(c => c.GetSeries(seriesId, true, false, false)) .Returns(tvdbSeries); //Act diff --git a/NzbDrone.Core.Test/ProviderTests/EpisodeProviderTest_DeleteInvalidEpisodes.cs b/NzbDrone.Core.Test/ProviderTests/EpisodeProviderTest_DeleteInvalidEpisodes.cs index c4f767a92..2d43a5c03 100644 --- a/NzbDrone.Core.Test/ProviderTests/EpisodeProviderTest_DeleteInvalidEpisodes.cs +++ b/NzbDrone.Core.Test/ProviderTests/EpisodeProviderTest_DeleteInvalidEpisodes.cs @@ -10,7 +10,7 @@ using NzbDrone.Core.Providers; using NzbDrone.Core.Repository; using NzbDrone.Core.Test.Framework; using NzbDrone.Test.Common.AutoMoq; -using TvdbLib.Data; +using XemLib.Data; namespace NzbDrone.Core.Test.ProviderTests { @@ -27,7 +27,7 @@ namespace NzbDrone.Core.Test.ProviderTests var tvDbSeries = Builder.CreateListOfSize(episodeCount). All() - .With(l => l.Language = new TvdbLanguage(0, "eng", "a")) + .With(l => l.Language = "en") .Build(); @@ -65,7 +65,7 @@ namespace NzbDrone.Core.Test.ProviderTests var tvDbSeries = Builder.CreateListOfSize(episodeCount). All() - .With(l => l.Language = new TvdbLanguage(0, "eng", "a")) + .With(l => l.Language = "en") .Build(); var fakeSeries = Builder.CreateNew() @@ -102,7 +102,7 @@ namespace NzbDrone.Core.Test.ProviderTests var tvDbSeries = Builder.CreateListOfSize(episodeCount). All() - .With(l => l.Language = new TvdbLanguage(0, "eng", "a")) + .With(l => l.Language = "en") .Build(); var fakeSeries = Builder.CreateNew() @@ -139,7 +139,7 @@ namespace NzbDrone.Core.Test.ProviderTests var tvDbSeries = Builder.CreateListOfSize(episodeCount). All() - .With(l => l.Language = new TvdbLanguage(0, "eng", "a")) + .With(l => l.Language = "en") .Build(); var fakeSeries = Builder.CreateNew() @@ -179,7 +179,7 @@ namespace NzbDrone.Core.Test.ProviderTests var tvDbSeries = Builder.CreateListOfSize(episodeCount). All() - .With(l => l.Language = new TvdbLanguage(0, "eng", "a")) + .With(l => l.Language = "en") .Build(); var fakeSeries = Builder.CreateNew() diff --git a/NzbDrone.Core.Test/ProviderTests/Metadata/Xbmc_ForEpisodeFile_Fixture.cs b/NzbDrone.Core.Test/ProviderTests/Metadata/Xbmc_ForEpisodeFile_Fixture.cs index 48b8ed3fc..c4822c146 100644 --- a/NzbDrone.Core.Test/ProviderTests/Metadata/Xbmc_ForEpisodeFile_Fixture.cs +++ b/NzbDrone.Core.Test/ProviderTests/Metadata/Xbmc_ForEpisodeFile_Fixture.cs @@ -17,8 +17,8 @@ using NzbDrone.Core.Repository.Quality; using NzbDrone.Core.Test.Framework; using NzbDrone.Test.Common.AutoMoq; using NzbDrone.Test.Common; -using TvdbLib.Data; -using TvdbLib.Data.Banner; +using XemLib.Data; +using XemLib.Data.Banner; namespace NzbDrone.Core.Test.ProviderTests.Metadata { @@ -52,31 +52,30 @@ namespace NzbDrone.Core.Test.ProviderTests.Metadata .With(e => e.SeriesId = 79488) .With(e => e.SeasonNumber = 1) .With(e => e.Directors = new List{ "Fake Director" }) - .With(e => e.Writer = new List{ "Fake Writer" }) + .With(e => e.Writers = new List{ "Fake Writer" }) .With(e => e.GuestStars = new List { "Guest Star 1", "Guest Star 2", "Guest Star 3", "" }) .Build(); var seasonBanners = Builder .CreateListOfSize(4) .TheFirst(2) - .With(b => b.Season = 1) + .With(b => b.SeasonNumber = 1) .TheLast(2) - .With(b => b.Season = 2) + .With(b => b.SeasonNumber = 2) .TheFirst(1) - .With(b => b.BannerType = TvdbSeasonBanner.Type.season) + .With(b => b.BannerType = TvdbSeasonBanner.Type.Poster) .With(b => b.BannerPath = "seasons/79488-1-1.jpg") .TheNext(2) - .With(b => b.BannerType = TvdbSeasonBanner.Type.seasonwide) + .With(b => b.BannerType = TvdbSeasonBanner.Type.Banner) .With(b => b.BannerPath = "banners/seasons/79488-test.jpg") .TheLast(1) - .With(b => b.BannerType = TvdbSeasonBanner.Type.season) + .With(b => b.BannerType = TvdbSeasonBanner.Type.Poster) .With(b => b.BannerPath = "seasons/79488-2-1.jpg") .Build(); var seriesActors = Builder .CreateListOfSize(5) .All() - .With(a => a.ActorImage = Builder.CreateNew().Build()) .Build(); tvdbSeries = Builder @@ -85,9 +84,10 @@ namespace NzbDrone.Core.Test.ProviderTests.Metadata .With(s => s.SeriesName = "30 Rock") .With(s => s.TvdbActors = seriesActors.ToList()) .With(s => s.Episodes = tvdbEpisodes.ToList()) + .With(s => s.Banners = new TvdbBanners()) .Build(); - tvdbSeries.Banners.AddRange(seasonBanners); + tvdbSeries.Banners.SeasonBanners.AddRange(seasonBanners); } private void WithUseBanners() @@ -128,7 +128,7 @@ namespace NzbDrone.Core.Test.ProviderTests.Metadata private void WithNoWriters() { - tvdbSeries.Episodes.ForEach(e => e.Writer = new List()); + tvdbSeries.Episodes.ForEach(e => e.Writers = new List()); } [Test] @@ -159,7 +159,7 @@ namespace NzbDrone.Core.Test.ProviderTests.Metadata { WithSingleEpisodeFile(); Mocker.Resolve().CreateForEpisodeFile(episodeFile, tvdbSeries); - Mocker.GetMock().Verify(v => v.Download(tvdbSeries.Episodes.First().BannerPath, episodeFile.Path.Replace("avi", "tbn")), Times.Once()); + Mocker.GetMock().Verify(v => v.Download(tvdbSeries.Episodes.First().Banner, episodeFile.Path.Replace("avi", "tbn")), Times.Once()); } [Test] diff --git a/NzbDrone.Core.Test/ProviderTests/Metadata/Xbmc_ForSeries_Fixture.cs b/NzbDrone.Core.Test/ProviderTests/Metadata/Xbmc_ForSeries_Fixture.cs index 1a55c0eb7..6151bfc11 100644 --- a/NzbDrone.Core.Test/ProviderTests/Metadata/Xbmc_ForSeries_Fixture.cs +++ b/NzbDrone.Core.Test/ProviderTests/Metadata/Xbmc_ForSeries_Fixture.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; @@ -16,8 +17,8 @@ using NzbDrone.Core.Repository.Quality; using NzbDrone.Core.Test.Framework; using NzbDrone.Test.Common.AutoMoq; using NzbDrone.Test.Common; -using TvdbLib.Data; -using TvdbLib.Data.Banner; +using XemLib.Data; +using XemLib.Data.Banner; namespace NzbDrone.Core.Test.ProviderTests.Metadata { @@ -42,24 +43,23 @@ namespace NzbDrone.Core.Test.ProviderTests.Metadata var seasonBanners = Builder .CreateListOfSize(4) .TheFirst(2) - .With(b => b.Season = 1) + .With(b => b.SeasonNumber = 1) .TheLast(2) - .With(b => b.Season = 2) + .With(b => b.SeasonNumber = 2) .TheFirst(1) - .With(b => b.BannerType = TvdbSeasonBanner.Type.season) + .With(b => b.BannerType = TvdbSeasonBanner.Type.Poster) .With(b => b.BannerPath = "seasons/79488-1-1.jpg") .TheNext(2) - .With(b => b.BannerType = TvdbSeasonBanner.Type.seasonwide) + .With(b => b.BannerType = TvdbSeasonBanner.Type.Banner) .With(b => b.BannerPath = "banners/seasons/79488-test.jpg") .TheLast(1) - .With(b => b.BannerType = TvdbSeasonBanner.Type.season) + .With(b => b.BannerType = TvdbSeasonBanner.Type.Poster) .With(b => b.BannerPath = "seasons/79488-2-1.jpg") .Build(); var seriesActors = Builder .CreateListOfSize(5) .All() - .With(a => a.ActorImage = Builder.CreateNew().Build()) .Build(); tvdbSeries = Builder @@ -67,9 +67,10 @@ namespace NzbDrone.Core.Test.ProviderTests.Metadata .With(s => s.Id = 79488) .With(s => s.SeriesName = "30 Rock") .With(s => s.TvdbActors = seriesActors.ToList()) + .With(s => s.Banners = new TvdbBanners()) .Build(); - tvdbSeries.Banners.AddRange(seasonBanners); + tvdbSeries.Banners.SeasonBanners.AddRange(seasonBanners); } private void WithUseBanners() @@ -82,19 +83,18 @@ namespace NzbDrone.Core.Test.ProviderTests.Metadata var seasonBanners = Builder .CreateListOfSize(2) .All() - .With(b => b.Season = 0) + .With(b => b.SeasonNumber = 0) .TheFirst(1) - .With(b => b.BannerType = TvdbSeasonBanner.Type.season) + .With(b => b.BannerType = TvdbSeasonBanner.Type.Poster) .With(b => b.BannerPath = "seasons/79488-0-1.jpg") .TheLast(1) - .With(b => b.BannerType = TvdbSeasonBanner.Type.seasonwide) + .With(b => b.BannerType = TvdbSeasonBanner.Type.Banner) .With(b => b.BannerPath = "banners/seasons/79488-0-1.jpg") .Build(); var seriesActors = Builder .CreateListOfSize(5) .All() - .With(a => a.ActorImage = Builder.CreateNew().Build()) .Build(); tvdbSeries = Builder @@ -102,9 +102,11 @@ namespace NzbDrone.Core.Test.ProviderTests.Metadata .With(s => s.Id = 79488) .With(s => s.SeriesName = "30 Rock") .With(s => s.TvdbActors = seriesActors.ToList()) + .With(s => s.Banners = new TvdbBanners()) + .With(s => s.Genres = new List { "Comedy" }) .Build(); - tvdbSeries.Banners.AddRange(seasonBanners); + tvdbSeries.Banners.SeasonBanners.AddRange(seasonBanners); } [Test] @@ -124,14 +126,14 @@ namespace NzbDrone.Core.Test.ProviderTests.Metadata public void should_download_fanart() { Mocker.Resolve().CreateForSeries(series, tvdbSeries); - Mocker.GetMock().Verify(v => v.Download(tvdbSeries.FanartPath, Path.Combine(series.Path, "fanart.jpg")), Times.Once()); + Mocker.GetMock().Verify(v => v.Download(tvdbSeries.Fanart, Path.Combine(series.Path, "fanart.jpg")), Times.Once()); } [Test] public void should_download_poster_when_useBanners_is_false() { Mocker.Resolve().CreateForSeries(series, tvdbSeries); - Mocker.GetMock().Verify(v => v.Download(tvdbSeries.PosterPath, Path.Combine(series.Path, "folder.jpg")), Times.Once()); + Mocker.GetMock().Verify(v => v.Download(tvdbSeries.Poster, Path.Combine(series.Path, "folder.jpg")), Times.Once()); } [Test] @@ -139,7 +141,7 @@ namespace NzbDrone.Core.Test.ProviderTests.Metadata { WithUseBanners(); Mocker.Resolve().CreateForSeries(series, tvdbSeries); - Mocker.GetMock().Verify(v => v.Download(tvdbSeries.BannerPath, Path.Combine(series.Path, "folder.jpg")), Times.Once()); + Mocker.GetMock().Verify(v => v.Download(tvdbSeries.Banner, Path.Combine(series.Path, "folder.jpg")), Times.Once()); } [Test] diff --git a/NzbDrone.Core.Test/ProviderTests/RecycleBinProviderTests/CleanupFixture.cs b/NzbDrone.Core.Test/ProviderTests/RecycleBinProviderTests/CleanupFixture.cs index dd4255406..26e367da3 100644 --- a/NzbDrone.Core.Test/ProviderTests/RecycleBinProviderTests/CleanupFixture.cs +++ b/NzbDrone.Core.Test/ProviderTests/RecycleBinProviderTests/CleanupFixture.cs @@ -18,7 +18,6 @@ using NzbDrone.Core.Repository.Quality; using NzbDrone.Core.Test.Framework; using NzbDrone.Test.Common.AutoMoq; using PetaPoco; -using TvdbLib.Data; namespace NzbDrone.Core.Test.ProviderTests.RecycleBinProviderTests { diff --git a/NzbDrone.Core.Test/ProviderTests/RecycleBinProviderTests/DeleteDirectoryFixture.cs b/NzbDrone.Core.Test/ProviderTests/RecycleBinProviderTests/DeleteDirectoryFixture.cs index e4cd1fd3b..162baf1e8 100644 --- a/NzbDrone.Core.Test/ProviderTests/RecycleBinProviderTests/DeleteDirectoryFixture.cs +++ b/NzbDrone.Core.Test/ProviderTests/RecycleBinProviderTests/DeleteDirectoryFixture.cs @@ -18,7 +18,6 @@ using NzbDrone.Core.Repository.Quality; using NzbDrone.Core.Test.Framework; using NzbDrone.Test.Common.AutoMoq; using PetaPoco; -using TvdbLib.Data; namespace NzbDrone.Core.Test.ProviderTests.RecycleBinProviderTests { diff --git a/NzbDrone.Core.Test/ProviderTests/RecycleBinProviderTests/DeleteFileFixture.cs b/NzbDrone.Core.Test/ProviderTests/RecycleBinProviderTests/DeleteFileFixture.cs index 5ac5c3378..3f4310402 100644 --- a/NzbDrone.Core.Test/ProviderTests/RecycleBinProviderTests/DeleteFileFixture.cs +++ b/NzbDrone.Core.Test/ProviderTests/RecycleBinProviderTests/DeleteFileFixture.cs @@ -18,7 +18,6 @@ using NzbDrone.Core.Repository.Quality; using NzbDrone.Core.Test.Framework; using NzbDrone.Test.Common.AutoMoq; using PetaPoco; -using TvdbLib.Data; namespace NzbDrone.Core.Test.ProviderTests.RecycleBinProviderTests { diff --git a/NzbDrone.Core.Test/ProviderTests/RecycleBinProviderTests/EmptyFixture.cs b/NzbDrone.Core.Test/ProviderTests/RecycleBinProviderTests/EmptyFixture.cs index 1835dda2a..4b7853392 100644 --- a/NzbDrone.Core.Test/ProviderTests/RecycleBinProviderTests/EmptyFixture.cs +++ b/NzbDrone.Core.Test/ProviderTests/RecycleBinProviderTests/EmptyFixture.cs @@ -18,7 +18,6 @@ using NzbDrone.Core.Repository.Quality; using NzbDrone.Core.Test.Framework; using NzbDrone.Test.Common.AutoMoq; using PetaPoco; -using TvdbLib.Data; namespace NzbDrone.Core.Test.ProviderTests.RecycleBinProviderTests { diff --git a/NzbDrone.Core.Test/ProviderTests/SeasonProviderTest.cs b/NzbDrone.Core.Test/ProviderTests/SeasonProviderTest.cs index fa400ab90..248fb82dc 100644 --- a/NzbDrone.Core.Test/ProviderTests/SeasonProviderTest.cs +++ b/NzbDrone.Core.Test/ProviderTests/SeasonProviderTest.cs @@ -16,7 +16,6 @@ using NzbDrone.Core.Repository.Quality; using NzbDrone.Core.Test.Framework; using NzbDrone.Test.Common.AutoMoq; using PetaPoco; -using TvdbLib.Data; namespace NzbDrone.Core.Test.ProviderTests { diff --git a/NzbDrone.Core.Test/ProviderTests/TvDbProviderTest.cs b/NzbDrone.Core.Test/ProviderTests/TvDbProviderTest.cs index 2dd003ace..42232678e 100644 --- a/NzbDrone.Core.Test/ProviderTests/TvDbProviderTest.cs +++ b/NzbDrone.Core.Test/ProviderTests/TvDbProviderTest.cs @@ -10,8 +10,8 @@ using NzbDrone.Common; using NzbDrone.Core.Providers; using NzbDrone.Core.Test.Framework; using NzbDrone.Test.Common; -using TvdbLib.Data; -using TvdbLib.Exceptions; +using XemLib.Data; +using XemLib.Exceptions; namespace NzbDrone.Core.Test.ProviderTests { @@ -30,7 +30,7 @@ namespace NzbDrone.Core.Test.ProviderTests [TearDown] public void TearDown() { - ExceptionVerification.MarkInconclusive(typeof(TvdbNotAvailableException)); + ExceptionVerification.MarkInconclusive(typeof(TheTvbdbUnavailableException)); } [TestCase("The Simpsons")] @@ -68,58 +68,5 @@ namespace NzbDrone.Core.Test.ProviderTests .Max(e => e.Count()).Should().Be(1); } - - [Test] - public void American_dad_fix() - { - //act - var result = tvDbProvider.GetSeries(73141, true); - - var seasonsNumbers = result.Episodes.Select(e => e.SeasonNumber) - .Distinct().ToList(); - - var seasons = new Dictionary>(seasonsNumbers.Count); - - foreach (var season in seasonsNumbers) - { - seasons.Add(season, result.Episodes.Where(e => e.SeasonNumber == season).ToList()); - } - - foreach (var episode in result.Episodes) - { - Console.WriteLine(episode); - } - - //assert - seasonsNumbers.Should().HaveCount(9); - seasons[1].Should().HaveCount(23); - seasons[2].Should().HaveCount(19); - seasons[3].Should().HaveCount(16); - seasons[4].Should().HaveCount(20); - seasons[5].Should().HaveCount(18); - seasons[6].Should().HaveCount(19); - seasons[7].Should().HaveCount(18); - - foreach (var season in seasons) - { - season.Value.Should().OnlyHaveUniqueItems("Season {0}", season.Key); - } - - //Make sure no episode number is skipped - foreach (var season in seasons) - { - for (int i = 1; i < season.Value.Count; i++) - { - //Skip specials, because someone decided 1,3,4,6,7,21 is how you count... - if (season.Key == 0) - continue; - - season.Value.Should().Contain(c => c.EpisodeNumber == i, "Can't find Episode S{0:00}E{1:00}", - season.Value[0].SeasonNumber, i); - } - } - - - } } } \ No newline at end of file diff --git a/NzbDrone.Core/NzbDrone.Core.csproj b/NzbDrone.Core/NzbDrone.Core.csproj index 8cc7feb5b..cf3932439 100644 --- a/NzbDrone.Core/NzbDrone.Core.csproj +++ b/NzbDrone.Core/NzbDrone.Core.csproj @@ -206,10 +206,6 @@ - - False - ..\Libraries\TvdbLib.dll - ..\packages\twitterizer.2.4.0.26532\lib\net40\Twitterizer2.dll @@ -217,6 +213,9 @@ False ..\packages\WebActivator.1.5\lib\net40\WebActivator.dll + + ..\Libraries\XemLib\XemLib.dll + diff --git a/NzbDrone.Core/Providers/EpisodeProvider.cs b/NzbDrone.Core/Providers/EpisodeProvider.cs index 78e23961d..29bdd62d9 100644 --- a/NzbDrone.Core/Providers/EpisodeProvider.cs +++ b/NzbDrone.Core/Providers/EpisodeProvider.cs @@ -7,7 +7,7 @@ using NLog; using NzbDrone.Core.Model; using NzbDrone.Core.Repository; using PetaPoco; -using TvdbLib.Data; +using XemLib.Data; namespace NzbDrone.Core.Providers { diff --git a/NzbDrone.Core/Providers/Metadata/MetadataBase.cs b/NzbDrone.Core/Providers/Metadata/MetadataBase.cs index 740785acc..ee9de7e06 100644 --- a/NzbDrone.Core/Providers/Metadata/MetadataBase.cs +++ b/NzbDrone.Core/Providers/Metadata/MetadataBase.cs @@ -4,7 +4,7 @@ using NzbDrone.Common; using NzbDrone.Core.Model; using NzbDrone.Core.Providers.Core; using NzbDrone.Core.Repository; -using TvdbLib.Data; +using XemLib.Data; namespace NzbDrone.Core.Providers.Metadata { diff --git a/NzbDrone.Core/Providers/Metadata/Xbmc.cs b/NzbDrone.Core/Providers/Metadata/Xbmc.cs index 8182cc235..44f9c9e5e 100644 --- a/NzbDrone.Core/Providers/Metadata/Xbmc.cs +++ b/NzbDrone.Core/Providers/Metadata/Xbmc.cs @@ -8,8 +8,8 @@ using NzbDrone.Common; using NzbDrone.Core.Model; using NzbDrone.Core.Providers.Core; using NzbDrone.Core.Repository; -using TvdbLib.Data; -using TvdbLib.Data.Banner; +using XemLib.Data; +using XemLib.Data.Banner; namespace NzbDrone.Core.Providers.Metadata { @@ -48,16 +48,16 @@ namespace NzbDrone.Core.Providers.Metadata tvShow.Add(new XElement("episodeguideurl", episodeGuideUrl)); tvShow.Add(new XElement("mpaa", tvDbSeries.ContentRating)); tvShow.Add(new XElement("id", tvDbSeries.Id)); - tvShow.Add(new XElement("genre", tvDbSeries.GenreString.Trim('|').Split('|')[0])); + tvShow.Add(new XElement("genre", tvDbSeries.Genres.FirstOrDefault())); tvShow.Add(new XElement("premiered", tvDbSeries.FirstAired.ToString("yyyy-MM-dd"))); - tvShow.Add(new XElement("studio", tvDbSeries.Network)); + tvShow.Add(new XElement("studio", tvDbSeries.Network)); foreach(var actor in tvDbSeries.TvdbActors) { tvShow.Add(new XElement("actor", new XElement("name", actor.Name), new XElement("role", actor.Role), - new XElement("thumb", "http://www.thetvdb.com/banners/" + actor.ActorImage.BannerPath) + new XElement("thumb", "http://www.thetvdb.com/banners/" + actor.Image) )); } @@ -71,7 +71,7 @@ namespace NzbDrone.Core.Providers.Metadata if (!_diskProvider.FileExists(Path.Combine(series.Path, "fanart.jpg"))) { _logger.Debug("Downloading fanart for: {0}", series.Title); - _bannerProvider.Download(tvDbSeries.FanartPath, Path.Combine(series.Path, "fanart.jpg")); + _bannerProvider.Download(tvDbSeries.Fanart, Path.Combine(series.Path, "fanart.jpg")); } if (!_diskProvider.FileExists(Path.Combine(series.Path, "folder.jpg"))) @@ -79,19 +79,19 @@ namespace NzbDrone.Core.Providers.Metadata if(_configProvider.MetadataUseBanners) { _logger.Debug("Downloading series banner for: {0}", series.Title); - _bannerProvider.Download(tvDbSeries.BannerPath, Path.Combine(series.Path, "folder.jpg")); + _bannerProvider.Download(tvDbSeries.Banner, Path.Combine(series.Path, "folder.jpg")); _logger.Debug("Downloading Season banners for {0}", series.Title); - DownloadSeasonThumbnails(series, tvDbSeries, TvdbSeasonBanner.Type.seasonwide); + DownloadSeasonThumbnails(series, tvDbSeries, TvdbSeasonBanner.Type.Banner); } else { _logger.Debug("Downloading series thumbnail for: {0}", series.Title); - _bannerProvider.Download(tvDbSeries.PosterPath, Path.Combine(series.Path, "folder.jpg")); + _bannerProvider.Download(tvDbSeries.Poster, Path.Combine(series.Path, "folder.jpg")); _logger.Debug("Downloading Season posters for {0}", series.Title); - DownloadSeasonThumbnails(series, tvDbSeries, TvdbSeasonBanner.Type.season); + DownloadSeasonThumbnails(series, tvDbSeries, TvdbSeasonBanner.Type.Poster); } } } @@ -112,7 +112,7 @@ namespace NzbDrone.Core.Providers.Metadata e.SeasonNumber == episodeFile.SeasonNumber && e.EpisodeNumber == episodes.First().EpisodeNumber); - if (episodeFileThumbnail == null || String.IsNullOrWhiteSpace(episodeFileThumbnail.BannerPath)) + if (episodeFileThumbnail == null || String.IsNullOrWhiteSpace(episodeFileThumbnail.Banner)) { _logger.Debug("No thumbnail is available for this episode"); return; @@ -121,7 +121,7 @@ namespace NzbDrone.Core.Providers.Metadata if (!_diskProvider.FileExists(episodeFile.Path.Replace(Path.GetExtension(episodeFile.Path), ".tbn"))) { _logger.Debug("Downloading episode thumbnail for: {0}", episodeFile.EpisodeFileId); - _bannerProvider.Download(episodeFileThumbnail.BannerPath, + _bannerProvider.Download(episodeFileThumbnail.Banner, episodeFile.Path.Replace(Path.GetExtension(episodeFile.Path), ".tbn")); } @@ -165,9 +165,9 @@ namespace NzbDrone.Core.Providers.Metadata details.Add(new XElement("plot", tvdbEpisode.Overview)); details.Add(new XElement("displayseason")); details.Add(new XElement("displayepisode")); - details.Add(new XElement("thumb", "http://www.thetvdb.com/banners/" + tvdbEpisode.BannerPath)); + details.Add(new XElement("thumb", "http://www.thetvdb.com/banners/" + tvdbEpisode.Banner)); details.Add(new XElement("watched", "false")); - details.Add(new XElement("credits", tvdbEpisode.Writer.FirstOrDefault())); + details.Add(new XElement("credits", tvdbEpisode.Writers.FirstOrDefault())); details.Add(new XElement("director", tvdbEpisode.Directors.FirstOrDefault())); details.Add(new XElement("rating", tvdbEpisode.Rating)); @@ -186,7 +186,7 @@ namespace NzbDrone.Core.Providers.Metadata details.Add(new XElement("actor", new XElement("name", actor.Name), new XElement("role", actor.Role), - new XElement("thumb", "http://www.thetvdb.com/banners/" + actor.ActorImage.BannerPath) + new XElement("thumb", "http://www.thetvdb.com/banners/" + actor.Image) )); } @@ -235,11 +235,11 @@ namespace NzbDrone.Core.Providers.Metadata private void DownloadSeasonThumbnails(Series series, TvdbSeries tvDbSeries, TvdbSeasonBanner.Type bannerType) { - var seasons = tvDbSeries.SeasonBanners.Where(s => s.BannerType == bannerType).Select(s => s.Season); + var seasons = tvDbSeries.Banners.SeasonBanners.Where(s => s.BannerType == bannerType).Select(s => s.SeasonNumber); foreach (var season in seasons) { - var banner = tvDbSeries.SeasonBanners.FirstOrDefault(b => b.BannerType == bannerType && b.Season == season); + var banner = tvDbSeries.Banners.SeasonBanners.FirstOrDefault(b => b.BannerType == bannerType && b.SeasonNumber == season); _logger.Debug("Downloading banner for Season: {0} Series: {1}", season, series.Title); if (season == 0) diff --git a/NzbDrone.Core/Providers/MetadataProvider.cs b/NzbDrone.Core/Providers/MetadataProvider.cs index caad52dba..d6d27ac08 100644 --- a/NzbDrone.Core/Providers/MetadataProvider.cs +++ b/NzbDrone.Core/Providers/MetadataProvider.cs @@ -8,7 +8,7 @@ using NzbDrone.Core.Providers.ExternalNotification; using NzbDrone.Core.Providers.Metadata; using NzbDrone.Core.Repository; using PetaPoco; -using TvdbLib.Data; +using XemLib.Data; namespace NzbDrone.Core.Providers { @@ -92,7 +92,7 @@ namespace NzbDrone.Core.Providers public virtual void CreateForSeries(Series series) { - var tvDbSeries = _tvDbProvider.GetSeries(series.SeriesId, false, true); + var tvDbSeries = _tvDbProvider.GetSeries(series.SeriesId, false, true, true); CreateForSeries(series, tvDbSeries); } @@ -107,7 +107,7 @@ namespace NzbDrone.Core.Providers public virtual void CreateForEpisodeFile(EpisodeFile episodeFile) { - var tvDbSeries = _tvDbProvider.GetSeries(episodeFile.SeriesId, true, true); + var tvDbSeries = _tvDbProvider.GetSeries(episodeFile.SeriesId, true, true, true); CreateForEpisodeFile(episodeFile, tvDbSeries); } @@ -130,7 +130,7 @@ namespace NzbDrone.Core.Providers Logger.Trace("Creating metadata for {0} files.", episodeFiles.Count); - var tvDbSeries = _tvDbProvider.GetSeries(episodeFiles.First().SeriesId, true, true); + var tvDbSeries = _tvDbProvider.GetSeries(episodeFiles.First().SeriesId, true, true, true); foreach(var episodeFile in episodeFiles) { diff --git a/NzbDrone.Core/Providers/SeriesProvider.cs b/NzbDrone.Core/Providers/SeriesProvider.cs index ecbded829..9c6d61242 100644 --- a/NzbDrone.Core/Providers/SeriesProvider.cs +++ b/NzbDrone.Core/Providers/SeriesProvider.cs @@ -97,11 +97,11 @@ namespace NzbDrone.Core.Providers series.AirsDayOfWeek = tvDbSeries.AirsDayOfWeek; series.Overview = tvDbSeries.Overview; series.Status = tvDbSeries.Status; - series.Language = tvDbSeries.Language != null ? tvDbSeries.Language.Abbriviation : string.Empty; + series.Language = tvDbSeries.Language != null ? tvDbSeries.Language : string.Empty; series.CleanTitle = Parser.NormalizeTitle(tvDbSeries.SeriesName); series.LastInfoSync = DateTime.Now; series.Runtime = (int)tvDbSeries.Runtime; - series.BannerUrl = tvDbSeries.BannerPath; + series.BannerUrl = tvDbSeries.Banner; series.Network = tvDbSeries.Network; UpdateSeries(series); diff --git a/NzbDrone.Core/Providers/TvDbProvider.cs b/NzbDrone.Core/Providers/TvDbProvider.cs index 0bbd29b69..aca384bbc 100644 --- a/NzbDrone.Core/Providers/TvDbProvider.cs +++ b/NzbDrone.Core/Providers/TvDbProvider.cs @@ -5,9 +5,8 @@ using System.Text.RegularExpressions; using NLog; using Ninject; using NzbDrone.Common; -using TvdbLib; -using TvdbLib.Cache; -using TvdbLib.Data; +using XemLib; +using XemLib.Data; namespace NzbDrone.Core.Providers { @@ -17,13 +16,13 @@ namespace NzbDrone.Core.Providers public const string TVDB_APIKEY = "5D2D188E86E07F4F"; private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); - private readonly TvdbHandler _handler; + private readonly XemClient _xemClient; [Inject] public TvDbProvider(EnvironmentProvider environmentProvider) { _environmentProvider = environmentProvider; - _handler = new TvdbHandler(new XmlCacheProvider(_environmentProvider.GetCacheFolder()), TVDB_APIKEY); + _xemClient = new XemClient(TVDB_APIKEY); } public TvDbProvider() @@ -33,57 +32,27 @@ namespace NzbDrone.Core.Providers public virtual IList SearchSeries(string title) { - lock (_handler) - { - Logger.Debug("Searching TVDB for '{0}'", title); + Logger.Debug("Searching TVDB for '{0}'", title); - var result = _handler.SearchSeries(title); + var result = _xemClient.SearchSeries(title); - Logger.Debug("Search for '{0}' returned {1} possible results", title, result.Count); - return result; - } + Logger.Debug("Search for '{0}' returned {1} possible results", title, result.Count); + return result; } - public virtual TvdbSeries GetSeries(int id, bool loadEpisodes, bool loadActors = false) + public virtual TvdbSeries GetSeries(int id, bool loadEpisodes, bool loadActors = false, bool loadBanners = false) { - lock (_handler) - { - Logger.Debug("Fetching SeriesId'{0}' from tvdb", id); - var result = _handler.GetSeries(id, TvdbLanguage.DefaultLanguage, loadEpisodes, loadActors, true, true); + Logger.Debug("Fetching SeriesId'{0}' from tvdb", id); + var result = _xemClient.GetSeries(id, loadEpisodes, loadActors, true, TvdbLanguage.Default); - //Fix American Dad's scene gongshow - if (result != null && result.Id == 73141) - { - result.Episodes = result.Episodes.Where(e => e.SeasonNumber == 0 || e.EpisodeNumber > 0).ToList(); + //Remove duplicated episodes + var episodes = result.Episodes.OrderByDescending(e => e.FirstAired).ThenByDescending(e => e.EpisodeName) + .GroupBy(e => e.SeriesId.ToString("000000") + e.SeasonNumber.ToString("000") + e.EpisodeNumber.ToString("000")) + .Select(e => e.First()); - var seasonOneEpisodeCount = result.Episodes.Where(e => e.SeasonNumber == 1).Count(); - var seasonOneId = result.Episodes.Where(e => e.SeasonNumber == 1).First().SeasonId; + result.Episodes = episodes.ToList(); - foreach (var episode in result.Episodes) - { - if (episode.SeasonNumber > 1) - { - if (episode.SeasonNumber == 2) - { - episode.EpisodeNumber = episode.EpisodeNumber + seasonOneEpisodeCount; - episode.SeasonId = seasonOneId; - } - - episode.SeasonNumber = episode.SeasonNumber - 1; - } - - } - } - - //Remove duplicated episodes - var episodes = result.Episodes.OrderByDescending(e => e.FirstAired).ThenByDescending(e => e.EpisodeName) - .GroupBy(e => e.SeriesId.ToString("000000") + e.SeasonNumber.ToString("000") + e.EpisodeNumber.ToString("000")) - .Select(e => e.First()); - - result.Episodes = episodes.ToList(); - - return result; - } + return result; } } } \ No newline at end of file diff --git a/NzbDrone.Web/Controllers/AddSeriesController.cs b/NzbDrone.Web/Controllers/AddSeriesController.cs index 96adab086..541dcea23 100644 --- a/NzbDrone.Web/Controllers/AddSeriesController.cs +++ b/NzbDrone.Web/Controllers/AddSeriesController.cs @@ -12,7 +12,7 @@ using NzbDrone.Core.Providers.Core; using NzbDrone.Core.Repository; using NzbDrone.Web.Filters; using NzbDrone.Web.Models; -using TvdbLib.Exceptions; +using XemLib.Exceptions; namespace NzbDrone.Web.Controllers { @@ -156,14 +156,14 @@ namespace NzbDrone.Web.Controllers DisplayedTitle = r.FirstAired.Year > 1900 && !r.SeriesName.EndsWith("(" + r.FirstAired.Year + ")") ? string.Format("{0} ({1})", r.SeriesName, r.FirstAired.Year) : r.SeriesName, - Banner = r.Banner.BannerPath, + Banner = r.Banner, Url = String.Format("http://www.thetvdb.com/?tab=series&id={0}", r.Id) }).ToList(); return Json(tvDbResults, JsonRequestBehavior.AllowGet); } - catch(TvdbNotAvailableException ex) + catch (TheTvbdbUnavailableException ex) { logger.WarnException("Unable to lookup series on TheTVDB", ex); return JsonNotificationResult.Info("Lookup Failed", "TheTVDB is not available at this time."); diff --git a/NzbDrone.Web/NzbDrone.Web.csproj b/NzbDrone.Web/NzbDrone.Web.csproj index 56305e711..0bb0c2722 100644 --- a/NzbDrone.Web/NzbDrone.Web.csproj +++ b/NzbDrone.Web/NzbDrone.Web.csproj @@ -138,14 +138,14 @@ True - - False - ..\Libraries\TvdbLib.dll - False ..\packages\WebActivator.1.5.1\lib\net40\WebActivator.dll + + False + ..\Libraries\XemLib\XemLib.dll +