mirror of https://github.com/Sonarr/Sonarr
cleaned up history lookup.
This commit is contained in:
parent
cd6f0fc55c
commit
b9fac94eca
|
@ -67,9 +67,9 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
|||
firstQuality = new QualityModel(Quality.Bluray1080p, true);
|
||||
secondQuality = new QualityModel(Quality.Bluray1080p, true);
|
||||
|
||||
Mocker.GetMock<IHistoryService>().Setup(c => c.GetBestQualityInHistory(fakeSeries.Id, 12, 3)).Returns(firstQuality);
|
||||
Mocker.GetMock<IHistoryService>().Setup(c => c.GetBestQualityInHistory(fakeSeries.Id, 12, 4)).Returns(secondQuality);
|
||||
Mocker.GetMock<IHistoryService>().Setup(c => c.GetBestQualityInHistory(fakeSeries.Id, 12, 5)).Returns<QualityModel>(null);
|
||||
Mocker.GetMock<IHistoryService>().Setup(c => c.GetBestQualityInHistory(1)).Returns(firstQuality);
|
||||
Mocker.GetMock<IHistoryService>().Setup(c => c.GetBestQualityInHistory(2)).Returns(secondQuality);
|
||||
Mocker.GetMock<IHistoryService>().Setup(c => c.GetBestQualityInHistory(3)).Returns<QualityModel>(null);
|
||||
}
|
||||
|
||||
private void WithFirstReportUpgradable()
|
||||
|
@ -125,7 +125,7 @@ namespace NzbDrone.Core.Test.DecisionEngineTests
|
|||
parseResultSingle.Quality = new QualityModel(Quality.WEBDL1080p, false);
|
||||
firstQuality = new QualityModel(Quality.WEBDL1080p, false);
|
||||
|
||||
Mocker.GetMock<IHistoryService>().Setup(c => c.GetBestQualityInHistory(fakeSeries.Id, 12, 3)).Returns(firstQuality);
|
||||
Mocker.GetMock<IHistoryService>().Setup(c => c.GetBestQualityInHistory(1)).Returns(firstQuality);
|
||||
|
||||
_upgradeHistory.IsSatisfiedBy(parseResultSingle).Should().BeFalse();
|
||||
}
|
||||
|
|
|
@ -37,7 +37,7 @@ namespace NzbDrone.Core.Test.HistoryTests
|
|||
[Test]
|
||||
public void GetBestQualityInHistory_no_result()
|
||||
{
|
||||
Subject.GetBestQualityInHistory(12, 12, 12).Should().Be(null);
|
||||
Subject.GetBestQualityInHistory(12).Should().Be(null);
|
||||
}
|
||||
|
||||
[Test]
|
||||
|
@ -54,12 +54,12 @@ namespace NzbDrone.Core.Test.HistoryTests
|
|||
var history = Builder<History.History>.CreateNew()
|
||||
.With(c => c.Id = 0)
|
||||
.With(h => h.Quality = new QualityModel(Quality.Bluray720p, true))
|
||||
.With(h => h.Episode = episode)
|
||||
.With(h => h.EpisodeId = episode.Id)
|
||||
.Build();
|
||||
|
||||
Db.Insert(history);
|
||||
|
||||
var result = Subject.GetBestQualityInHistory(episode.SeriesId, episode.SeasonNumber, episode.EpisodeNumber);
|
||||
var result = Subject.GetBestQualityInHistory(episode.Id);
|
||||
|
||||
result.Should().NotBeNull();
|
||||
result.Quality.Should().Be(Quality.Bluray720p);
|
||||
|
@ -81,7 +81,7 @@ namespace NzbDrone.Core.Test.HistoryTests
|
|||
.CreateListOfSize(5)
|
||||
.All()
|
||||
.With(c => c.Id = 0)
|
||||
.With(h => h.Episode = episode)
|
||||
.With(h => h.EpisodeId = episode.Id)
|
||||
.TheFirst(1)
|
||||
.With(h => h.Quality = new QualityModel(Quality.DVD, true))
|
||||
.TheNext(1)
|
||||
|
@ -96,7 +96,7 @@ namespace NzbDrone.Core.Test.HistoryTests
|
|||
|
||||
Db.InsertMany(history);
|
||||
|
||||
var result = Subject.GetBestQualityInHistory(episode.SeriesId, episode.SeasonNumber, episode.EpisodeNumber);
|
||||
var result = Subject.GetBestQualityInHistory(episode.Id);
|
||||
|
||||
result.Should().NotBeNull();
|
||||
result.Quality.Should().Be(Quality.Bluray720p);
|
||||
|
|
|
@ -29,6 +29,7 @@ namespace NzbDrone.Core.Datastore
|
|||
bool HasItems();
|
||||
void DeleteMany(IEnumerable<int> ids);
|
||||
void UpdateFields<TKey>(TModel model, Expression<Func<TModel, TKey>> onlyFields);
|
||||
List<TModel> Where(SqlExpressionVisitor<TModel> expression);
|
||||
}
|
||||
|
||||
public class BasicRepository<TModel> : IBasicRepository<TModel> where TModel : ModelBase, new()
|
||||
|
@ -93,6 +94,11 @@ namespace NzbDrone.Core.Datastore
|
|||
return _database.Select(predicate);
|
||||
}
|
||||
|
||||
public List<TModel> Where(SqlExpressionVisitor<TModel> expression)
|
||||
{
|
||||
return _database.Select(expression);
|
||||
}
|
||||
|
||||
public TModel Insert(TModel model)
|
||||
{
|
||||
if (model.Id != 0)
|
||||
|
|
|
@ -29,7 +29,7 @@ namespace NzbDrone.Core.DecisionEngine.Specifications
|
|||
{
|
||||
foreach (var episode in subject.Episodes)
|
||||
{
|
||||
var bestQualityInHistory = _historyService.GetBestQualityInHistory(subject.Series.Id, episode.SeasonNumber, episode.EpisodeNumber);
|
||||
var bestQualityInHistory = _historyService.GetBestQualityInHistory(episode.Id);
|
||||
if (bestQualityInHistory != null)
|
||||
{
|
||||
_logger.Trace("Comparing history quality with report. History is {0}", bestQualityInHistory);
|
||||
|
|
|
@ -7,6 +7,7 @@ namespace NzbDrone.Core.History
|
|||
{
|
||||
public class History : ModelBase
|
||||
{
|
||||
public int EpisodeId { get; set; }
|
||||
public string NzbTitle { get; set; }
|
||||
public QualityModel Quality { get; set; }
|
||||
public DateTime Date { get; set; }
|
||||
|
@ -14,6 +15,5 @@ namespace NzbDrone.Core.History
|
|||
public string NzbInfoUrl { get; set; }
|
||||
public string ReleaseGroup { get; set; }
|
||||
|
||||
public Episode Episode { get; set; }
|
||||
}
|
||||
}
|
|
@ -9,7 +9,7 @@ namespace NzbDrone.Core.History
|
|||
public interface IHistoryRepository : IBasicRepository<History>
|
||||
{
|
||||
void Trim();
|
||||
QualityModel GetBestQualityInHistory(int seriesId, int seasonNumber, int episodeNumber);
|
||||
QualityModel GetBestQualityInHistory(int episodeId);
|
||||
}
|
||||
|
||||
public class HistoryRepository : BasicRepository<History>, IHistoryRepository
|
||||
|
@ -26,9 +26,9 @@ namespace NzbDrone.Core.History
|
|||
}
|
||||
|
||||
|
||||
public QualityModel GetBestQualityInHistory(int seriesId, int seasonNumber, int episodeNumber)
|
||||
public QualityModel GetBestQualityInHistory(int episodeId)
|
||||
{
|
||||
var history = Where(c => c.Episode.Series.Id == seriesId && c.Episode.SeasonNumber == seasonNumber && c.Episode.EpisodeNumber == episodeNumber)
|
||||
var history = Where(c => c.EpisodeId == episodeId)
|
||||
.OrderByDescending(c => c.Quality).FirstOrDefault();
|
||||
|
||||
if (history != null)
|
||||
|
|
|
@ -13,7 +13,7 @@ namespace NzbDrone.Core.History
|
|||
List<History> All();
|
||||
void Purge();
|
||||
void Trim();
|
||||
QualityModel GetBestQualityInHistory(int seriesId, int seasonNumber, int episodeNumber);
|
||||
QualityModel GetBestQualityInHistory(int episodeId);
|
||||
}
|
||||
|
||||
public class HistoryService : IHistoryService, IHandle<EpisodeGrabbedEvent>
|
||||
|
@ -43,9 +43,9 @@ namespace NzbDrone.Core.History
|
|||
_historyRepository.Trim();
|
||||
}
|
||||
|
||||
public virtual QualityModel GetBestQualityInHistory(int seriesId, int seasonNumber, int episodeNumber)
|
||||
public virtual QualityModel GetBestQualityInHistory(int episodeId)
|
||||
{
|
||||
return _historyRepository.GetBestQualityInHistory(seriesId, seasonNumber, episodeNumber);
|
||||
return _historyRepository.GetBestQualityInHistory(episodeId);
|
||||
}
|
||||
|
||||
public void Handle(EpisodeGrabbedEvent message)
|
||||
|
@ -58,7 +58,7 @@ namespace NzbDrone.Core.History
|
|||
Indexer = message.ParseResult.Indexer,
|
||||
Quality = message.ParseResult.Quality,
|
||||
NzbTitle = message.ParseResult.OriginalString,
|
||||
Episode = episode,
|
||||
EpisodeId = episode.Id,
|
||||
NzbInfoUrl = message.ParseResult.NzbInfoUrl,
|
||||
ReleaseGroup = message.ParseResult.ReleaseGroup,
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue