mirror of
https://github.com/Ombi-app/Ombi.git
synced 2025-08-20 13:23:20 -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 Ombi.Api.TheMovieDb;
|
||||
using Ombi.Api.TheMovieDb.Models;
|
||||
using System.Diagnostics;
|
||||
|
||||
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));
|
||||
|
||||
foreach (var episode in seasonEpisodes.episodes)
|
||||
{
|
||||
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,
|
||||
});
|
||||
}
|
||||
}
|
||||
MapSeasons(mapped.SeasonRequests, tvSeason, seasonEpisodes);
|
||||
}
|
||||
|
||||
return await ProcessResult(mapped);
|
||||
|
@ -152,6 +121,7 @@ namespace Ombi.Core.Engine.V2
|
|||
async () => await _movieApi.TopRatedTv(langCode, pagesToLoad.Page), DateTime.Now.AddHours(12));
|
||||
results.AddRange(apiResult.Skip(pagesToLoad.Skip).Take(pagesToLoad.Take));
|
||||
}
|
||||
|
||||
var processed = ProcessResults(results);
|
||||
return await processed;
|
||||
}
|
||||
|
@ -177,22 +147,73 @@ namespace Ombi.Core.Engine.V2
|
|||
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 settings = await _customization.GetSettingsAsync();
|
||||
|
||||
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);
|
||||
if (result == null || settings.HideAvailableFromDiscover && result.Available)
|
||||
if (result == null || settings.HideAvailableFromDiscover && result.FullyAvailable)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
retVal.Add(result);
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
var item = _mapper.Map<SearchTvShowViewModel>(tvMazeSearch);
|
||||
|
|
|
@ -25,6 +25,7 @@ namespace Ombi.Core.Rule.Rules.Search
|
|||
PlexServerContent item = null;
|
||||
var useImdb = false;
|
||||
var useTheMovieDb = false;
|
||||
var useId = false;
|
||||
var useTvDb = false;
|
||||
if (obj.ImdbId.HasValue())
|
||||
{
|
||||
|
@ -36,6 +37,14 @@ namespace Ombi.Core.Rule.Rules.Search
|
|||
}
|
||||
if (item == null)
|
||||
{
|
||||
if (obj.Id > 0)
|
||||
{
|
||||
item = await PlexContentRepository.Get(obj.Id.ToString());
|
||||
if (item != null)
|
||||
{
|
||||
useId = true;
|
||||
}
|
||||
}
|
||||
if (obj.TheMovieDbId.HasValue())
|
||||
{
|
||||
item = await PlexContentRepository.Get(obj.TheMovieDbId);
|
||||
|
@ -60,6 +69,11 @@ namespace Ombi.Core.Rule.Rules.Search
|
|||
|
||||
if (item != null)
|
||||
{
|
||||
if (useId)
|
||||
{
|
||||
obj.TheMovieDbId = obj.Id.ToString();
|
||||
useTheMovieDb = true;
|
||||
}
|
||||
obj.Available = true;
|
||||
obj.PlexUrl = item.Url;
|
||||
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.BackdropPath, opts => opts.MapFrom(src => src.PosterPath))
|
||||
//.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.Trailer,
|
||||
// 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
|
||||
{
|
||||
|
@ -16,5 +19,10 @@
|
|||
public int VoteCount { get; set; }
|
||||
public bool Video { 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