From 0ad573a98a98f39d05434d28368937037045dd58 Mon Sep 17 00:00:00 2001 From: tidusjar Date: Fri, 30 Apr 2021 20:40:42 +0100 Subject: [PATCH] Fixed the issue where searching some movies may appear available if they have the same TvDb Id as the result's MovieDbId... --- .../Rule/Rules/Search/PlexAvailabilityRule.cs | 8 +++---- src/Ombi.Helpers.Tests/PlexHelperTests.cs | 1 + .../Jobs/Plex/PlexAvailabilityChecker.cs | 4 ++-- .../Repository/IPlexContentRepository.cs | 3 ++- .../Repository/PlexContentRepository.cs | 22 +++++++++++-------- 5 files changed, 22 insertions(+), 16 deletions(-) diff --git a/src/Ombi.Core/Rule/Rules/Search/PlexAvailabilityRule.cs b/src/Ombi.Core/Rule/Rules/Search/PlexAvailabilityRule.cs index d0397cc15..7b757802d 100644 --- a/src/Ombi.Core/Rule/Rules/Search/PlexAvailabilityRule.cs +++ b/src/Ombi.Core/Rule/Rules/Search/PlexAvailabilityRule.cs @@ -29,7 +29,7 @@ namespace Ombi.Core.Rule.Rules.Search var useTvDb = false; if (obj.ImdbId.HasValue()) { - item = await PlexContentRepository.Get(obj.ImdbId); + item = await PlexContentRepository.Get(obj.ImdbId, ProviderType.ImdbId); if (item != null) { useImdb = true; @@ -39,7 +39,7 @@ namespace Ombi.Core.Rule.Rules.Search { if (obj.Id > 0) { - item = await PlexContentRepository.Get(obj.Id.ToString()); + item = await PlexContentRepository.Get(obj.Id.ToString(), ProviderType.TheMovieDbId); if (item != null) { useId = true; @@ -47,7 +47,7 @@ namespace Ombi.Core.Rule.Rules.Search } if (obj.TheMovieDbId.HasValue()) { - item = await PlexContentRepository.Get(obj.TheMovieDbId); + item = await PlexContentRepository.Get(obj.TheMovieDbId, ProviderType.TheMovieDbId); if (item != null) { useTheMovieDb = true; @@ -58,7 +58,7 @@ namespace Ombi.Core.Rule.Rules.Search { if (obj.TheTvDbId.HasValue()) { - item = await PlexContentRepository.Get(obj.TheTvDbId); + item = await PlexContentRepository.Get(obj.TheTvDbId, ProviderType.TvDbId); if (item != null) { useTvDb = true; diff --git a/src/Ombi.Helpers.Tests/PlexHelperTests.cs b/src/Ombi.Helpers.Tests/PlexHelperTests.cs index 82b59fdf7..e7d35a583 100644 --- a/src/Ombi.Helpers.Tests/PlexHelperTests.cs +++ b/src/Ombi.Helpers.Tests/PlexHelperTests.cs @@ -61,6 +61,7 @@ namespace Ombi.Helpers.Tests get { yield return new TestCaseData("plex://movie/5e1632df2d4d84003e48e54e|imdb://tt9178402|tmdb://610201", new ProviderId { ImdbId = "tt9178402", TheMovieDb = "610201" }).SetName("V2 Regular Plex Id"); + yield return new TestCaseData("plex://movie/5e1632df2d4d84003e48e54e|imdb://tt9178402|tmdb://610201|thetvdb://12345", new ProviderId { ImdbId = "tt9178402", TheMovieDb = "610201", TheTvDb = "12345" }).SetName("V2 Regular Plex Id w/ tvdb"); yield return new TestCaseData("plex://movie/5d7768253c3c2a001fbcab72|imdb://tt0119567|tmdb://330", new ProviderId { ImdbId = "tt0119567", TheMovieDb = "330" }).SetName("V2 Regular Plex Id Another"); yield return new TestCaseData("plex://movie/5d7768253c3c2a001fbcab72|imdb://tt0119567", new ProviderId { ImdbId = "tt0119567" }).SetName("V2 Regular Plex Id Single Imdb"); yield return new TestCaseData("plex://movie/5d7768253c3c2a001fbcab72|tmdb://330", new ProviderId { TheMovieDb = "330" }).SetName("V2 Regular Plex Id Single Tmdb"); diff --git a/src/Ombi.Schedule/Jobs/Plex/PlexAvailabilityChecker.cs b/src/Ombi.Schedule/Jobs/Plex/PlexAvailabilityChecker.cs index d1d26d6e1..f203f297a 100644 --- a/src/Ombi.Schedule/Jobs/Plex/PlexAvailabilityChecker.cs +++ b/src/Ombi.Schedule/Jobs/Plex/PlexAvailabilityChecker.cs @@ -183,13 +183,13 @@ namespace Ombi.Schedule.Jobs.Plex PlexServerContent item = null; if (movie.ImdbId.HasValue()) { - item = await _repo.Get(movie.ImdbId); + item = await _repo.Get(movie.ImdbId, ProviderType.ImdbId); } if (item == null) { if (movie.TheMovieDbId.ToString().HasValue()) { - item = await _repo.Get(movie.TheMovieDbId.ToString()); + item = await _repo.Get(movie.TheMovieDbId.ToString(), ProviderType.TheMovieDbId); } } if (item == null) diff --git a/src/Ombi.Store/Repository/IPlexContentRepository.cs b/src/Ombi.Store/Repository/IPlexContentRepository.cs index 7bce2e75a..d1d30a630 100644 --- a/src/Ombi.Store/Repository/IPlexContentRepository.cs +++ b/src/Ombi.Store/Repository/IPlexContentRepository.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Threading.Tasks; +using Ombi.Helpers; using Ombi.Store.Entities; namespace Ombi.Store.Repository @@ -10,7 +11,7 @@ namespace Ombi.Store.Repository public interface IPlexContentRepository : IExternalRepository { Task ContentExists(string providerId); - Task Get(string providerId); + Task Get(string providerId, ProviderType type); Task GetByKey(int key); Task Update(PlexServerContent existingContent); IQueryable GetAllEpisodes(); diff --git a/src/Ombi.Store/Repository/PlexContentRepository.cs b/src/Ombi.Store/Repository/PlexContentRepository.cs index 1d53874a1..e5c31172e 100644 --- a/src/Ombi.Store/Repository/PlexContentRepository.cs +++ b/src/Ombi.Store/Repository/PlexContentRepository.cs @@ -31,6 +31,7 @@ using System.Linq; using System.Linq.Expressions; using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; +using Ombi.Helpers; using Ombi.Store.Context; using Ombi.Store.Entities; @@ -61,18 +62,21 @@ namespace Ombi.Store.Repository return any; } - public async Task Get(string providerId) + public async Task Get(string providerId, ProviderType type) { - var item = await Db.PlexServerContent.FirstOrDefaultAsync(x => x.ImdbId == providerId); - if (item == null) + switch (type) { - item = await Db.PlexServerContent.FirstOrDefaultAsync(x => x.TheMovieDbId == providerId); - if (item == null) - { - item = await Db.PlexServerContent.FirstOrDefaultAsync(x => x.TvDbId == providerId); - } + case ProviderType.ImdbId: + return await Db.PlexServerContent.FirstOrDefaultAsync(x => x.ImdbId == providerId); + case ProviderType.TheMovieDbId: + return await Db.PlexServerContent.FirstOrDefaultAsync(x => x.TheMovieDbId == providerId); + case ProviderType.TvDbId: + return await Db.PlexServerContent.FirstOrDefaultAsync(x => x.TvDbId == providerId); + default: + break; } - return item; + + return null; } public async Task GetByKey(int key)