mirror of
https://github.com/Sonarr/Sonarr.git
synced 2024-12-12 11:15:43 +02:00
removed searchhistory storage.
This commit is contained in:
parent
16c6f32639
commit
c9370865a4
@ -190,7 +190,6 @@
|
||||
<Compile Include="ProviderTests\RecycleBinProviderTests\EmptyFixture.cs" />
|
||||
<Compile Include="ProviderTests\RecycleBinProviderTests\DeleteFileFixture.cs" />
|
||||
<Compile Include="ProviderTests\RecycleBinProviderTests\DeleteDirectoryFixture.cs" />
|
||||
<Compile Include="ProviderTests\SearchHistoryProviderTest.cs" />
|
||||
<Compile Include="ProviderTests\PlexProviderTest.cs" />
|
||||
<Compile Include="TvTests\SeasonProviderTest.cs" />
|
||||
<Compile Include="DecisionEngineTests\RetentionSpecificationFixture.cs" />
|
||||
@ -220,7 +219,6 @@
|
||||
<Compile Include="ProviderTests\XemCommunicationProviderTests\GetXemSeriesIdsFixture.cs" />
|
||||
<Compile Include="Services\ParseErrorServiceFixture.cs" />
|
||||
<Compile Include="HelperTests\SortHelperFixture.cs" />
|
||||
<Compile Include="TvTests\EpisodeProviderTests\EpisodeProviderTest_DeleteInvalidEpisodes.cs" />
|
||||
<Compile Include="DecisionEngineTests\AcceptableSizeSpecificationFixture.cs" />
|
||||
<Compile Include="ProviderTests\QualityTypeProviderTest.cs" />
|
||||
<Compile Include="ProviderTests\MisnamedProviderTest.cs" />
|
||||
|
@ -1,362 +0,0 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using FizzWare.NBuilder;
|
||||
using FluentAssertions;
|
||||
using Moq;
|
||||
using NUnit.Framework;
|
||||
using NzbDrone.Common;
|
||||
using NzbDrone.Core.Download;
|
||||
using NzbDrone.Core.Tv;
|
||||
using NzbDrone.Core.Model;
|
||||
using NzbDrone.Core.Model.Notification;
|
||||
using NzbDrone.Core.Providers;
|
||||
using NzbDrone.Core.Repository;
|
||||
using NzbDrone.Core.Repository.Quality;
|
||||
using NzbDrone.Core.Repository.Search;
|
||||
using NzbDrone.Core.Test.Framework;
|
||||
using NzbDrone.Test.Common.AutoMoq;
|
||||
using NzbDrone.Test.Common;
|
||||
|
||||
namespace NzbDrone.Core.Test.ProviderTests
|
||||
{
|
||||
[TestFixture]
|
||||
// ReSharper disable InconsistentNaming
|
||||
public class SearchHistoryProviderTest : SqlCeTest
|
||||
{
|
||||
private SearchHistory _searchHistory;
|
||||
private Series _series;
|
||||
private Episode _episode;
|
||||
|
||||
[SetUp]
|
||||
public void Setup()
|
||||
{
|
||||
_series = Builder<Series>.CreateNew()
|
||||
.Build();
|
||||
|
||||
_episode = Builder<Episode>.CreateNew()
|
||||
.Build();
|
||||
|
||||
var items = Builder<SearchHistoryItem>.CreateListOfSize(10)
|
||||
.All()
|
||||
.With(c => c.Quality = QualityTypes.SDTV)
|
||||
.Build().ToList();
|
||||
|
||||
_searchHistory = Builder<SearchHistory>.CreateNew()
|
||||
.With(h => h.EpisodeId = _episode.OID)
|
||||
.With(h => h.SeriesId - _series.OID)
|
||||
.With(h => h.SearchHistoryItems = items)
|
||||
.Build();
|
||||
}
|
||||
|
||||
private void WithUnsuccessfulSearch()
|
||||
{
|
||||
foreach(var item in _searchHistory.SearchHistoryItems)
|
||||
{
|
||||
item.Success = false;
|
||||
}
|
||||
}
|
||||
|
||||
private void WithSuccessfulSearch()
|
||||
{
|
||||
foreach(var item in _searchHistory.SearchHistoryItems)
|
||||
{
|
||||
item.Success = false;
|
||||
}
|
||||
|
||||
var i = _searchHistory.SearchHistoryItems.Last();
|
||||
i.Success = true;
|
||||
i.SearchError = ReportRejectionType.None;
|
||||
}
|
||||
|
||||
private void WithExpiredHistory()
|
||||
{
|
||||
var history = Builder<SearchHistory>.CreateListOfSize(10)
|
||||
.All()
|
||||
.With(h => h.SearchTime = DateTime.Now.AddDays(-10))
|
||||
.Build();
|
||||
|
||||
foreach(var searchHistory in history)
|
||||
{
|
||||
var items = Builder<SearchHistoryItem>.CreateListOfSize(10)
|
||||
.All()
|
||||
.With(c => c.Quality = QualityTypes.SDTV)
|
||||
.With(i => i.Id == searchHistory.Id)
|
||||
.Build();
|
||||
|
||||
Db.InsertMany(items);
|
||||
}
|
||||
|
||||
Db.InsertMany(history);
|
||||
}
|
||||
|
||||
private void WithValidHistory()
|
||||
{
|
||||
var history = Builder<SearchHistory>.CreateListOfSize(10)
|
||||
.All()
|
||||
.With(h => h.SearchTime = DateTime.Now)
|
||||
.Build();
|
||||
|
||||
foreach (var searchHistory in history)
|
||||
{
|
||||
var items = Builder<SearchHistoryItem>.CreateListOfSize(10)
|
||||
.All()
|
||||
.With(c => c.Quality = QualityTypes.SDTV)
|
||||
.With(i => i.Id == searchHistory.Id)
|
||||
.Build();
|
||||
|
||||
Db.InsertMany(items);
|
||||
}
|
||||
|
||||
Db.InsertMany(history);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Add_should_add_history_and_history_items()
|
||||
{
|
||||
WithRealDb();
|
||||
|
||||
Mocker.Resolve<SearchHistoryProvider>().Add(_searchHistory);
|
||||
|
||||
Db.Fetch<SearchHistory>().Should().HaveCount(1);
|
||||
Db.Fetch<SearchHistoryItem>().Should().HaveCount(10);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Add_should_add_return_id()
|
||||
{
|
||||
WithRealDb();
|
||||
|
||||
var result = Mocker.Resolve<SearchHistoryProvider>().Add(_searchHistory);
|
||||
|
||||
result.Should().NotBe(0);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Delete_should_delete_history_and_history_items()
|
||||
{
|
||||
WithRealDb();
|
||||
|
||||
Mocker.Resolve<SearchHistoryProvider>().Add(_searchHistory);
|
||||
|
||||
var history = Db.Fetch<SearchHistory>();
|
||||
|
||||
Mocker.Resolve<SearchHistoryProvider>().Delete(history.First().Id);
|
||||
|
||||
Db.Fetch<SearchHistory>().Should().HaveCount(0);
|
||||
Db.Fetch<SearchHistoryItem>().Should().HaveCount(0);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void AllSearchHistory_should_return_all_items()
|
||||
{
|
||||
WithRealDb();
|
||||
Db.Insert(_series);
|
||||
Db.Insert(_episode);
|
||||
|
||||
Mocker.Resolve<SearchHistoryProvider>().Add(_searchHistory);
|
||||
|
||||
var result = Mocker.Resolve<SearchHistoryProvider>().AllSearchHistory();
|
||||
|
||||
result.Count.Should().Be(1);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void AllSearchHistory_should_have_series_title()
|
||||
{
|
||||
WithRealDb();
|
||||
Db.Insert(_series);
|
||||
Db.Insert(_episode);
|
||||
|
||||
Mocker.Resolve<SearchHistoryProvider>().Add(_searchHistory);
|
||||
|
||||
var result = Mocker.Resolve<SearchHistoryProvider>().AllSearchHistory();
|
||||
|
||||
result.Count.Should().Be(1);
|
||||
result.First().SeriesTitle.Should().Be(_series.Title);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void AllSearchHistory_should_have_episode_information()
|
||||
{
|
||||
WithRealDb();
|
||||
Db.Insert(_series);
|
||||
Db.Insert(_episode);
|
||||
|
||||
Mocker.Resolve<SearchHistoryProvider>().Add(_searchHistory);
|
||||
|
||||
var result = Mocker.Resolve<SearchHistoryProvider>().AllSearchHistory();
|
||||
|
||||
result.Count.Should().Be(1);
|
||||
result.First().EpisodeTitle.Should().Be(_episode.Title);
|
||||
result.First().EpisodeNumber.Should().Be(_episode.EpisodeNumber);
|
||||
result.First().SeasonNumber.Should().Be(_episode.SeasonNumber);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void AllSearchHistory_should_have_totalItems_count()
|
||||
{
|
||||
WithRealDb();
|
||||
Db.Insert(_series);
|
||||
Db.Insert(_episode);
|
||||
|
||||
Mocker.Resolve<SearchHistoryProvider>().Add(_searchHistory);
|
||||
|
||||
var result = Mocker.Resolve<SearchHistoryProvider>().AllSearchHistory();
|
||||
|
||||
result.Count.Should().Be(1);
|
||||
result.First().TotalItems.Should().Be(_searchHistory.SearchHistoryItems.Count);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void AllSearchHistory_should_have_successfulCount_equal_zero_when_all_failed()
|
||||
{
|
||||
WithRealDb();
|
||||
Db.Insert(_series);
|
||||
Db.Insert(_episode);
|
||||
|
||||
WithUnsuccessfulSearch();
|
||||
|
||||
Mocker.Resolve<SearchHistoryProvider>().Add(_searchHistory);
|
||||
|
||||
var result = Mocker.Resolve<SearchHistoryProvider>().AllSearchHistory();
|
||||
|
||||
result.Count.Should().Be(1);
|
||||
result.First().SuccessfulCount.Should().Be(0);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void AllSearchHistory_should_have_successfulCount_equal_one_when_one_was_downloaded()
|
||||
{
|
||||
WithRealDb();
|
||||
Db.Insert(_series);
|
||||
Db.Insert(_episode);
|
||||
|
||||
WithSuccessfulSearch();
|
||||
|
||||
Mocker.Resolve<SearchHistoryProvider>().Add(_searchHistory);
|
||||
|
||||
var result = Mocker.Resolve<SearchHistoryProvider>().AllSearchHistory();
|
||||
|
||||
result.Count.Should().Be(1);
|
||||
result.First().SuccessfulCount.Should().Be(1);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void GetSearchHistory_should_return_searchHistory_with_items()
|
||||
{
|
||||
WithRealDb();
|
||||
Db.Insert(_series);
|
||||
Db.Insert(_episode);
|
||||
|
||||
WithSuccessfulSearch();
|
||||
var id = Mocker.Resolve<SearchHistoryProvider>().Add(_searchHistory);
|
||||
|
||||
var result = Mocker.Resolve<SearchHistoryProvider>().GetSearchHistory(id);
|
||||
|
||||
result.SearchHistoryItems.Should().HaveCount(_searchHistory.SearchHistoryItems.Count);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void GetSearchHistory_should_have_episodeDetails()
|
||||
{
|
||||
WithRealDb();
|
||||
Db.Insert(_series);
|
||||
Db.Insert(_episode);
|
||||
|
||||
WithSuccessfulSearch();
|
||||
var id = Mocker.Resolve<SearchHistoryProvider>().Add(_searchHistory);
|
||||
|
||||
var result = Mocker.Resolve<SearchHistoryProvider>().GetSearchHistory(id);
|
||||
|
||||
result.EpisodeNumber.Should().Be(_episode.EpisodeNumber);
|
||||
result.SeasonNumber.Should().Be(_episode.SeasonNumber);
|
||||
result.EpisodeTitle.Should().Be(_episode.Title);
|
||||
result.AirDate.Should().Be(_episode.AirDate.Value);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void GetSearchHistory_should_not_have_episode_info_if_it_was_a_full_season_search()
|
||||
{
|
||||
WithRealDb();
|
||||
Db.Insert(_series);
|
||||
|
||||
_searchHistory.EpisodeId = 0;
|
||||
var id = Mocker.Resolve<SearchHistoryProvider>().Add(_searchHistory);
|
||||
|
||||
var result = Mocker.Resolve<SearchHistoryProvider>().GetSearchHistory(id);
|
||||
|
||||
result.EpisodeNumber.Should().Be(null);
|
||||
result.SeasonNumber.Should().Be(_searchHistory.SeasonNumber);
|
||||
result.EpisodeTitle.Should().Be(null);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ForceDownload_should_download_report()
|
||||
{
|
||||
WithRealDb();
|
||||
Db.Insert(_series);
|
||||
Db.Insert(_episode);
|
||||
|
||||
var reportTitle = String.Format("{0} - S{1:00}E{2:00}", _series.Title, _episode.SeasonNumber, _episode.EpisodeNumber);
|
||||
_searchHistory.SearchHistoryItems.First().ReportTitle = reportTitle;
|
||||
|
||||
Mocker.Resolve<SearchHistoryProvider>().Add(_searchHistory);
|
||||
var items = Db.Fetch<SearchHistoryItem>();
|
||||
|
||||
Mocker.Resolve<SearchHistoryProvider>().ForceDownload(items.First().Id);
|
||||
|
||||
Mocker.GetMock<DownloadProvider>().Verify(v => v.DownloadReport(It.IsAny<EpisodeParseResult>()), Times.Once());
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Cleanup_should_not_blowup_if_there_is_nothing_to_delete()
|
||||
{
|
||||
WithRealDb();
|
||||
|
||||
Mocker.Resolve<SearchHistoryProvider>().Cleanup();
|
||||
Db.Fetch<SearchHistory>().Should().HaveCount(0);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Cleanup_should_delete_searchHistory_older_than_1_week()
|
||||
{
|
||||
WithRealDb();
|
||||
WithExpiredHistory();
|
||||
|
||||
Mocker.Resolve<SearchHistoryProvider>().Cleanup();
|
||||
Db.Fetch<SearchHistory>().Should().HaveCount(0);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Cleanup_should_delete_searchHistoryItems_older_than_1_week()
|
||||
{
|
||||
WithRealDb();
|
||||
WithExpiredHistory();
|
||||
|
||||
Mocker.Resolve<SearchHistoryProvider>().Cleanup();
|
||||
Db.Fetch<SearchHistoryItem>().Should().HaveCount(0);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Cleanup_should_not_delete_searchHistory_younger_than_1_week()
|
||||
{
|
||||
WithRealDb();
|
||||
WithValidHistory();
|
||||
|
||||
Mocker.Resolve<SearchHistoryProvider>().Cleanup();
|
||||
Db.Fetch<SearchHistory>().Should().HaveCount(10);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Cleanup_should_not_delete_searchHistoryItems_younger_than_1_week()
|
||||
{
|
||||
WithRealDb();
|
||||
WithValidHistory();
|
||||
|
||||
Mocker.Resolve<SearchHistoryProvider>().Cleanup();
|
||||
Db.Fetch<SearchHistoryItem>().Should().HaveCount(100);
|
||||
}
|
||||
}
|
||||
}
|
@ -21,9 +21,9 @@ public class TestSearch : SearchBase
|
||||
|
||||
public TestSearch(ISeriesService seriesService, IEpisodeService episodeService, DownloadProvider downloadProvider,
|
||||
IIndexerService indexerService, SceneMappingProvider sceneMappingProvider,
|
||||
AllowedDownloadSpecification allowedDownloadSpecification, SearchHistoryProvider searchHistoryProvider,ISeriesRepository seriesRepository)
|
||||
AllowedDownloadSpecification allowedDownloadSpecification, ISeriesRepository seriesRepository)
|
||||
: base(seriesService, seriesRepository, episodeService, downloadProvider, indexerService, sceneMappingProvider,
|
||||
allowedDownloadSpecification, searchHistoryProvider)
|
||||
allowedDownloadSpecification)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -1,226 +0,0 @@
|
||||
// ReSharper disable RedundantUsingDirective
|
||||
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using FizzWare.NBuilder;
|
||||
using FluentAssertions;
|
||||
using NUnit.Framework;
|
||||
using NzbDrone.Core.Tv;
|
||||
using NzbDrone.Core.Test.Framework;
|
||||
using TvdbLib.Data;
|
||||
|
||||
namespace NzbDrone.Core.Test.TvTests.EpisodeProviderTests
|
||||
{
|
||||
[TestFixture]
|
||||
// ReSharper disable InconsistentNaming
|
||||
public class EpisodeProviderTest_DeleteInvalidEpisodes : SqlCeTest
|
||||
{
|
||||
[Test]
|
||||
public void Delete_None_Valid_TvDbEpisodeId()
|
||||
{
|
||||
//Setup
|
||||
const int seriesId = 71663;
|
||||
const int episodeCount = 10;
|
||||
|
||||
var tvDbSeries = Builder<TvdbEpisode>.CreateListOfSize(episodeCount).
|
||||
All()
|
||||
.With(l => l.Language = new TvdbLanguage(0, "eng", "a"))
|
||||
.Build();
|
||||
|
||||
|
||||
var fakeSeries = Builder<Series>.CreateNew()
|
||||
.With(c => c.OID = seriesId)
|
||||
.Build();
|
||||
|
||||
var fakeEpisode = Builder<Episode>.CreateNew()
|
||||
.With(e => e.SeriesId = seriesId)
|
||||
.With(e => e.TvDbEpisodeId = tvDbSeries.First().Id)
|
||||
.Build();
|
||||
|
||||
|
||||
|
||||
WithRealDb();
|
||||
|
||||
Db.Insert(fakeSeries);
|
||||
Db.Insert(fakeEpisode);
|
||||
|
||||
//Act
|
||||
Mocker.Resolve<EpisodeService>().DeleteEpisodesNotInTvdb(fakeSeries, tvDbSeries);
|
||||
|
||||
//Assert
|
||||
var result = Db.Fetch<Episode>();
|
||||
result.Should().HaveCount(1);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Delete_None_TvDbEpisodeId_is_zero()
|
||||
{
|
||||
//Setup
|
||||
const int seriesId = 71663;
|
||||
const int episodeCount = 10;
|
||||
|
||||
var tvDbSeries = Builder<TvdbEpisode>.CreateListOfSize(episodeCount).
|
||||
All()
|
||||
.With(l => l.Language = new TvdbLanguage(0, "eng", "a"))
|
||||
.Build();
|
||||
|
||||
var fakeSeries = Builder<Series>.CreateNew()
|
||||
.With(c => c.OID = seriesId)
|
||||
.Build();
|
||||
|
||||
var fakeEpisode = Builder<Episode>.CreateNew()
|
||||
.With(e => e.SeriesId = seriesId)
|
||||
.With(e => e.TvDbEpisodeId = 0)
|
||||
.Build();
|
||||
|
||||
|
||||
|
||||
WithRealDb();
|
||||
|
||||
Db.Insert(fakeSeries);
|
||||
Db.Insert(fakeEpisode);
|
||||
|
||||
//Act
|
||||
Mocker.Resolve<EpisodeService>().DeleteEpisodesNotInTvdb(fakeSeries, tvDbSeries);
|
||||
|
||||
//Assert
|
||||
var result = Db.Fetch<Episode>();
|
||||
result.Should().HaveCount(1);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Delete_None_TvDbEpisodeId_is_null()
|
||||
{
|
||||
//Setup
|
||||
const int seriesId = 71663;
|
||||
const int episodeCount = 10;
|
||||
|
||||
var tvDbSeries = Builder<TvdbEpisode>.CreateListOfSize(episodeCount).
|
||||
All()
|
||||
.With(l => l.Language = new TvdbLanguage(0, "eng", "a"))
|
||||
.Build();
|
||||
|
||||
var fakeSeries = Builder<Series>.CreateNew()
|
||||
.With(c => c.OID = seriesId)
|
||||
.Build();
|
||||
|
||||
var fakeEpisode = Builder<Episode>.CreateNew()
|
||||
.With(e => e.SeriesId = seriesId)
|
||||
.With(e => e.TvDbEpisodeId = 0)
|
||||
.Build();
|
||||
|
||||
WithRealDb();
|
||||
|
||||
Db.Insert(fakeSeries);
|
||||
Db.Insert(fakeEpisode);
|
||||
|
||||
//Act
|
||||
Mocker.Resolve<EpisodeService>().DeleteEpisodesNotInTvdb(fakeSeries, tvDbSeries);
|
||||
|
||||
//Assert
|
||||
var result = Db.Fetch<Episode>();
|
||||
result.Should().HaveCount(1);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Delete_TvDbId()
|
||||
{
|
||||
//Setup
|
||||
const int seriesId = 71663;
|
||||
const int episodeCount = 10;
|
||||
|
||||
var tvDbSeries = Builder<TvdbEpisode>.CreateListOfSize(episodeCount).
|
||||
All()
|
||||
.With(l => l.Language = new TvdbLanguage(0, "eng", "a"))
|
||||
.Build();
|
||||
|
||||
var fakeSeries = Builder<Series>.CreateNew()
|
||||
.With(c => c.OID = seriesId)
|
||||
.Build();
|
||||
|
||||
var fakeEpisode = Builder<Episode>.CreateNew()
|
||||
.With(e => e.SeriesId = seriesId)
|
||||
.With(e => e.SeasonNumber = 20)
|
||||
.With(e => e.EpisodeNumber = 20)
|
||||
.With(e => e.TvDbEpisodeId = 300)
|
||||
.Build();
|
||||
|
||||
|
||||
|
||||
WithRealDb();
|
||||
|
||||
Db.Insert(fakeSeries);
|
||||
Db.Insert(fakeEpisode);
|
||||
|
||||
//Act
|
||||
Mocker.Resolve<EpisodeService>().DeleteEpisodesNotInTvdb(fakeSeries, tvDbSeries);
|
||||
|
||||
//Assert
|
||||
var result = Db.Fetch<Episode>();
|
||||
result.Should().HaveCount(0);
|
||||
}
|
||||
|
||||
//Other series, by season/episode + by tvdbid
|
||||
[Test]
|
||||
public void Delete_TvDbId_multiple_series()
|
||||
{
|
||||
//Setup
|
||||
const int seriesId = 71663;
|
||||
const int episodeCount = 10;
|
||||
|
||||
var tvDbSeries = Builder<TvdbEpisode>.CreateListOfSize(episodeCount).
|
||||
All()
|
||||
.With(l => l.Language = new TvdbLanguage(0, "eng", "a"))
|
||||
.Build();
|
||||
|
||||
var fakeSeries = Builder<Series>.CreateNew()
|
||||
.With(c => c.OID = seriesId)
|
||||
.Build();
|
||||
|
||||
var fakeEpisode = Builder<Episode>.CreateNew()
|
||||
.With(e => e.SeriesId = seriesId)
|
||||
.With(e => e.SeasonNumber = 20)
|
||||
.With(e => e.EpisodeNumber = 20)
|
||||
.With(e => e.TvDbEpisodeId = 300)
|
||||
.Build();
|
||||
|
||||
//Other Series
|
||||
var otherFakeSeries = Builder<Series>.CreateNew()
|
||||
.With(c => c.OID = 12345)
|
||||
.Build();
|
||||
|
||||
var otherFakeEpisode = Builder<Episode>.CreateNew()
|
||||
.With(e => e.SeriesId = 12345)
|
||||
.With(e => e.SeasonNumber = 20)
|
||||
.With(e => e.EpisodeNumber = 20)
|
||||
.With(e => e.TvDbEpisodeId = 300)
|
||||
.Build();
|
||||
|
||||
|
||||
|
||||
WithRealDb();
|
||||
|
||||
Db.Insert(fakeSeries);
|
||||
Db.Insert(fakeEpisode);
|
||||
Db.Insert(otherFakeSeries);
|
||||
Db.Insert(otherFakeEpisode);
|
||||
|
||||
//Act
|
||||
Mocker.Resolve<EpisodeService>().DeleteEpisodesNotInTvdb(fakeSeries, tvDbSeries);
|
||||
|
||||
//Assert
|
||||
var result = Db.Fetch<Episode>();
|
||||
result.Should().HaveCount(1);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_not_do_anything_if_episode_list_is_empty()
|
||||
{
|
||||
WithStrictMocker();
|
||||
|
||||
var fakeSeries = Builder<Series>.CreateNew().Build();
|
||||
|
||||
Mocker.Resolve<EpisodeService>().DeleteEpisodesNotInTvdb(fakeSeries, new List<TvdbEpisode>());
|
||||
}
|
||||
}
|
||||
}
|
@ -1,7 +1,5 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Newtonsoft.Json;
|
||||
using NzbDrone.Core.Model.Sabnzbd;
|
||||
|
||||
|
@ -1,7 +1,5 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace NzbDrone.Core.Helpers
|
||||
|
@ -1,7 +1,6 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace NzbDrone.Core.Helpers
|
||||
{
|
||||
|
@ -1,43 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using NLog;
|
||||
using NzbDrone.Core.Helpers;
|
||||
using NzbDrone.Core.Model.Notification;
|
||||
using NzbDrone.Core.Providers;
|
||||
using NzbDrone.Core.Providers.Core;
|
||||
using NzbDrone.Core.Repository;
|
||||
|
||||
namespace NzbDrone.Core.Jobs
|
||||
{
|
||||
public class SearchHistoryCleanupJob : IJob
|
||||
{
|
||||
private readonly SearchHistoryProvider _searchHistoryProvider;
|
||||
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
|
||||
|
||||
public SearchHistoryCleanupJob(SearchHistoryProvider searchHistoryProvider)
|
||||
{
|
||||
_searchHistoryProvider = searchHistoryProvider;
|
||||
}
|
||||
|
||||
public SearchHistoryCleanupJob()
|
||||
{
|
||||
}
|
||||
|
||||
public string Name
|
||||
{
|
||||
get { return "Search History Cleanup"; }
|
||||
}
|
||||
|
||||
public TimeSpan DefaultInterval
|
||||
{
|
||||
get { return TimeSpan.FromHours(24); }
|
||||
}
|
||||
|
||||
public virtual void Start(ProgressNotification notification, dynamic options)
|
||||
{
|
||||
Logger.Info("Running search history cleanup.");
|
||||
_searchHistoryProvider.Cleanup();
|
||||
}
|
||||
}
|
||||
}
|
@ -284,7 +284,6 @@
|
||||
<Compile Include="Jobs\EmptyRecycleBinJob.cs" />
|
||||
<Compile Include="Jobs\RefreshEpsiodeMetadata.cs" />
|
||||
<Compile Include="Jobs\PastWeekBacklogSearchJob.cs" />
|
||||
<Compile Include="Jobs\SearchHistoryCleanupJob.cs" />
|
||||
<Compile Include="Lifecycle\IInitializable.cs" />
|
||||
<Compile Include="Model\DownloadClientType.cs" />
|
||||
<Compile Include="Instrumentation\LogService.cs" />
|
||||
@ -358,7 +357,6 @@
|
||||
<Compile Include="Providers\Metadata\MetadataBase.cs" />
|
||||
<Compile Include="Providers\Metadata\Xbmc.cs" />
|
||||
<Compile Include="Providers\RecycleBinProvider.cs" />
|
||||
<Compile Include="Providers\SearchHistoryProvider.cs" />
|
||||
<Compile Include="Providers\Search\DailyEpisodeSearch.cs" />
|
||||
<Compile Include="Providers\Search\PartialSeasonSearch.cs" />
|
||||
<Compile Include="Providers\Search\EpisodeSearch.cs" />
|
||||
@ -387,7 +385,6 @@
|
||||
<Compile Include="Jobs\IJob.cs" />
|
||||
<Compile Include="Jobs\RssSyncJob.cs" />
|
||||
<Compile Include="Jobs\UpdateInfoJob.cs" />
|
||||
<Compile Include="Providers\StatsProvider.cs" />
|
||||
<Compile Include="Providers\TvRageMappingProvider.cs" />
|
||||
<Compile Include="Providers\TvRageProvider.cs" />
|
||||
<Compile Include="Providers\XemCommunicationProvider.cs" />
|
||||
|
@ -2,9 +2,7 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using NLog;
|
||||
using NzbDrone.Core.Datastore;
|
||||
using NzbDrone.Core.Tv;
|
||||
using NzbDrone.Core.Model;
|
||||
using NzbDrone.Core.Providers.Metadata;
|
||||
using NzbDrone.Core.Repository;
|
||||
using PetaPoco;
|
||||
|
@ -22,9 +22,9 @@ public class DailyEpisodeSearch : SearchBase
|
||||
|
||||
public DailyEpisodeSearch(ISeriesService seriesService, IEpisodeService episodeService, DownloadProvider downloadProvider, IIndexerService indexerService,
|
||||
SceneMappingProvider sceneMappingProvider, AllowedDownloadSpecification allowedDownloadSpecification,
|
||||
SearchHistoryProvider searchHistoryProvider, ISeriesRepository seriesRepository)
|
||||
ISeriesRepository seriesRepository)
|
||||
: base(seriesService, seriesRepository, episodeService, downloadProvider, indexerService, sceneMappingProvider,
|
||||
allowedDownloadSpecification, searchHistoryProvider)
|
||||
allowedDownloadSpecification)
|
||||
{
|
||||
_seriesRepository = seriesRepository;
|
||||
}
|
||||
|
@ -21,9 +21,9 @@ public class EpisodeSearch : SearchBase
|
||||
|
||||
public EpisodeSearch(ISeriesService seriesService, IEpisodeService episodeService, DownloadProvider downloadProvider, IIndexerService indexerService,
|
||||
SceneMappingProvider sceneMappingProvider, AllowedDownloadSpecification allowedDownloadSpecification,
|
||||
SearchHistoryProvider searchHistoryProvider, ISeriesRepository seriesRepository)
|
||||
ISeriesRepository seriesRepository)
|
||||
: base(seriesService,seriesRepository, episodeService, downloadProvider, indexerService, sceneMappingProvider,
|
||||
allowedDownloadSpecification, searchHistoryProvider)
|
||||
allowedDownloadSpecification)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -21,9 +21,9 @@ public class PartialSeasonSearch : SearchBase
|
||||
|
||||
public PartialSeasonSearch(ISeriesService seriesService, IEpisodeService episodeService, DownloadProvider downloadProvider, IIndexerService indexerService,
|
||||
SceneMappingProvider sceneMappingProvider, AllowedDownloadSpecification allowedDownloadSpecification,
|
||||
SearchHistoryProvider searchHistoryProvider,ISeriesRepository seriesRepository)
|
||||
ISeriesRepository seriesRepository)
|
||||
: base(seriesService, seriesRepository, episodeService, downloadProvider, indexerService, sceneMappingProvider,
|
||||
allowedDownloadSpecification, searchHistoryProvider)
|
||||
allowedDownloadSpecification)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -23,14 +23,12 @@ public abstract class SearchBase
|
||||
protected readonly IIndexerService _indexerService;
|
||||
protected readonly SceneMappingProvider _sceneMappingProvider;
|
||||
protected readonly AllowedDownloadSpecification _allowedDownloadSpecification;
|
||||
protected readonly SearchHistoryProvider _searchHistoryProvider;
|
||||
|
||||
private static readonly Logger logger = LogManager.GetCurrentClassLogger();
|
||||
|
||||
protected SearchBase(ISeriesService seriesService,ISeriesRepository seriesRepository, IEpisodeService episodeService, DownloadProvider downloadProvider,
|
||||
IIndexerService indexerService, SceneMappingProvider sceneMappingProvider,
|
||||
AllowedDownloadSpecification allowedDownloadSpecification,
|
||||
SearchHistoryProvider searchHistoryProvider)
|
||||
AllowedDownloadSpecification allowedDownloadSpecification)
|
||||
{
|
||||
_seriesService = seriesService;
|
||||
_seriesRepository = seriesRepository;
|
||||
@ -39,7 +37,6 @@ protected SearchBase(ISeriesService seriesService,ISeriesRepository seriesReposi
|
||||
_indexerService = indexerService;
|
||||
_sceneMappingProvider = sceneMappingProvider;
|
||||
_allowedDownloadSpecification = allowedDownloadSpecification;
|
||||
_searchHistoryProvider = searchHistoryProvider;
|
||||
}
|
||||
|
||||
protected SearchBase()
|
||||
@ -71,7 +68,6 @@ public virtual List<Int32> Search(Series series, dynamic options, ProgressNotifi
|
||||
notification.CurrentMessage = "Processing search results";
|
||||
|
||||
ProcessReports(series, options, reports, searchResult, notification);
|
||||
_searchHistoryProvider.Add(searchResult);
|
||||
|
||||
if(searchResult.Successes.Any())
|
||||
return searchResult.Successes;
|
||||
|
@ -1,138 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using NLog;
|
||||
using NzbDrone.Core.Download;
|
||||
using NzbDrone.Core.Tv;
|
||||
using NzbDrone.Core.Repository;
|
||||
using NzbDrone.Core.Repository.Search;
|
||||
using PetaPoco;
|
||||
|
||||
namespace NzbDrone.Core.Providers
|
||||
{
|
||||
public class SearchHistoryProvider
|
||||
{
|
||||
private readonly IDatabase _database;
|
||||
private readonly ISeriesService _seriesService;
|
||||
private readonly DownloadProvider _downloadProvider;
|
||||
private readonly IEpisodeService _episodeService;
|
||||
private readonly ISeriesRepository _seriesRepository;
|
||||
|
||||
private static readonly Logger logger = LogManager.GetCurrentClassLogger();
|
||||
|
||||
public SearchHistoryProvider(IDatabase database, ISeriesService seriesService,
|
||||
DownloadProvider downloadProvider, IEpisodeService episodeService, ISeriesRepository seriesRepository)
|
||||
{
|
||||
_database = database;
|
||||
_seriesService = seriesService;
|
||||
_downloadProvider = downloadProvider;
|
||||
_episodeService = episodeService;
|
||||
_seriesRepository = seriesRepository;
|
||||
}
|
||||
|
||||
public SearchHistoryProvider()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public virtual int Add(SearchHistory searchHistory)
|
||||
{
|
||||
logger.Trace("Adding new search result");
|
||||
searchHistory.SuccessfulDownload = searchHistory.SearchHistoryItems.Any(s => s.Success);
|
||||
var id = Convert.ToInt32(_database.Insert(searchHistory));
|
||||
|
||||
searchHistory.SearchHistoryItems.ForEach(s => s.SearchHistoryId = id);
|
||||
logger.Trace("Adding search result items");
|
||||
_database.InsertMany(searchHistory.SearchHistoryItems);
|
||||
|
||||
return id;
|
||||
}
|
||||
|
||||
public virtual void Delete(int id)
|
||||
{
|
||||
logger.Trace("Deleting search result items attached to: {0}", id);
|
||||
_database.Execute("DELETE FROM SearchHistoryItems WHERE SearchHistoryId = @0", id);
|
||||
|
||||
logger.Trace("Deleting search result: {0}", id);
|
||||
_database.Delete<SearchHistory>(id);
|
||||
}
|
||||
|
||||
public virtual List<SearchHistory> AllSearchHistory()
|
||||
{
|
||||
var sql = @"SELECT SearchHistory.Id, SearchHistory.SeriesId, SearchHistory.SeasonNumber,
|
||||
SearchHistory.EpisodeId, SearchHistory.SearchTime,
|
||||
Series.Title as SeriesTitle, Series.IsDaily,
|
||||
Episodes.EpisodeNumber, Episodes.SeasonNumber, Episodes.Title as EpisodeTitle,
|
||||
Episodes.AirDate,
|
||||
Count(SearchHistoryItems.Id) as TotalItems,
|
||||
SUM(CASE WHEN SearchHistoryItems.Success = 1 THEN 1 ELSE 0 END) as SuccessfulCount
|
||||
FROM SearchHistory
|
||||
INNER JOIN Series
|
||||
ON Series.SeriesId = SearchHistory.SeriesId
|
||||
LEFT JOIN Episodes
|
||||
ON Episodes.EpisodeId = SearchHistory.EpisodeId
|
||||
LEFT JOIN SearchHistoryItems
|
||||
ON SearchHistoryItems.SearchHistoryId = SearchHistory.Id
|
||||
GROUP BY SearchHistory.Id, SearchHistory.SeriesId, SearchHistory.SeasonNumber,
|
||||
SearchHistory.EpisodeId, SearchHistory.SearchTime,
|
||||
Series.Title, Series.IsDaily,
|
||||
Episodes.EpisodeNumber, Episodes.SeasonNumber, Episodes.Title,
|
||||
Episodes.AirDate";
|
||||
|
||||
return _database.Fetch<SearchHistory>(sql);
|
||||
}
|
||||
|
||||
public virtual SearchHistory GetSearchHistory(int id)
|
||||
{
|
||||
var sql = @"SELECT SearchHistory.Id, SearchHistory.SeriesId, SearchHistory.SeasonNumber,
|
||||
SearchHistory.EpisodeId, SearchHistory.SearchTime,
|
||||
Series.Title as SeriesTitle, Series.IsDaily,
|
||||
Episodes.EpisodeNumber, Episodes.SeasonNumber, Episodes.Title as EpisodeTitle,
|
||||
Episodes.AirDate
|
||||
FROM SearchHistory
|
||||
INNER JOIN Series
|
||||
ON Series.SeriesId = SearchHistory.SeriesId
|
||||
LEFT JOIN Episodes
|
||||
ON Episodes.EpisodeId = SearchHistory.EpisodeId
|
||||
WHERE SearchHistory.Id = @0";
|
||||
|
||||
var result = _database.Single<SearchHistory>(sql, id);
|
||||
result.SearchHistoryItems = _database.Fetch<SearchHistoryItem>("WHERE SearchHistoryId = @0", id);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public virtual void ForceDownload(int itemId)
|
||||
{
|
||||
var item = _database.Single<SearchHistoryItem>(itemId);
|
||||
logger.Info("Starting Force Download of: {0}", item.ReportTitle);
|
||||
var searchResult = _database.Single<SearchHistory>(item.SearchHistoryId);
|
||||
var series = _seriesRepository.Get(searchResult.SeriesId);
|
||||
|
||||
var parseResult = Parser.ParseTitle(item.ReportTitle);
|
||||
parseResult.NzbUrl = item.NzbUrl;
|
||||
parseResult.Series = series;
|
||||
parseResult.Indexer = item.Indexer;
|
||||
parseResult.Episodes = _episodeService.GetEpisodesByParseResult(parseResult);
|
||||
parseResult.SceneSource = true;
|
||||
|
||||
logger.Info("Forcing Download of: {0}", item.ReportTitle);
|
||||
_downloadProvider.DownloadReport(parseResult);
|
||||
}
|
||||
|
||||
public virtual void Cleanup()
|
||||
{
|
||||
var ids = _database.Fetch<int>("SELECT Id FROM SearchHistory WHERE SearchTime < @0", DateTime.Now.AddDays(-7));
|
||||
|
||||
if (ids.Any())
|
||||
{
|
||||
logger.Trace("Deleting old search items");
|
||||
_database.Execute("DELETE FROM SearchHistoryItems WHERE SearchHistoryId IN (@0)", ids);
|
||||
|
||||
logger.Trace("Deleting old search results");
|
||||
_database.Execute("DELETE FROM SearchHistory WHERE Id IN (@0)", ids);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,41 +0,0 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using NzbDrone.Core.Tv;
|
||||
using NzbDrone.Core.Model;
|
||||
using PetaPoco;
|
||||
|
||||
namespace NzbDrone.Core.Providers
|
||||
{
|
||||
public class StatsProvider
|
||||
{
|
||||
private readonly IDatabase _database;
|
||||
|
||||
public StatsProvider(IDatabase database)
|
||||
{
|
||||
_database = database;
|
||||
}
|
||||
|
||||
public StatsProvider()
|
||||
{
|
||||
}
|
||||
|
||||
public virtual StatsModel GetStats()
|
||||
{
|
||||
var series = _database.Fetch<Series>();
|
||||
var episodes = _database.Fetch<Episode>();
|
||||
var history = _database.Fetch<History.History>("WHERE Date >= @0", DateTime.Today.AddDays(-30));
|
||||
|
||||
var stats = new StatsModel();
|
||||
stats.SeriesTotal = series.Count;
|
||||
stats.SeriesContinuing = series.Count(s => s.Status == "Continuing");
|
||||
stats.SeriesEnded = series.Count(s => s.Status == "Ended");
|
||||
stats.EpisodesTotal = episodes.Count;
|
||||
stats.EpisodesOnDisk = episodes.Count(e => e.EpisodeFileId > 0);
|
||||
stats.EpisodesMissing = episodes.Count(e => e.Ignored == false && e.EpisodeFileId == 0);
|
||||
stats.DownloadedLastMonth = history.Count;
|
||||
stats.DownloadLastWeek = history.Count(h => h.Date >= DateTime.Today.AddDays(-7));
|
||||
|
||||
return stats;
|
||||
}
|
||||
}
|
||||
}
|
@ -1,7 +1,9 @@
|
||||
using System.Collections.Generic;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using NLog;
|
||||
using NzbDrone.Common;
|
||||
using NzbDrone.Core.Tv;
|
||||
using NzbDrone.Core.Tvdb;
|
||||
using TvdbLib;
|
||||
using TvdbLib.Cache;
|
||||
@ -61,10 +63,40 @@ public virtual TvdbSeries GetSeries(int id, bool loadEpisodes, bool loadActors =
|
||||
.GroupBy(e => e.SeriesId.ToString("000000") + e.SeasonNumber.ToString("000") + e.EpisodeNumber.ToString("000"))
|
||||
.Select(e => e.First());
|
||||
|
||||
result.Episodes = episodes.ToList();
|
||||
result.Episodes = episodes.Where(episode => !string.IsNullOrWhiteSpace(episode.EpisodeName) || (episode.FirstAired < DateTime.Now.AddDays(2) && episode.FirstAired.Year > 1900)).ToList();
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
public virtual IList<Episode> GetEpisodes(int tvDbSeriesId)
|
||||
{
|
||||
var series = GetSeries(tvDbSeriesId, true);
|
||||
|
||||
var episodes = new List<Episode>();
|
||||
|
||||
foreach (var tvDbEpisode in series.Episodes)
|
||||
{
|
||||
var episode = new Episode();
|
||||
|
||||
episode.TvDbEpisodeId = tvDbEpisode.Id;
|
||||
episode.EpisodeNumber = tvDbEpisode.EpisodeNumber;
|
||||
episode.SeasonNumber = tvDbEpisode.SeasonNumber;
|
||||
episode.AbsoluteEpisodeNumber = tvDbEpisode.AbsoluteNumber;
|
||||
episode.Title = tvDbEpisode.EpisodeName;
|
||||
episode.Overview = tvDbEpisode.Overview;
|
||||
|
||||
if (tvDbEpisode.FirstAired.Year > 1900)
|
||||
{
|
||||
episode.AirDate = tvDbEpisode.FirstAired.Date;
|
||||
}
|
||||
else
|
||||
{
|
||||
episode.AirDate = null;
|
||||
}
|
||||
}
|
||||
|
||||
return episodes;
|
||||
}
|
||||
}
|
||||
}
|
@ -2,8 +2,6 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using NzbDrone.Core.Tv;
|
||||
using NzbDrone.Core.Model;
|
||||
using NzbDrone.Core.Repository;
|
||||
using PetaPoco;
|
||||
|
||||
namespace NzbDrone.Core.Providers
|
||||
|
@ -28,7 +28,6 @@ public interface IEpisodeService
|
||||
IList<int> GetEpisodeNumbersBySeason(int seriesId, int seasonNumber);
|
||||
void SetEpisodeIgnore(int episodeId, bool isIgnored);
|
||||
bool IsFirstOrLastEpisodeOfSeason(int seriesId, int seasonNumber, int episodeNumber);
|
||||
void DeleteEpisodesNotInTvdb(Series series, IList<TvdbEpisode> tvdbEpisodes);
|
||||
void SetPostDownloadStatus(List<int> episodeIds, PostDownloadStatusType postDownloadStatus);
|
||||
void UpdateEpisodes(List<Episode> episodes);
|
||||
Episode GetEpisodeBySceneNumbering(int seriesId, int seasonNumber, int episodeNumber);
|
||||
@ -181,11 +180,8 @@ public virtual void RefreshEpisodeInfo(Series series)
|
||||
var successCount = 0;
|
||||
var failCount = 0;
|
||||
|
||||
var tvdbEpisodes = _tvDbProvider.GetSeries(series.OID, true)
|
||||
.Episodes
|
||||
.Where(episode => !string.IsNullOrWhiteSpace(episode.EpisodeName) ||
|
||||
(episode.FirstAired < DateTime.Now.AddDays(2) && episode.FirstAired.Year > 1900))
|
||||
.ToList();
|
||||
var tvdbEpisodes = _tvDbProvider.GetEpisodes(series.OID);
|
||||
|
||||
|
||||
var seriesEpisodes = GetEpisodeBySeries(series.OID);
|
||||
var updateList = new List<Episode>();
|
||||
@ -198,7 +194,7 @@ public virtual void RefreshEpisodeInfo(Series series)
|
||||
logger.Trace("Updating info for [{0}] - S{1:00}E{2:00}", series.Title, episode.SeasonNumber, episode.EpisodeNumber);
|
||||
|
||||
//first check using tvdbId, this should cover cases when and episode number in a season is changed
|
||||
var episodeToUpdate = seriesEpisodes.SingleOrDefault(e => e.TvDbEpisodeId == episode.Id);
|
||||
var episodeToUpdate = seriesEpisodes.SingleOrDefault(e => e.TvDbEpisodeId == episode.TvDbEpisodeId);
|
||||
|
||||
//not found, try using season/episode number
|
||||
if (episodeToUpdate == null)
|
||||
@ -230,30 +226,20 @@ public virtual void RefreshEpisodeInfo(Series series)
|
||||
episodeToUpdate.SeasonNumber != episode.SeasonNumber) &&
|
||||
episodeToUpdate.EpisodeFileId > 0)
|
||||
{
|
||||
logger.Info("Unlinking episode file because TheTVDB changed the epsiode number...");
|
||||
logger.Info("Unlinking episode file because TheTVDB changed the episode number...");
|
||||
episodeToUpdate.EpisodeFile = null;
|
||||
}
|
||||
|
||||
episodeToUpdate.SeriesId = series.OID;
|
||||
episodeToUpdate.Series = series;
|
||||
episodeToUpdate.TvDbEpisodeId = episode.Id;
|
||||
episodeToUpdate.TvDbEpisodeId = episode.TvDbEpisodeId;
|
||||
episodeToUpdate.EpisodeNumber = episode.EpisodeNumber;
|
||||
episodeToUpdate.SeasonNumber = episode.SeasonNumber;
|
||||
episodeToUpdate.AbsoluteEpisodeNumber = episode.AbsoluteNumber;
|
||||
episodeToUpdate.Title = episode.EpisodeName;
|
||||
episodeToUpdate.AbsoluteEpisodeNumber = episode.AbsoluteEpisodeNumber;
|
||||
episodeToUpdate.Title = episode.Title;
|
||||
|
||||
episodeToUpdate.Overview = episode.Overview.Truncate(3500);
|
||||
|
||||
if(episode.FirstAired.Year > 1900)
|
||||
{
|
||||
episodeToUpdate.AirDate = episode.FirstAired.Date;
|
||||
|
||||
if (!String.IsNullOrWhiteSpace(series.AirTime))
|
||||
episodeToUpdate.AirDate = episodeToUpdate.AirDate.Value.Add(Convert.ToDateTime(series.AirTime).TimeOfDay)
|
||||
.AddHours(series.UtcOffset * -1);
|
||||
}
|
||||
else
|
||||
episodeToUpdate.AirDate = null;
|
||||
episodeToUpdate.Overview = episode.Overview;
|
||||
episodeToUpdate.AirDate = episode.AirDate;
|
||||
|
||||
successCount++;
|
||||
}
|
||||
@ -314,19 +300,12 @@ public virtual bool IsFirstOrLastEpisodeOfSeason(int seriesId, int seasonNumber,
|
||||
return false;
|
||||
}
|
||||
|
||||
public virtual void DeleteEpisodesNotInTvdb(Series series, IList<TvdbEpisode> tvdbEpisodes)
|
||||
private void DeleteEpisodesNotInTvdb(Series series, IEnumerable<Episode> tvdbEpisodes)
|
||||
{
|
||||
logger.Trace("Starting deletion of episodes that no longer exist in TVDB: {0}", series.Title.WithDefault(series.OID));
|
||||
|
||||
if (!tvdbEpisodes.Any()) return;
|
||||
|
||||
var seriesEpisodeIds = _episodeRepository.GetEpisodes(series.OID).Select(c => c.TvDbEpisodeId);
|
||||
|
||||
var toBeDeleted = seriesEpisodeIds.Except(tvdbEpisodes.Select(e => e.Id));
|
||||
|
||||
foreach (var id in toBeDeleted)
|
||||
foreach (var episode in tvdbEpisodes)
|
||||
{
|
||||
_episodeRepository.Delete(id);
|
||||
_episodeRepository.Delete(episode.OID);
|
||||
}
|
||||
|
||||
logger.Trace("Deleted episodes that no longer exist in TVDB for {0}", series.OID);
|
||||
|
Loading…
Reference in New Issue
Block a user