mirror of
https://github.com/lidarr/lidarr.git
synced 2025-07-16 10:03:51 -07:00
Refresh the scene mapping cache if it is empty during a lookup
This commit is contained in:
parent
53c2962d2a
commit
438686ca1a
6 changed files with 68 additions and 22 deletions
|
@ -175,7 +175,7 @@ namespace NzbDrone.Api.Series
|
||||||
|
|
||||||
private void PopulateAlternateTitles(SeriesResource resource)
|
private void PopulateAlternateTitles(SeriesResource resource)
|
||||||
{
|
{
|
||||||
var mappings = _sceneMappingService.FindByTvdbid(resource.TvdbId);
|
var mappings = _sceneMappingService.FindByTvdbId(resource.TvdbId);
|
||||||
|
|
||||||
if (mappings == null) return;
|
if (mappings == null) return;
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,7 @@ using FizzWare.NBuilder;
|
||||||
using Moq;
|
using Moq;
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
using NzbDrone.Core.DataAugmentation.Scene;
|
using NzbDrone.Core.DataAugmentation.Scene;
|
||||||
|
using NzbDrone.Core.Lifecycle;
|
||||||
using NzbDrone.Core.Test.Framework;
|
using NzbDrone.Core.Test.Framework;
|
||||||
using NzbDrone.Test.Common;
|
using NzbDrone.Test.Common;
|
||||||
using FluentAssertions;
|
using FluentAssertions;
|
||||||
|
@ -103,6 +104,36 @@ namespace NzbDrone.Core.Test.DataAugmentationFixture.Scene
|
||||||
_provider2.Verify(c => c.GetSceneMappings(), Times.Once());
|
_provider2.Verify(c => c.GetSceneMappings(), Times.Once());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void should_refresh_cache_if_cache_is_empty_when_looking_for_tvdb_id()
|
||||||
|
{
|
||||||
|
Subject.FindTvDbId("title");
|
||||||
|
|
||||||
|
Mocker.GetMock<ISceneMappingRepository>()
|
||||||
|
.Verify(v => v.All(), Times.Once());
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void should_not_refresh_cache_if_cache_is_not_empty_when_looking_for_tvdb_id()
|
||||||
|
{
|
||||||
|
GivenProviders(new[] { _provider1 });
|
||||||
|
|
||||||
|
Mocker.GetMock<ISceneMappingRepository>()
|
||||||
|
.Setup(s => s.All())
|
||||||
|
.Returns(Builder<SceneMapping>.CreateListOfSize(1).Build());
|
||||||
|
|
||||||
|
|
||||||
|
Subject.HandleAsync(new ApplicationStartedEvent());
|
||||||
|
|
||||||
|
Mocker.GetMock<ISceneMappingRepository>()
|
||||||
|
.Verify(v => v.All(), Times.Once());
|
||||||
|
|
||||||
|
Subject.FindTvDbId("title");
|
||||||
|
|
||||||
|
Mocker.GetMock<ISceneMappingRepository>()
|
||||||
|
.Verify(v => v.All(), Times.Once());
|
||||||
|
}
|
||||||
|
|
||||||
private void AssertNoUpdate()
|
private void AssertNoUpdate()
|
||||||
{
|
{
|
||||||
_provider1.Verify(c => c.GetSceneMappings(), Times.Once());
|
_provider1.Verify(c => c.GetSceneMappings(), Times.Once());
|
||||||
|
@ -119,7 +150,7 @@ namespace NzbDrone.Core.Test.DataAugmentationFixture.Scene
|
||||||
foreach (var sceneMapping in _fakeMappings)
|
foreach (var sceneMapping in _fakeMappings)
|
||||||
{
|
{
|
||||||
Subject.GetSceneNames(sceneMapping.TvdbId, _fakeMappings.Select(m => m.SeasonNumber)).Should().Contain(sceneMapping.SearchTerm);
|
Subject.GetSceneNames(sceneMapping.TvdbId, _fakeMappings.Select(m => m.SeasonNumber)).Should().Contain(sceneMapping.SearchTerm);
|
||||||
Subject.GetTvDbId(sceneMapping.ParseTerm).Should().Be(sceneMapping.TvdbId);
|
Subject.FindTvDbId(sceneMapping.ParseTerm).Should().Be(sceneMapping.TvdbId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -129,7 +129,7 @@ namespace NzbDrone.Core.Test.ParserTests.ParsingServiceTests
|
||||||
public void should_use_tvdbid_matching_when_alias_is_found()
|
public void should_use_tvdbid_matching_when_alias_is_found()
|
||||||
{
|
{
|
||||||
Mocker.GetMock<ISceneMappingService>()
|
Mocker.GetMock<ISceneMappingService>()
|
||||||
.Setup(s => s.GetTvDbId(It.IsAny<String>()))
|
.Setup(s => s.FindTvDbId(It.IsAny<String>()))
|
||||||
.Returns(_series.TvdbId);
|
.Returns(_series.TvdbId);
|
||||||
|
|
||||||
Subject.Map(_parsedEpisodeInfo, _series.TvRageId, _singleEpisodeSearchCriteria);
|
Subject.Map(_parsedEpisodeInfo, _series.TvRageId, _singleEpisodeSearchCriteria);
|
||||||
|
|
|
@ -15,8 +15,8 @@ namespace NzbDrone.Core.DataAugmentation.Scene
|
||||||
public interface ISceneMappingService
|
public interface ISceneMappingService
|
||||||
{
|
{
|
||||||
List<String> GetSceneNames(int tvdbId, IEnumerable<Int32> seasonNumbers);
|
List<String> GetSceneNames(int tvdbId, IEnumerable<Int32> seasonNumbers);
|
||||||
Nullable<int> GetTvDbId(string title);
|
Nullable<int> FindTvDbId(string title);
|
||||||
List<SceneMapping> FindByTvdbid(int tvdbId);
|
List<SceneMapping> FindByTvdbId(int tvdbId);
|
||||||
Nullable<Int32> GetSeasonNumber(string title);
|
Nullable<Int32> GetSeasonNumber(string title);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -28,8 +28,8 @@ namespace NzbDrone.Core.DataAugmentation.Scene
|
||||||
private readonly ISceneMappingRepository _repository;
|
private readonly ISceneMappingRepository _repository;
|
||||||
private readonly IEnumerable<ISceneMappingProvider> _sceneMappingProviders;
|
private readonly IEnumerable<ISceneMappingProvider> _sceneMappingProviders;
|
||||||
private readonly Logger _logger;
|
private readonly Logger _logger;
|
||||||
private readonly ICached<SceneMapping> _gettvdbIdCache;
|
private readonly ICached<SceneMapping> _getTvdbIdCache;
|
||||||
private readonly ICached<List<SceneMapping>> _findbytvdbIdCache;
|
private readonly ICached<List<SceneMapping>> _findByTvdbIdCache;
|
||||||
|
|
||||||
public SceneMappingService(ISceneMappingRepository repository,
|
public SceneMappingService(ISceneMappingRepository repository,
|
||||||
ICacheManager cacheManager,
|
ICacheManager cacheManager,
|
||||||
|
@ -39,14 +39,14 @@ namespace NzbDrone.Core.DataAugmentation.Scene
|
||||||
_repository = repository;
|
_repository = repository;
|
||||||
_sceneMappingProviders = sceneMappingProviders;
|
_sceneMappingProviders = sceneMappingProviders;
|
||||||
|
|
||||||
_gettvdbIdCache = cacheManager.GetCache<SceneMapping>(GetType(), "tvdb_id");
|
_getTvdbIdCache = cacheManager.GetCache<SceneMapping>(GetType(), "tvdb_id");
|
||||||
_findbytvdbIdCache = cacheManager.GetCache<List<SceneMapping>>(GetType(), "find_tvdb_id");
|
_findByTvdbIdCache = cacheManager.GetCache<List<SceneMapping>>(GetType(), "find_tvdb_id");
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<String> GetSceneNames(int tvdbId, IEnumerable<Int32> seasonNumbers)
|
public List<String> GetSceneNames(int tvdbId, IEnumerable<Int32> seasonNumbers)
|
||||||
{
|
{
|
||||||
var names = _findbytvdbIdCache.Find(tvdbId.ToString());
|
var names = _findByTvdbIdCache.Find(tvdbId.ToString());
|
||||||
|
|
||||||
if (names == null)
|
if (names == null)
|
||||||
{
|
{
|
||||||
|
@ -58,9 +58,9 @@ namespace NzbDrone.Core.DataAugmentation.Scene
|
||||||
.Select(m => m.SearchTerm).Distinct().ToList());
|
.Select(m => m.SearchTerm).Distinct().ToList());
|
||||||
}
|
}
|
||||||
|
|
||||||
public Nullable<Int32> GetTvDbId(string title)
|
public Nullable<Int32> FindTvDbId(string title)
|
||||||
{
|
{
|
||||||
var mapping = _gettvdbIdCache.Find(title.CleanSeriesTitle());
|
var mapping = FindTvdbId(title);
|
||||||
|
|
||||||
if (mapping == null)
|
if (mapping == null)
|
||||||
return null;
|
return null;
|
||||||
|
@ -68,9 +68,14 @@ namespace NzbDrone.Core.DataAugmentation.Scene
|
||||||
return mapping.TvdbId;
|
return mapping.TvdbId;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<SceneMapping> FindByTvdbid(int tvdbId)
|
public List<SceneMapping> FindByTvdbId(int tvdbId)
|
||||||
{
|
{
|
||||||
var mappings = _findbytvdbIdCache.Find(tvdbId.ToString());
|
if (_findByTvdbIdCache.Count == 0)
|
||||||
|
{
|
||||||
|
RefreshCache();
|
||||||
|
}
|
||||||
|
|
||||||
|
var mappings = _findByTvdbIdCache.Find(tvdbId.ToString());
|
||||||
|
|
||||||
if (mappings == null)
|
if (mappings == null)
|
||||||
{
|
{
|
||||||
|
@ -82,7 +87,7 @@ namespace NzbDrone.Core.DataAugmentation.Scene
|
||||||
|
|
||||||
public Nullable<Int32> GetSeasonNumber(string title)
|
public Nullable<Int32> GetSeasonNumber(string title)
|
||||||
{
|
{
|
||||||
var mapping = _gettvdbIdCache.Find(title.CleanSeriesTitle());
|
var mapping = FindTvdbId(title);
|
||||||
|
|
||||||
if (mapping == null)
|
if (mapping == null)
|
||||||
return null;
|
return null;
|
||||||
|
@ -126,21 +131,31 @@ namespace NzbDrone.Core.DataAugmentation.Scene
|
||||||
RefreshCache();
|
RefreshCache();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private SceneMapping FindTvdbId(string title)
|
||||||
|
{
|
||||||
|
if (_getTvdbIdCache.Count == 0)
|
||||||
|
{
|
||||||
|
RefreshCache();
|
||||||
|
}
|
||||||
|
|
||||||
|
return _getTvdbIdCache.Find(title.CleanSeriesTitle());
|
||||||
|
}
|
||||||
|
|
||||||
private void RefreshCache()
|
private void RefreshCache()
|
||||||
{
|
{
|
||||||
var mappings = _repository.All().ToList();
|
var mappings = _repository.All().ToList();
|
||||||
|
|
||||||
_gettvdbIdCache.Clear();
|
_getTvdbIdCache.Clear();
|
||||||
_findbytvdbIdCache.Clear();
|
_findByTvdbIdCache.Clear();
|
||||||
|
|
||||||
foreach (var sceneMapping in mappings)
|
foreach (var sceneMapping in mappings)
|
||||||
{
|
{
|
||||||
_gettvdbIdCache.Set(sceneMapping.ParseTerm.CleanSeriesTitle(), sceneMapping);
|
_getTvdbIdCache.Set(sceneMapping.ParseTerm.CleanSeriesTitle(), sceneMapping);
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (var sceneMapping in mappings.GroupBy(x => x.TvdbId))
|
foreach (var sceneMapping in mappings.GroupBy(x => x.TvdbId))
|
||||||
{
|
{
|
||||||
_findbytvdbIdCache.Set(sceneMapping.Key.ToString(), sceneMapping.ToList());
|
_findByTvdbIdCache.Set(sceneMapping.Key.ToString(), sceneMapping.ToList());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -279,7 +279,7 @@ namespace NzbDrone.Core.Parser
|
||||||
{
|
{
|
||||||
if (searchCriteria != null)
|
if (searchCriteria != null)
|
||||||
{
|
{
|
||||||
var tvdbId = _sceneMappingService.GetTvDbId(title);
|
var tvdbId = _sceneMappingService.FindTvDbId(title);
|
||||||
if (tvdbId.HasValue)
|
if (tvdbId.HasValue)
|
||||||
{
|
{
|
||||||
if (searchCriteria.Series.TvdbId == tvdbId)
|
if (searchCriteria.Series.TvdbId == tvdbId)
|
||||||
|
@ -336,7 +336,7 @@ namespace NzbDrone.Core.Parser
|
||||||
|
|
||||||
private Series GetSeries(ParsedEpisodeInfo parsedEpisodeInfo, int tvRageId, SearchCriteriaBase searchCriteria)
|
private Series GetSeries(ParsedEpisodeInfo parsedEpisodeInfo, int tvRageId, SearchCriteriaBase searchCriteria)
|
||||||
{
|
{
|
||||||
var tvdbId = _sceneMappingService.GetTvDbId(parsedEpisodeInfo.SeriesTitle);
|
var tvdbId = _sceneMappingService.FindTvDbId(parsedEpisodeInfo.SeriesTitle);
|
||||||
|
|
||||||
if (tvdbId.HasValue)
|
if (tvdbId.HasValue)
|
||||||
{
|
{
|
||||||
|
|
|
@ -93,7 +93,7 @@ namespace NzbDrone.Core.Tv
|
||||||
|
|
||||||
public Series FindByTitle(string title)
|
public Series FindByTitle(string title)
|
||||||
{
|
{
|
||||||
var tvdbId = _sceneMappingService.GetTvDbId(title);
|
var tvdbId = _sceneMappingService.FindTvDbId(title);
|
||||||
|
|
||||||
if (tvdbId.HasValue)
|
if (tvdbId.HasValue)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue