From 9cdd6f41cdab8825a984905c089611409c53c753 Mon Sep 17 00:00:00 2001 From: tidusjar Date: Fri, 18 Mar 2022 21:12:12 +0000 Subject: [PATCH] fix(mediaserver): fixed an issue where we were not detecting available content correctly #4542 --- src/Ombi.Api.TvMaze/ITvMazeApi.cs | 2 -- src/Ombi.Api.TvMaze/TvMazeApi.cs | 22 ------------------- src/Ombi.Core/Engine/MovieSearchEngine.cs | 12 +++++----- .../Jobs/Emby/EmbyAvaliabilityChecker.cs | 2 +- .../Jellyfin/JellyfinAvaliabilityChecker.cs | 2 +- .../Jobs/Ombi/RefreshMetadata.cs | 11 ++++++---- .../Jobs/Plex/PlexAvailabilityChecker.cs | 2 +- .../Jobs/Plex/PlexContentSync.cs | 2 +- 8 files changed, 17 insertions(+), 38 deletions(-) diff --git a/src/Ombi.Api.TvMaze/ITvMazeApi.cs b/src/Ombi.Api.TvMaze/ITvMazeApi.cs index 819051d83..983858810 100644 --- a/src/Ombi.Api.TvMaze/ITvMazeApi.cs +++ b/src/Ombi.Api.TvMaze/ITvMazeApi.cs @@ -8,10 +8,8 @@ namespace Ombi.Api.TvMaze public interface ITvMazeApi { Task> EpisodeLookup(int showId); - Task> GetSeasons(int id); Task> Search(string searchTerm); Task ShowLookup(int showId); Task ShowLookupByTheTvDbId(int theTvDbId); - Task GetTvFullInformation(int id); } } \ No newline at end of file diff --git a/src/Ombi.Api.TvMaze/TvMazeApi.cs b/src/Ombi.Api.TvMaze/TvMazeApi.cs index 5d761da47..3f37d7488 100644 --- a/src/Ombi.Api.TvMaze/TvMazeApi.cs +++ b/src/Ombi.Api.TvMaze/TvMazeApi.cs @@ -64,27 +64,5 @@ namespace Ombi.Api.TvMaze return null; } } - - public async Task> GetSeasons(int id) - { - var request = new Request($"shows/{id}/seasons", Uri, HttpMethod.Get); - - request.AddContentHeader("Content-Type", "application/json"); - - return await Api.Request>(request); - } - - public async Task GetTvFullInformation(int id) - { - var request = new Request($"shows/{id}", Uri, HttpMethod.Get); - - request.AddQueryString("embed[]", "cast"); - request.AddQueryString("embed[]", "crew"); - request.AddQueryString("embed[]", "episodes"); - - request.AddContentHeader("Content-Type", "application/json"); - - return await Api.Request(request); - } } } diff --git a/src/Ombi.Core/Engine/MovieSearchEngine.cs b/src/Ombi.Core/Engine/MovieSearchEngine.cs index d911c1cf5..7d84a0b40 100644 --- a/src/Ombi.Core/Engine/MovieSearchEngine.cs +++ b/src/Ombi.Core/Engine/MovieSearchEngine.cs @@ -46,7 +46,7 @@ namespace Ombi.Core.Engine { langCode = await DefaultLanguageCode(langCode); var movieInfo = await Cache.GetOrAddAsync(nameof(LookupImdbInformation) + langCode + theMovieDbId, - () => MovieApi.GetMovieInformationWithExtraInfo(theMovieDbId, langCode), + () => MovieApi.GetMovieInformationWithExtraInfo(theMovieDbId, langCode), DateTimeOffset.Now.AddHours(12)); var viewMovie = Mapper.Map(movieInfo); @@ -81,11 +81,11 @@ namespace Ombi.Core.Engine { return resultSet; } - + // Get this person movie credits var credits = await MovieApi.GetActorMovieCredits(person.id, langaugeCode); // Grab results from both cast and crew, prefer items in cast. we can handle directors like this. - var movieResults = (from role in credits.cast select new { Id = role.id, Title = role.title, ReleaseDate = role.release_date }).ToList(); + var movieResults = (from role in credits.cast select new { Id = role.id, Title = role.title, ReleaseDate = role.release_date }).ToList(); movieResults.AddRange((from job in credits.crew select new { Id = job.id, Title = job.title, ReleaseDate = job.release_date }).ToList()); movieResults = movieResults.Take(10).ToList(); @@ -120,7 +120,7 @@ namespace Ombi.Core.Engine /// public async Task> PopularMovies() { - + var result = await Cache.GetOrAddAsync(CacheKeys.PopularMovies, async () => { var langCode = await DefaultLanguageCode(null); @@ -201,7 +201,7 @@ namespace Ombi.Core.Engine protected async Task ProcessSingleMovie(SearchMovieViewModel viewMovie, bool lookupExtraInfo = false) { - if (lookupExtraInfo && viewMovie.ImdbId.IsNullOrEmpty()) + if (lookupExtraInfo && viewMovie.ImdbId.IsNullOrEmpty() && viewMovie.Id > 0) { var showInfo = await MovieApi.GetMovieInformation(viewMovie.Id); viewMovie.Id = showInfo.Id; // TheMovieDbId @@ -217,7 +217,7 @@ namespace Ombi.Core.Engine // This requires the rules to be run first to populate the RequestId property await CheckForSubscription(viewMovie); - + return viewMovie; } diff --git a/src/Ombi.Schedule/Jobs/Emby/EmbyAvaliabilityChecker.cs b/src/Ombi.Schedule/Jobs/Emby/EmbyAvaliabilityChecker.cs index c62871265..9d88c5907 100644 --- a/src/Ombi.Schedule/Jobs/Emby/EmbyAvaliabilityChecker.cs +++ b/src/Ombi.Schedule/Jobs/Emby/EmbyAvaliabilityChecker.cs @@ -86,7 +86,7 @@ namespace Ombi.Schedule.Jobs.Emby } // If we have a non-4k versison then mark as available - if (embyContent.Quality.HasValue() && !movie.Available) + if (embyContent.Quality != null && !movie.Available) { movie.Available = true; movie.MarkedAsAvailable = DateTime.Now; diff --git a/src/Ombi.Schedule/Jobs/Jellyfin/JellyfinAvaliabilityChecker.cs b/src/Ombi.Schedule/Jobs/Jellyfin/JellyfinAvaliabilityChecker.cs index 5c73c66b8..b1dafa71f 100644 --- a/src/Ombi.Schedule/Jobs/Jellyfin/JellyfinAvaliabilityChecker.cs +++ b/src/Ombi.Schedule/Jobs/Jellyfin/JellyfinAvaliabilityChecker.cs @@ -111,7 +111,7 @@ namespace Ombi.Schedule.Jobs.Jellyfin } // If we have a non-4k versison then mark as available - if (jellyfinContent.Quality.HasValue() && !movie.Available) + if (jellyfinContent.Quality != null && !movie.Available) { movie.Available = true; movie.MarkedAsAvailable = DateTime.Now; diff --git a/src/Ombi.Schedule/Jobs/Ombi/RefreshMetadata.cs b/src/Ombi.Schedule/Jobs/Ombi/RefreshMetadata.cs index 2421d5af0..1f5abb5e4 100644 --- a/src/Ombi.Schedule/Jobs/Ombi/RefreshMetadata.cs +++ b/src/Ombi.Schedule/Jobs/Ombi/RefreshMetadata.cs @@ -447,17 +447,20 @@ namespace Ombi.Schedule.Jobs.Ombi default: break; } - + } } if (hasTvDbId && type == RequestType.TvShow) { _log.LogInformation("The show {0} has tvdbid but not ImdbId, searching for ImdbId", title); - if (int.TryParse(tvDbId, out var id)) + + var result = await _movieApi.Find(tvDbId.ToString(), ExternalSource.tvdb_id); + var movieDbId = result.tv_results.FirstOrDefault()?.id ?? 0; + if (movieDbId != 0) { - var result = await _tvApi.ShowLookupByTheTvDbId(id); - return result?.externals?.imdb; + var externalsResult = await _movieApi.GetTvExternals(movieDbId); + return externalsResult.imdb_id; } } return string.Empty; diff --git a/src/Ombi.Schedule/Jobs/Plex/PlexAvailabilityChecker.cs b/src/Ombi.Schedule/Jobs/Plex/PlexAvailabilityChecker.cs index 4eb83105d..6d082195e 100644 --- a/src/Ombi.Schedule/Jobs/Plex/PlexAvailabilityChecker.cs +++ b/src/Ombi.Schedule/Jobs/Plex/PlexAvailabilityChecker.cs @@ -218,7 +218,7 @@ namespace Ombi.Schedule.Jobs.Plex } // If we have a non-4k versison then mark as available - if (item.Quality.HasValue() && !movie.Available) + if (item.Quality != null && !movie.Available) { movie.Available = true; movie.Approved = true; diff --git a/src/Ombi.Schedule/Jobs/Plex/PlexContentSync.cs b/src/Ombi.Schedule/Jobs/Plex/PlexContentSync.cs index 2cfc02d90..823766bd2 100644 --- a/src/Ombi.Schedule/Jobs/Plex/PlexContentSync.cs +++ b/src/Ombi.Schedule/Jobs/Plex/PlexContentSync.cs @@ -381,7 +381,7 @@ namespace Ombi.Schedule.Jobs.Plex var qualities = movie.Media?.Select(x => x.videoResolution); var is4k = qualities != null && qualities.Any(x => x.Equals("4k", StringComparison.InvariantCultureIgnoreCase)); - var selectedQuality = is4k ? string.Empty : qualities?.OrderBy(x => x)?.FirstOrDefault() ?? string.Empty; + var selectedQuality = is4k ? null : qualities?.OrderBy(x => x)?.FirstOrDefault() ?? string.Empty; var item = new PlexServerContent {