mirror of
https://github.com/Ombi-app/Ombi.git
synced 2025-08-20 21:33:15 -07:00
Fixed the issue where TV Shows were not being hidden from the Discover section
This commit is contained in:
parent
20c46ad027
commit
2a284ce75c
4 changed files with 82 additions and 37 deletions
|
@ -22,6 +22,7 @@ using Microsoft.EntityFrameworkCore;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using Ombi.Api.TheMovieDb;
|
using Ombi.Api.TheMovieDb;
|
||||||
using Ombi.Api.TheMovieDb.Models;
|
using Ombi.Api.TheMovieDb.Models;
|
||||||
|
using System.Diagnostics;
|
||||||
|
|
||||||
namespace Ombi.Core.Engine.V2
|
namespace Ombi.Core.Engine.V2
|
||||||
{
|
{
|
||||||
|
@ -69,39 +70,7 @@ namespace Ombi.Core.Engine.V2
|
||||||
{
|
{
|
||||||
var seasonEpisodes = (await _movieApi.GetSeasonEpisodes(show.id, tvSeason.season_number, token));
|
var seasonEpisodes = (await _movieApi.GetSeasonEpisodes(show.id, tvSeason.season_number, token));
|
||||||
|
|
||||||
foreach (var episode in seasonEpisodes.episodes)
|
MapSeasons(mapped.SeasonRequests, tvSeason, seasonEpisodes);
|
||||||
{
|
|
||||||
var season = mapped.SeasonRequests.FirstOrDefault(x => x.SeasonNumber == episode.season_number);
|
|
||||||
if (season == null)
|
|
||||||
{
|
|
||||||
var newSeason = new SeasonRequests
|
|
||||||
{
|
|
||||||
SeasonNumber = episode.season_number,
|
|
||||||
Overview = tvSeason.overview,
|
|
||||||
Episodes = new List<EpisodeRequests>()
|
|
||||||
};
|
|
||||||
newSeason.Episodes.Add(new EpisodeRequests
|
|
||||||
{
|
|
||||||
//Url = episode...ToHttpsUrl(),
|
|
||||||
Title = episode.name,
|
|
||||||
AirDate = episode.air_date.HasValue() ? DateTime.Parse(episode.air_date) : DateTime.MinValue,
|
|
||||||
EpisodeNumber = episode.episode_number,
|
|
||||||
|
|
||||||
});
|
|
||||||
mapped.SeasonRequests.Add(newSeason);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// We already have the season, so just add the episode
|
|
||||||
season.Episodes.Add(new EpisodeRequests
|
|
||||||
{
|
|
||||||
//Url = e.url.ToHttpsUrl(),
|
|
||||||
Title = episode.name,
|
|
||||||
AirDate = episode.air_date.HasValue() ? DateTime.Parse(episode.air_date) : DateTime.MinValue,
|
|
||||||
EpisodeNumber = episode.episode_number,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return await ProcessResult(mapped);
|
return await ProcessResult(mapped);
|
||||||
|
@ -152,6 +121,7 @@ namespace Ombi.Core.Engine.V2
|
||||||
async () => await _movieApi.TopRatedTv(langCode, pagesToLoad.Page), DateTime.Now.AddHours(12));
|
async () => await _movieApi.TopRatedTv(langCode, pagesToLoad.Page), DateTime.Now.AddHours(12));
|
||||||
results.AddRange(apiResult.Skip(pagesToLoad.Skip).Take(pagesToLoad.Take));
|
results.AddRange(apiResult.Skip(pagesToLoad.Skip).Take(pagesToLoad.Take));
|
||||||
}
|
}
|
||||||
|
|
||||||
var processed = ProcessResults(results);
|
var processed = ProcessResults(results);
|
||||||
return await processed;
|
return await processed;
|
||||||
}
|
}
|
||||||
|
@ -177,22 +147,73 @@ namespace Ombi.Core.Engine.V2
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task<IEnumerable<SearchTvShowViewModel>> ProcessResults<T>(IEnumerable<T> items)
|
private async Task<IEnumerable<SearchTvShowViewModel>> ProcessResults(List<MovieDbSearchResult> items)
|
||||||
{
|
{
|
||||||
var retVal = new List<SearchTvShowViewModel>();
|
var retVal = new List<SearchTvShowViewModel>();
|
||||||
var settings = await _customization.GetSettingsAsync();
|
var settings = await _customization.GetSettingsAsync();
|
||||||
|
|
||||||
foreach (var tvMazeSearch in items)
|
foreach (var tvMazeSearch in items)
|
||||||
{
|
{
|
||||||
|
var show = await Cache.GetOrAdd(nameof(GetShowInformation) + tvMazeSearch.Id.ToString(),
|
||||||
|
async () => await _movieApi.GetTVInfo(tvMazeSearch.Id.ToString()), DateTime.Now.AddHours(12));
|
||||||
|
foreach (var tvSeason in show.seasons.Where(x => x.season_number != 0)) // skip the first season
|
||||||
|
{
|
||||||
|
var seasonEpisodes = await Cache.GetOrAdd("SeasonEpisodes" + show.id + tvSeason.season_number, async () =>
|
||||||
|
{
|
||||||
|
return await _movieApi.GetSeasonEpisodes(show.id, tvSeason.season_number, CancellationToken.None);
|
||||||
|
}, DateTime.Now.AddHours(12));
|
||||||
|
|
||||||
|
MapSeasons(tvMazeSearch.SeasonRequests, tvSeason, seasonEpisodes);
|
||||||
|
}
|
||||||
|
|
||||||
var result = await ProcessResult(tvMazeSearch);
|
var result = await ProcessResult(tvMazeSearch);
|
||||||
if (result == null || settings.HideAvailableFromDiscover && result.Available)
|
if (result == null || settings.HideAvailableFromDiscover && result.FullyAvailable)
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
retVal.Add(result);
|
retVal.Add(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
return retVal;
|
return retVal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void MapSeasons(List<SeasonRequests> seasonRequests, Season tvSeason, SeasonDetails seasonEpisodes)
|
||||||
|
{
|
||||||
|
foreach (var episode in seasonEpisodes.episodes)
|
||||||
|
{
|
||||||
|
var season = seasonRequests.FirstOrDefault(x => x.SeasonNumber == episode.season_number);
|
||||||
|
if (season == null)
|
||||||
|
{
|
||||||
|
var newSeason = new SeasonRequests
|
||||||
|
{
|
||||||
|
SeasonNumber = episode.season_number,
|
||||||
|
Overview = tvSeason.overview,
|
||||||
|
Episodes = new List<EpisodeRequests>()
|
||||||
|
};
|
||||||
|
newSeason.Episodes.Add(new EpisodeRequests
|
||||||
|
{
|
||||||
|
//Url = episode...ToHttpsUrl(),
|
||||||
|
Title = episode.name,
|
||||||
|
AirDate = episode.air_date.HasValue() ? DateTime.Parse(episode.air_date) : DateTime.MinValue,
|
||||||
|
EpisodeNumber = episode.episode_number,
|
||||||
|
|
||||||
|
});
|
||||||
|
seasonRequests.Add(newSeason);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// We already have the season, so just add the episode
|
||||||
|
season.Episodes.Add(new EpisodeRequests
|
||||||
|
{
|
||||||
|
//Url = e.url.ToHttpsUrl(),
|
||||||
|
Title = episode.name,
|
||||||
|
AirDate = episode.air_date.HasValue() ? DateTime.Parse(episode.air_date) : DateTime.MinValue,
|
||||||
|
EpisodeNumber = episode.episode_number,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private async Task<SearchTvShowViewModel> ProcessResult<T>(T tvMazeSearch)
|
private async Task<SearchTvShowViewModel> ProcessResult<T>(T tvMazeSearch)
|
||||||
{
|
{
|
||||||
var item = _mapper.Map<SearchTvShowViewModel>(tvMazeSearch);
|
var item = _mapper.Map<SearchTvShowViewModel>(tvMazeSearch);
|
||||||
|
|
|
@ -25,6 +25,7 @@ namespace Ombi.Core.Rule.Rules.Search
|
||||||
PlexServerContent item = null;
|
PlexServerContent item = null;
|
||||||
var useImdb = false;
|
var useImdb = false;
|
||||||
var useTheMovieDb = false;
|
var useTheMovieDb = false;
|
||||||
|
var useId = false;
|
||||||
var useTvDb = false;
|
var useTvDb = false;
|
||||||
if (obj.ImdbId.HasValue())
|
if (obj.ImdbId.HasValue())
|
||||||
{
|
{
|
||||||
|
@ -36,6 +37,14 @@ namespace Ombi.Core.Rule.Rules.Search
|
||||||
}
|
}
|
||||||
if (item == null)
|
if (item == null)
|
||||||
{
|
{
|
||||||
|
if (obj.Id > 0)
|
||||||
|
{
|
||||||
|
item = await PlexContentRepository.Get(obj.Id.ToString());
|
||||||
|
if (item != null)
|
||||||
|
{
|
||||||
|
useId = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
if (obj.TheMovieDbId.HasValue())
|
if (obj.TheMovieDbId.HasValue())
|
||||||
{
|
{
|
||||||
item = await PlexContentRepository.Get(obj.TheMovieDbId);
|
item = await PlexContentRepository.Get(obj.TheMovieDbId);
|
||||||
|
@ -60,6 +69,11 @@ namespace Ombi.Core.Rule.Rules.Search
|
||||||
|
|
||||||
if (item != null)
|
if (item != null)
|
||||||
{
|
{
|
||||||
|
if (useId)
|
||||||
|
{
|
||||||
|
obj.TheMovieDbId = obj.Id.ToString();
|
||||||
|
useTheMovieDb = true;
|
||||||
|
}
|
||||||
obj.Available = true;
|
obj.Available = true;
|
||||||
obj.PlexUrl = item.Url;
|
obj.PlexUrl = item.Url;
|
||||||
obj.Quality = item.Quality;
|
obj.Quality = item.Quality;
|
||||||
|
|
|
@ -81,7 +81,9 @@ namespace Ombi.Mapping.Profiles
|
||||||
.ForMember(dest => dest.Rating, opts => opts.MapFrom(src => src.VoteAverage.ToString()))
|
.ForMember(dest => dest.Rating, opts => opts.MapFrom(src => src.VoteAverage.ToString()))
|
||||||
.ForMember(dest => dest.BackdropPath, opts => opts.MapFrom(src => src.PosterPath))
|
.ForMember(dest => dest.BackdropPath, opts => opts.MapFrom(src => src.PosterPath))
|
||||||
//.ForMember(dest => dest.Runtime, opts => opts.MapFrom(src => src.Runtime.ToString()))
|
//.ForMember(dest => dest.Runtime, opts => opts.MapFrom(src => src.Runtime.ToString()))
|
||||||
.ForMember(dest => dest.Title, opts => opts.MapFrom(src => src.Title));
|
.ForMember(dest => dest.Title, opts => opts.MapFrom(src => src.Title))
|
||||||
|
.ForMember(dest => dest.SeasonRequests, opts => opts.MapFrom(src => src.SeasonRequests))
|
||||||
|
;
|
||||||
//.ForMember(dest => dest.Status, opts => opts.MapFrom(src => TraktEnumHelper.GetDescription(src.Status)))
|
//.ForMember(dest => dest.Status, opts => opts.MapFrom(src => TraktEnumHelper.GetDescription(src.Status)))
|
||||||
//.ForMember(dest => dest.Trailer,
|
//.ForMember(dest => dest.Trailer,
|
||||||
// opts => opts.MapFrom(src => src.Trailer != null ? src.Trailer.ToString().ToHttpsUrl() : string.Empty))
|
// opts => opts.MapFrom(src => src.Trailer != null ? src.Trailer.ToString().ToHttpsUrl() : string.Empty))
|
||||||
|
|
|
@ -1,4 +1,7 @@
|
||||||
namespace Ombi.Api.TheMovieDb.Models
|
using Ombi.Store.Repository.Requests;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace Ombi.Api.TheMovieDb.Models
|
||||||
{
|
{
|
||||||
public class MovieDbSearchResult
|
public class MovieDbSearchResult
|
||||||
{
|
{
|
||||||
|
@ -16,5 +19,10 @@
|
||||||
public int VoteCount { get; set; }
|
public int VoteCount { get; set; }
|
||||||
public bool Video { get; set; }
|
public bool Video { get; set; }
|
||||||
public float VoteAverage { get; set; }
|
public float VoteAverage { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Mapped Property and not set from the API
|
||||||
|
/// </summary>
|
||||||
|
public List<SeasonRequests> SeasonRequests { get; set; } = new List<SeasonRequests>();
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Add table
Add a link
Reference in a new issue