mirror of
https://github.com/Ombi-app/Ombi.git
synced 2025-07-11 15:56:05 -07:00
merge
This commit is contained in:
parent
eaa4a7ec1c
commit
4fb965e782
13 changed files with 90 additions and 179 deletions
|
@ -1,17 +1,14 @@
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using TraktApiSharp.Enums;
|
using TraktSharp.Entities;
|
||||||
using TraktApiSharp.Objects.Get.Shows;
|
|
||||||
using TraktApiSharp.Objects.Get.Shows.Common;
|
|
||||||
|
|
||||||
namespace Ombi.Api.Trakt
|
namespace Ombi.Api.Trakt
|
||||||
{
|
{
|
||||||
public interface ITraktApi
|
public interface ITraktApi
|
||||||
{
|
{
|
||||||
Task<IEnumerable<TraktMostAnticipatedShow>> GetAnticipatedShows(int? page = default(int?), int? limitPerPage = default(int?));
|
Task<IEnumerable<TraktShow>> GetAnticipatedShows(int? page = default(int?), int? limitPerPage = default(int?));
|
||||||
Task<IEnumerable<TraktMostWatchedShow>> GetMostWatchesShows(TraktTimePeriod period = null, int? page = default(int?), int? limitPerPage = default(int?));
|
|
||||||
Task<IEnumerable<TraktShow>> GetPopularShows(int? page = default(int?), int? limitPerPage = default(int?));
|
Task<IEnumerable<TraktShow>> GetPopularShows(int? page = default(int?), int? limitPerPage = default(int?));
|
||||||
Task<IEnumerable<TraktTrendingShow>> GetTrendingShows(int? page = default(int?), int? limitPerPage = default(int?));
|
Task<IEnumerable<TraktShow>> GetTrendingShows(int? page = default(int?), int? limitPerPage = default(int?));
|
||||||
Task<TraktShow> GetTvExtendedInfo(string imdbId);
|
Task<TraktShow> GetTvExtendedInfo(string imdbId);
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -9,7 +9,7 @@
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="TraktApiSharp" Version="1.0.0-alpha1-fixed-issue59" />
|
<PackageReference Include="TraktSharp.NetStandard2" Version="0.3.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|
|
@ -1,12 +1,11 @@
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Ombi.Helpers;
|
using Ombi.Helpers;
|
||||||
using TraktApiSharp;
|
using TraktSharp;
|
||||||
using TraktApiSharp.Enums;
|
using TraktSharp.Entities;
|
||||||
using TraktApiSharp.Objects.Get.Shows;
|
using TraktSharp.Enums;
|
||||||
using TraktApiSharp.Objects.Get.Shows.Common;
|
|
||||||
using TraktApiSharp.Requests.Parameters;
|
|
||||||
|
|
||||||
namespace Ombi.Api.Trakt
|
namespace Ombi.Api.Trakt
|
||||||
{
|
{
|
||||||
|
@ -18,36 +17,38 @@ namespace Ombi.Api.Trakt
|
||||||
private readonly string _apiKey = StringCipher.DecryptString(Encrypted, "ApiKey");
|
private readonly string _apiKey = StringCipher.DecryptString(Encrypted, "ApiKey");
|
||||||
public TraktApi()
|
public TraktApi()
|
||||||
{
|
{
|
||||||
Client = new TraktClient(_apiKey);
|
Client = new TraktClient
|
||||||
|
{
|
||||||
|
Authentication =
|
||||||
|
{
|
||||||
|
ClientId = _apiKey,
|
||||||
|
ClientSecret = "7beeb6f1c0c842341f6bd285adb86200cb810e431fff0a8a1ed7158af4cffbbb"
|
||||||
|
}
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<IEnumerable<TraktShow>> GetPopularShows(int? page = null, int? limitPerPage = null)
|
public async Task<IEnumerable<TraktShow>> GetPopularShows(int? page = null, int? limitPerPage = null)
|
||||||
{
|
{
|
||||||
var popular = await Client.Shows.GetPopularShowsAsync(new TraktExtendedInfo { Full = true, Images = true }, null, page ?? 1, limitPerPage ?? 10);
|
var popular = await Client.Shows.GetPopularShowsAsync(TraktExtendedOption.Full, page, limitPerPage);
|
||||||
return popular.Value;
|
return popular;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<IEnumerable<TraktTrendingShow>> GetTrendingShows(int? page = null, int? limitPerPage = null)
|
public async Task<IEnumerable<TraktShow>> GetTrendingShows(int? page = null, int? limitPerPage = null)
|
||||||
{
|
{
|
||||||
var trendingShowsTop10 = await Client.Shows.GetTrendingShowsAsync(new TraktExtendedInfo { Full = true, Images = true }, null, page ?? 1, limitPerPage ?? 10);
|
var trendingShowsTop10 = await Client.Shows.GetTrendingShowsAsync(TraktExtendedOption.Full, page, limitPerPage);
|
||||||
return trendingShowsTop10.Value;
|
return trendingShowsTop10.Select(x => x.Show);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<IEnumerable<TraktMostAnticipatedShow>> GetAnticipatedShows(int? page = null, int? limitPerPage = null)
|
public async Task<IEnumerable<TraktShow>> GetAnticipatedShows(int? page = null, int? limitPerPage = null)
|
||||||
{
|
{
|
||||||
var anticipatedShows = await Client.Shows.GetMostAnticipatedShowsAsync(new TraktExtendedInfo { Full = true, Images = true }, null, page ?? 1, limitPerPage ?? 10);
|
var anticipatedShows = await Client.Shows.GetAnticipatedShowsAsync(TraktExtendedOption.Full, page, limitPerPage);
|
||||||
return anticipatedShows.Value;
|
return anticipatedShows.Select(x => x.Show);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<IEnumerable<TraktMostWatchedShow>> GetMostWatchesShows(TraktTimePeriod period = null, int? page = null, int? limitPerPage = null)
|
|
||||||
{
|
|
||||||
var anticipatedShows = await Client.Shows.GetMostWatchedShowsAsync(period ?? TraktTimePeriod.Monthly, new TraktExtendedInfo { Full = true, Images = true }, null, page ?? 1, limitPerPage ?? 10);
|
|
||||||
return anticipatedShows.Value;
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<TraktShow> GetTvExtendedInfo(string imdbId)
|
public async Task<TraktShow> GetTvExtendedInfo(string imdbId)
|
||||||
{
|
{
|
||||||
return await Client.Shows.GetShowAsync(imdbId, new TraktExtendedInfo { Full = true });
|
return await Client.Shows.GetShowAsync(imdbId, TraktExtendedOption.Full);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,10 +25,9 @@ namespace Ombi.Core.Engine.Demo
|
||||||
{
|
{
|
||||||
|
|
||||||
public DemoTvSearchEngine(IPrincipal identity, IRequestServiceMain service, ITvMazeApi tvMaze, IMapper mapper,
|
public DemoTvSearchEngine(IPrincipal identity, IRequestServiceMain service, ITvMazeApi tvMaze, IMapper mapper,
|
||||||
ISettingsService<PlexSettings> plexSettings, ISettingsService<EmbySettings> embySettings, IPlexContentRepository repo,
|
ITraktApi trakt, IRuleEvaluator r, OmbiUserManager um, ICacheService memCache,
|
||||||
IEmbyContentRepository embyRepo, ITraktApi trakt, IRuleEvaluator r, OmbiUserManager um, ICacheService memCache,
|
|
||||||
ISettingsService<OmbiSettings> s, IRepository<RequestSubscription> sub, IOptions<DemoLists> lists)
|
ISettingsService<OmbiSettings> s, IRepository<RequestSubscription> sub, IOptions<DemoLists> lists)
|
||||||
: base(identity, service, tvMaze, mapper, plexSettings, embySettings, repo, embyRepo, trakt, r, um, memCache, s, sub)
|
: base(identity, service, tvMaze, mapper, trakt, r, um, memCache, s, sub)
|
||||||
{
|
{
|
||||||
_demoLists = lists.Value;
|
_demoLists = lists.Value;
|
||||||
}
|
}
|
||||||
|
@ -56,7 +55,7 @@ namespace Ombi.Core.Engine.Demo
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
retVal.Add(ProcessResult(tvMazeSearch));
|
retVal.Add(await ProcessResult(tvMazeSearch));
|
||||||
}
|
}
|
||||||
return retVal;
|
return retVal;
|
||||||
}
|
}
|
||||||
|
@ -78,7 +77,7 @@ namespace Ombi.Core.Engine.Demo
|
||||||
}
|
}
|
||||||
|
|
||||||
var movieResult = await TvMazeApi.ShowLookup(tv);
|
var movieResult = await TvMazeApi.ShowLookup(tv);
|
||||||
responses.Add(ProcessResult(movieResult));
|
responses.Add(await ProcessResult(movieResult));
|
||||||
}
|
}
|
||||||
|
|
||||||
return responses;
|
return responses;
|
||||||
|
|
|
@ -12,9 +12,7 @@ namespace Ombi.Core.Engine.Interfaces
|
||||||
Task<IEnumerable<SearchTvShowViewModel>> Popular(int currentlyLoaded, int amountToLoad);
|
Task<IEnumerable<SearchTvShowViewModel>> Popular(int currentlyLoaded, int amountToLoad);
|
||||||
Task<IEnumerable<SearchTvShowViewModel>> Anticipated();
|
Task<IEnumerable<SearchTvShowViewModel>> Anticipated();
|
||||||
Task<IEnumerable<SearchTvShowViewModel>> Anticipated(int currentlyLoaded, int amountToLoad);
|
Task<IEnumerable<SearchTvShowViewModel>> Anticipated(int currentlyLoaded, int amountToLoad);
|
||||||
Task<IEnumerable<SearchTvShowViewModel>> MostWatches();
|
|
||||||
Task<IEnumerable<SearchTvShowViewModel>> Trending();
|
Task<IEnumerable<SearchTvShowViewModel>> Trending();
|
||||||
Task<IEnumerable<SearchTvShowViewModel>> MostWatches(int currentlyLoaded, int amountToLoad);
|
|
||||||
Task<IEnumerable<SearchTvShowViewModel>> Trending(int currentlyLoaded, int amountToLoad);
|
Task<IEnumerable<SearchTvShowViewModel>> Trending(int currentlyLoaded, int amountToLoad);
|
||||||
int ResultLimit { get; set; }
|
int ResultLimit { get; set; }
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,33 +21,24 @@ using Ombi.Core.Authentication;
|
||||||
using Ombi.Helpers;
|
using Ombi.Helpers;
|
||||||
using Ombi.Settings.Settings.Models;
|
using Ombi.Settings.Settings.Models;
|
||||||
using Ombi.Store.Entities;
|
using Ombi.Store.Entities;
|
||||||
using TraktApiSharp.Objects.Get.Shows;
|
using TraktSharp.Entities;
|
||||||
using TraktApiSharp.Objects.Get.Shows.Common;
|
|
||||||
|
|
||||||
namespace Ombi.Core.Engine
|
namespace Ombi.Core.Engine
|
||||||
{
|
{
|
||||||
public class TvSearchEngine : BaseMediaEngine, ITvSearchEngine
|
public class TvSearchEngine : BaseMediaEngine, ITvSearchEngine
|
||||||
{
|
{
|
||||||
public TvSearchEngine(IPrincipal identity, IRequestServiceMain service, ITvMazeApi tvMaze, IMapper mapper, ISettingsService<PlexSettings> plexSettings,
|
public TvSearchEngine(IPrincipal identity, IRequestServiceMain service, ITvMazeApi tvMaze, IMapper mapper,
|
||||||
ISettingsService<EmbySettings> embySettings, IPlexContentRepository repo, IEmbyContentRepository embyRepo, ITraktApi trakt, IRuleEvaluator r, OmbiUserManager um,
|
ITraktApi trakt, IRuleEvaluator r, OmbiUserManager um,
|
||||||
ICacheService memCache, ISettingsService<OmbiSettings> s, IRepository<RequestSubscription> sub)
|
ICacheService memCache, ISettingsService<OmbiSettings> s, IRepository<RequestSubscription> sub)
|
||||||
: base(identity, service, r, um, memCache, s, sub)
|
: base(identity, service, r, um, memCache, s, sub)
|
||||||
{
|
{
|
||||||
TvMazeApi = tvMaze;
|
TvMazeApi = tvMaze;
|
||||||
Mapper = mapper;
|
Mapper = mapper;
|
||||||
PlexSettings = plexSettings;
|
|
||||||
EmbySettings = embySettings;
|
|
||||||
PlexContentRepo = repo;
|
|
||||||
TraktApi = trakt;
|
TraktApi = trakt;
|
||||||
EmbyContentRepo = embyRepo;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected ITvMazeApi TvMazeApi { get; }
|
protected ITvMazeApi TvMazeApi { get; }
|
||||||
protected IMapper Mapper { get; }
|
protected IMapper Mapper { get; }
|
||||||
private ISettingsService<PlexSettings> PlexSettings { get; }
|
|
||||||
private ISettingsService<EmbySettings> EmbySettings { get; }
|
|
||||||
private IPlexContentRepository PlexContentRepo { get; }
|
|
||||||
private IEmbyContentRepository EmbyContentRepo { get; }
|
|
||||||
private ITraktApi TraktApi { get; }
|
private ITraktApi TraktApi { get; }
|
||||||
|
|
||||||
public async Task<IEnumerable<SearchTvShowViewModel>> Search(string searchTerm)
|
public async Task<IEnumerable<SearchTvShowViewModel>> Search(string searchTerm)
|
||||||
|
@ -63,7 +54,7 @@ namespace Ombi.Core.Engine
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
retVal.Add(ProcessResult(tvMazeSearch));
|
retVal.Add(await ProcessResult(tvMazeSearch));
|
||||||
}
|
}
|
||||||
return retVal;
|
return retVal;
|
||||||
}
|
}
|
||||||
|
@ -129,7 +120,7 @@ namespace Ombi.Core.Engine
|
||||||
{
|
{
|
||||||
var result = await Cache.GetOrAdd(CacheKeys.PopularTv, async () => await TraktApi.GetPopularShows(null, ResultLimit), DateTime.Now.AddHours(12));
|
var result = await Cache.GetOrAdd(CacheKeys.PopularTv, async () => await TraktApi.GetPopularShows(null, ResultLimit), DateTime.Now.AddHours(12));
|
||||||
var processed = ProcessResults(result);
|
var processed = ProcessResults(result);
|
||||||
return processed;
|
return await processed;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<IEnumerable<SearchTvShowViewModel>> Popular(int currentlyLoaded, int amountToLoad)
|
public async Task<IEnumerable<SearchTvShowViewModel>> Popular(int currentlyLoaded, int amountToLoad)
|
||||||
|
@ -143,7 +134,7 @@ namespace Ombi.Core.Engine
|
||||||
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 processed;
|
return await processed;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<IEnumerable<SearchTvShowViewModel>> Anticipated()
|
public async Task<IEnumerable<SearchTvShowViewModel>> Anticipated()
|
||||||
|
@ -151,13 +142,13 @@ namespace Ombi.Core.Engine
|
||||||
|
|
||||||
var result = await Cache.GetOrAdd(CacheKeys.AnticipatedTv, async () => await TraktApi.GetAnticipatedShows(null, ResultLimit), DateTime.Now.AddHours(12));
|
var result = await Cache.GetOrAdd(CacheKeys.AnticipatedTv, async () => await TraktApi.GetAnticipatedShows(null, ResultLimit), DateTime.Now.AddHours(12));
|
||||||
var processed = ProcessResults(result);
|
var processed = ProcessResults(result);
|
||||||
return processed;
|
return await processed;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<IEnumerable<SearchTvShowViewModel>> Anticipated(int currentlyLoaded, int amountToLoad)
|
public async Task<IEnumerable<SearchTvShowViewModel>> Anticipated(int currentlyLoaded, int amountToLoad)
|
||||||
{
|
{
|
||||||
var pages = PaginationHelper.GetNextPages(currentlyLoaded, amountToLoad, ResultLimit);
|
var pages = PaginationHelper.GetNextPages(currentlyLoaded, amountToLoad, ResultLimit);
|
||||||
var results = new List<TraktMostAnticipatedShow>();
|
var results = new List<TraktShow>();
|
||||||
foreach (var pagesToLoad in pages)
|
foreach (var pagesToLoad in pages)
|
||||||
{
|
{
|
||||||
var apiResult = await Cache.GetOrAdd(nameof(Anticipated) + pagesToLoad.Page,
|
var apiResult = await Cache.GetOrAdd(nameof(Anticipated) + pagesToLoad.Page,
|
||||||
|
@ -165,41 +156,21 @@ namespace Ombi.Core.Engine
|
||||||
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 processed;
|
return await processed;
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<IEnumerable<SearchTvShowViewModel>> MostWatches()
|
|
||||||
{
|
|
||||||
var result = await Cache.GetOrAdd(CacheKeys.MostWatchesTv, async () => await TraktApi.GetMostWatchesShows(null, ResultLimit), DateTime.Now.AddHours(12));
|
|
||||||
var processed = ProcessResults(result);
|
|
||||||
return processed;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<IEnumerable<SearchTvShowViewModel>> Trending()
|
public async Task<IEnumerable<SearchTvShowViewModel>> Trending()
|
||||||
{
|
{
|
||||||
var result = await Cache.GetOrAdd(CacheKeys.TrendingTv, async () => await TraktApi.GetTrendingShows(null, ResultLimit), DateTime.Now.AddHours(12));
|
var result = await Cache.GetOrAdd(CacheKeys.TrendingTv, async () => await TraktApi.GetTrendingShows(null, ResultLimit), DateTime.Now.AddHours(12));
|
||||||
var processed = ProcessResults(result);
|
var processed = ProcessResults(result);
|
||||||
return processed;
|
return await processed;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<IEnumerable<SearchTvShowViewModel>> MostWatches(int currentlyLoaded, int amountToLoad)
|
|
||||||
{
|
|
||||||
var pages = PaginationHelper.GetNextPages(currentlyLoaded, amountToLoad, ResultLimit);
|
|
||||||
var results = new List<TraktMostWatchedShow>();
|
|
||||||
foreach (var pagesToLoad in pages)
|
|
||||||
{
|
|
||||||
var apiResult = await Cache.GetOrAdd(nameof(MostWatches) + pagesToLoad.Page,
|
|
||||||
async () => await TraktApi.GetMostWatchesShows(null, pagesToLoad.Page, ResultLimit), DateTime.Now.AddHours(12));
|
|
||||||
results.AddRange(apiResult.Skip(pagesToLoad.Skip).Take(pagesToLoad.Take));
|
|
||||||
}
|
|
||||||
var processed = ProcessResults(results);
|
|
||||||
return processed;
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<IEnumerable<SearchTvShowViewModel>> Trending(int currentlyLoaded, int amountToLoad)
|
public async Task<IEnumerable<SearchTvShowViewModel>> Trending(int currentlyLoaded, int amountToLoad)
|
||||||
{
|
{
|
||||||
var pages = PaginationHelper.GetNextPages(currentlyLoaded, amountToLoad, ResultLimit);
|
var pages = PaginationHelper.GetNextPages(currentlyLoaded, amountToLoad, ResultLimit);
|
||||||
var results = new List<TraktTrendingShow>();
|
var results = new List<TraktShow>();
|
||||||
foreach (var pagesToLoad in pages)
|
foreach (var pagesToLoad in pages)
|
||||||
{
|
{
|
||||||
var apiResult = await Cache.GetOrAdd(nameof(Trending) + pagesToLoad.Page,
|
var apiResult = await Cache.GetOrAdd(nameof(Trending) + pagesToLoad.Page,
|
||||||
|
@ -207,22 +178,23 @@ namespace Ombi.Core.Engine
|
||||||
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 processed;
|
return await processed;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected IEnumerable<SearchTvShowViewModel> ProcessResults<T>(IEnumerable<T> items)
|
protected async Task<IEnumerable<SearchTvShowViewModel>> ProcessResults<T>(IEnumerable<T> items)
|
||||||
{
|
{
|
||||||
var retVal = new List<SearchTvShowViewModel>();
|
var retVal = new List<SearchTvShowViewModel>();
|
||||||
foreach (var tvMazeSearch in items)
|
foreach (var tvMazeSearch in items)
|
||||||
{
|
{
|
||||||
retVal.Add(ProcessResult(tvMazeSearch));
|
retVal.Add(await ProcessResult(tvMazeSearch));
|
||||||
}
|
}
|
||||||
return retVal;
|
return retVal;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected SearchTvShowViewModel ProcessResult<T>(T tvMazeSearch)
|
protected async Task<SearchTvShowViewModel> ProcessResult<T>(T tvMazeSearch)
|
||||||
{
|
{
|
||||||
return Mapper.Map<SearchTvShowViewModel>(tvMazeSearch);
|
var mapped = Mapper.Map<SearchTvShowViewModel>(tvMazeSearch);
|
||||||
|
return await ProcessResult(mapped);
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task<SearchTvShowViewModel> ProcessResult(SearchTvShowViewModel item)
|
private async Task<SearchTvShowViewModel> ProcessResult(SearchTvShowViewModel item)
|
||||||
|
|
|
@ -5,7 +5,6 @@ using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Security.Principal;
|
using System.Security.Principal;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using TraktApiSharp.Objects.Get.Shows;
|
|
||||||
|
|
||||||
using Ombi.Core.Rule.Interfaces;
|
using Ombi.Core.Rule.Interfaces;
|
||||||
using Ombi.Store.Repository.Requests;
|
using Ombi.Store.Repository.Requests;
|
||||||
|
@ -21,6 +20,7 @@ using Ombi.Core.Models.Search.V2;
|
||||||
using Ombi.Core.Settings;
|
using Ombi.Core.Settings;
|
||||||
using Ombi.Core.Settings.Models.External;
|
using Ombi.Core.Settings.Models.External;
|
||||||
using Ombi.Store.Repository;
|
using Ombi.Store.Repository;
|
||||||
|
using TraktSharp.Entities;
|
||||||
|
|
||||||
namespace Ombi.Core.Engine.V2
|
namespace Ombi.Core.Engine.V2
|
||||||
{
|
{
|
||||||
|
@ -148,9 +148,9 @@ namespace Ombi.Core.Engine.V2
|
||||||
return model;
|
return model;
|
||||||
}
|
}
|
||||||
|
|
||||||
model.Trailer = result.Trailer;
|
model.Trailer = result.Trailer.AbsoluteUri;
|
||||||
model.Certification = result.Certification;
|
model.Certification = result.Certification;
|
||||||
model.Homepage = result.Homepage;
|
model.Homepage = result.Homepage.AbsoluteUri;
|
||||||
|
|
||||||
return model;
|
return model;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,15 +2,10 @@
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
using AutoMapper;
|
using AutoMapper;
|
||||||
using Ombi.Api.TvMaze.Models;
|
using Ombi.Api.TvMaze.Models;
|
||||||
using Ombi.Core.Models.Requests;
|
|
||||||
using Ombi.Core.Models.Search;
|
using Ombi.Core.Models.Search;
|
||||||
using Ombi.Helpers;
|
using Ombi.Helpers;
|
||||||
using TraktApiSharp.Objects.Get.Shows;
|
using TraktSharp.Entities;
|
||||||
using TraktApiSharp.Objects.Get.Shows.Common;
|
using TraktSharp.Helpers;
|
||||||
using Ombi.Store.Repository.Requests;
|
|
||||||
|
|
||||||
//using TraktApiSharp.Objects.Get.Shows;
|
|
||||||
//using TraktApiSharp.Objects.Get.Shows.Common;
|
|
||||||
|
|
||||||
namespace Ombi.Mapping.Profiles
|
namespace Ombi.Mapping.Profiles
|
||||||
{
|
{
|
||||||
|
@ -51,78 +46,18 @@ namespace Ombi.Mapping.Profiles
|
||||||
.ForMember(dest => dest.Status, opts => opts.MapFrom(src => src.status));
|
.ForMember(dest => dest.Status, opts => opts.MapFrom(src => src.status));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//CreateMap<TvMazeCustomSeason, SeasonRequests>()
|
|
||||||
// .ConstructUsing(x =>
|
|
||||||
// {
|
|
||||||
// var season = new SeasonRequests
|
|
||||||
// {
|
|
||||||
// SeasonNumber = x.SeasonNumber
|
|
||||||
// };
|
|
||||||
// foreach (var ep in x.EpisodeNumber)
|
|
||||||
// {
|
|
||||||
// season.Episodes.Add(new EpisodeRequests
|
|
||||||
// {
|
|
||||||
// EpisodeNumber = ep,
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
// return season;
|
|
||||||
// });
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
CreateMap<TraktShow, SearchTvShowViewModel>()
|
CreateMap<TraktShow, SearchTvShowViewModel>()
|
||||||
.ForMember(dest => dest.Id, opts => opts.MapFrom(src => Convert.ToInt32(src.Ids.Tvdb.ToString())))
|
.ForMember(dest => dest.Id, opts => opts.MapFrom(src => Convert.ToInt32(src.Ids.Tvdb.ToString())))
|
||||||
.ForMember(dest => dest.FirstAired, opts => opts.MapFrom(src => src.FirstAired.HasValue ? src.FirstAired.Value.ToString("yyyy-MM-ddTHH:mm:ss") : string.Empty))
|
.ForMember(dest => dest.FirstAired, opts => opts.MapFrom(src => src.FirstAired.HasValue ? src.FirstAired.Value.ToString("yyyy-MM-ddTHH:mm:ss") : string.Empty))
|
||||||
.ForMember(dest => dest.Banner, opts => opts.MapFrom(src => src.Images.Banner.Full))
|
|
||||||
.ForMember(dest => dest.ImdbId, opts => opts.MapFrom(src => src.Ids.Imdb))
|
.ForMember(dest => dest.ImdbId, opts => opts.MapFrom(src => src.Ids.Imdb))
|
||||||
.ForMember(dest => dest.Network, opts => opts.MapFrom(src => src.Network))
|
.ForMember(dest => dest.Network, opts => opts.MapFrom(src => src.Network))
|
||||||
.ForMember(dest => dest.Overview, opts => opts.MapFrom(src => src.Overview.RemoveHtml()))
|
.ForMember(dest => dest.Overview, opts => opts.MapFrom(src => src.Overview.RemoveHtml()))
|
||||||
.ForMember(dest => dest.Rating, opts => opts.MapFrom(src => src.Rating.ToString()))
|
.ForMember(dest => dest.Rating, opts => opts.MapFrom(src => src.Rating.ToString()))
|
||||||
.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.Status, opts => opts.MapFrom(src => src.Status.DisplayName))
|
.ForMember(dest => dest.Status, opts => opts.MapFrom(src => TraktEnumHelper.GetDescription(src.Status)))
|
||||||
.ForMember(dest => dest.Trailer, opts => opts.MapFrom(src => src.Trailer))
|
.ForMember(dest => dest.Trailer, opts => opts.MapFrom(src => src.Trailer))
|
||||||
.ForMember(dest => dest.Homepage, opts => opts.MapFrom(src => src.Homepage));
|
.ForMember(dest => dest.Homepage, opts => opts.MapFrom(src => src.Homepage));
|
||||||
|
|
||||||
CreateMap<TraktTrendingShow, SearchTvShowViewModel>()
|
|
||||||
.ForMember(dest => dest.Id, opts => opts.MapFrom(src => Convert.ToInt32(src.Show.Ids.Tvdb.ToString())))
|
|
||||||
.ForMember(dest => dest.FirstAired, opts => opts.MapFrom(src => src.Show.FirstAired.HasValue ? src.Show.FirstAired.Value.ToString("yyyy-MM-ddTHH:mm:ss") : string.Empty))
|
|
||||||
.ForMember(dest => dest.ImdbId, opts => opts.MapFrom(src => src.Show.Ids.Imdb))
|
|
||||||
.ForMember(dest => dest.Network, opts => opts.MapFrom(src => src.Show.Network))
|
|
||||||
.ForMember(dest => dest.Overview, opts => opts.MapFrom(src => src.Show.Overview.RemoveHtml()))
|
|
||||||
.ForMember(dest => dest.Rating, opts => opts.MapFrom(src => src.Show.Rating.ToString()))
|
|
||||||
.ForMember(dest => dest.Runtime, opts => opts.MapFrom(src => src.Show.Runtime.ToString()))
|
|
||||||
.ForMember(dest => dest.Title, opts => opts.MapFrom(src => src.Show.Title))
|
|
||||||
.ForMember(dest => dest.Status, opts => opts.MapFrom(src => src.Show.Status.DisplayName))
|
|
||||||
.ForMember(dest => dest.Trailer, opts => opts.MapFrom(src => src.Show.Trailer))
|
|
||||||
.ForMember(dest => dest.Homepage, opts => opts.MapFrom(src => src.Show.Homepage));
|
|
||||||
|
|
||||||
CreateMap<TraktMostAnticipatedShow, SearchTvShowViewModel>()
|
|
||||||
.ForMember(dest => dest.Id, opts => opts.MapFrom(src => Convert.ToInt32(src.Show.Ids.Tvdb.ToString())))
|
|
||||||
.ForMember(dest => dest.FirstAired, opts => opts.MapFrom(src => src.Show.FirstAired.HasValue ? src.Show.FirstAired.Value.ToString("yyyy-MM-ddTHH:mm:ss") : string.Empty))
|
|
||||||
.ForMember(dest => dest.ImdbId, opts => opts.MapFrom(src => src.Show.Ids.Imdb))
|
|
||||||
.ForMember(dest => dest.Network, opts => opts.MapFrom(src => src.Show.Network))
|
|
||||||
.ForMember(dest => dest.Overview, opts => opts.MapFrom(src => src.Show.Overview.RemoveHtml()))
|
|
||||||
.ForMember(dest => dest.Rating, opts => opts.MapFrom(src => src.Show.Rating.ToString()))
|
|
||||||
.ForMember(dest => dest.Runtime, opts => opts.MapFrom(src => src.Show.Runtime.ToString()))
|
|
||||||
.ForMember(dest => dest.Title, opts => opts.MapFrom(src => src.Show.Title))
|
|
||||||
.ForMember(dest => dest.Status, opts => opts.MapFrom(src => src.Show.Status.DisplayName))
|
|
||||||
.ForMember(dest => dest.Trailer, opts => opts.MapFrom(src => src.Show.Trailer))
|
|
||||||
.ForMember(dest => dest.Homepage, opts => opts.MapFrom(src => src.Show.Homepage));
|
|
||||||
|
|
||||||
CreateMap<TraktMostWatchedShow, SearchTvShowViewModel>()
|
|
||||||
.ForMember(dest => dest.Id, opts => opts.MapFrom(src => Convert.ToInt32(src.Show.Ids.Tvdb.ToString())))
|
|
||||||
.ForMember(dest => dest.FirstAired, opts => opts.MapFrom(src => src.Show.FirstAired.HasValue ? src.Show.FirstAired.Value.ToString("yyyy-MM-ddTHH:mm:ss") : string.Empty))
|
|
||||||
.ForMember(dest => dest.ImdbId, opts => opts.MapFrom(src => src.Show.Ids.Imdb))
|
|
||||||
.ForMember(dest => dest.Network, opts => opts.MapFrom(src => src.Show.Network))
|
|
||||||
.ForMember(dest => dest.Overview, opts => opts.MapFrom(src => src.Show.Overview.RemoveHtml()))
|
|
||||||
.ForMember(dest => dest.Rating, opts => opts.MapFrom(src => src.Show.Rating.ToString()))
|
|
||||||
.ForMember(dest => dest.Runtime, opts => opts.MapFrom(src => src.Show.Runtime.ToString()))
|
|
||||||
.ForMember(dest => dest.Title, opts => opts.MapFrom(src => src.Show.Title))
|
|
||||||
.ForMember(dest => dest.Status, opts => opts.MapFrom(src => src.Show.Status.DisplayName))
|
|
||||||
.ForMember(dest => dest.Trailer, opts => opts.MapFrom(src => src.Show.Trailer))
|
|
||||||
.ForMember(dest => dest.Homepage, opts => opts.MapFrom(src => src.Show.Homepage));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,9 +1,11 @@
|
||||||
import { Component, OnInit, Input } from "@angular/core";
|
import { Component, OnInit, Input } from "@angular/core";
|
||||||
import { IDiscoverCardResult } from "../../interfaces";
|
import { IDiscoverCardResult } from "../../interfaces";
|
||||||
import { RequestType, ISearchTvResult, ISearchMovieResult } from "../../../interfaces";
|
import { RequestType, ISearchTvResult, ISearchMovieResult } from "../../../interfaces";
|
||||||
import { SearchService } from "../../../services";
|
import { SearchV2Service } from "../../../services";
|
||||||
import { MatDialog } from "@angular/material";
|
import { MatDialog } from "@angular/material";
|
||||||
import { DiscoverCardDetailsComponent } from "./discover-card-details.component";
|
import { DiscoverCardDetailsComponent } from "./discover-card-details.component";
|
||||||
|
import { ISearchTvResultV2 } from "../../interfaces/ISearchTvResultV2";
|
||||||
|
import { ISearchMovieResultV2 } from "../../interfaces/ISearchMovieResultV2";
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: "discover-card",
|
selector: "discover-card",
|
||||||
|
@ -15,7 +17,7 @@ export class DiscoverCardComponent implements OnInit {
|
||||||
@Input() public result: IDiscoverCardResult;
|
@Input() public result: IDiscoverCardResult;
|
||||||
public RequestType = RequestType;
|
public RequestType = RequestType;
|
||||||
|
|
||||||
constructor(private searchService: SearchService, private dialog: MatDialog) { }
|
constructor(private searchService: SearchV2Service, private dialog: MatDialog) { }
|
||||||
|
|
||||||
public ngOnInit() {
|
public ngOnInit() {
|
||||||
if (this.result.type == RequestType.tvShow) {
|
if (this.result.type == RequestType.tvShow) {
|
||||||
|
@ -34,23 +36,22 @@ export class DiscoverCardComponent implements OnInit {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public getExtraTvInfo() {
|
public async getExtraTvInfo() {
|
||||||
this.searchService.getShowInformation(this.result.id)
|
var result = await this.searchService.getTvInfo(this.result.id);
|
||||||
.subscribe(x => {
|
this.setTvDefaults(result);
|
||||||
if (x) {
|
this.updateTvItem(result);
|
||||||
this.setTvDefaults(x);
|
|
||||||
this.updateTvItem(x);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
private getExtraMovieInfo() {
|
private getExtraMovieInfo() {
|
||||||
this.searchService.getMovieInformation(this.result.id)
|
// if(!this.result.imdbid) {
|
||||||
.subscribe(m => {
|
this.searchService.getFullMovieDetails(this.result.id)
|
||||||
this.updateMovieItem(m);
|
.subscribe(m => {
|
||||||
});
|
this.updateMovieItem(m);
|
||||||
|
});
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
private updateMovieItem(updated: ISearchMovieResult) {
|
private updateMovieItem(updated: ISearchMovieResultV2) {
|
||||||
this.result.url = "http://www.imdb.com/title/" + updated.imdbId + "/";
|
this.result.url = "http://www.imdb.com/title/" + updated.imdbId + "/";
|
||||||
this.result.available = updated.available;
|
this.result.available = updated.available;
|
||||||
this.result.requested = updated.requested;
|
this.result.requested = updated.requested;
|
||||||
|
@ -59,7 +60,7 @@ export class DiscoverCardComponent implements OnInit {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private setTvDefaults(x: ISearchTvResult) {
|
private setTvDefaults(x: ISearchTvResultV2) {
|
||||||
if (!x.imdbId) {
|
if (!x.imdbId) {
|
||||||
x.imdbId = "https://www.tvmaze.com/shows/" + x.seriesId;
|
x.imdbId = "https://www.tvmaze.com/shows/" + x.seriesId;
|
||||||
} else {
|
} else {
|
||||||
|
@ -67,7 +68,7 @@ export class DiscoverCardComponent implements OnInit {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private updateTvItem(updated: ISearchTvResult) {
|
private updateTvItem(updated: ISearchTvResultV2) {
|
||||||
this.result.title = updated.title;
|
this.result.title = updated.title;
|
||||||
this.result.id = updated.id;
|
this.result.id = updated.id;
|
||||||
this.result.available = updated.fullyAvailable;
|
this.result.available = updated.fullyAvailable;
|
||||||
|
|
|
@ -53,9 +53,7 @@ export class DiscoverComponent implements OnInit {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!this.isScrolling) {
|
if (!this.isScrolling) {
|
||||||
debugger;
|
|
||||||
this.isScrolling = true;
|
this.isScrolling = true;
|
||||||
console.log("SCROLLED!")
|
|
||||||
this.loading();
|
this.loading();
|
||||||
if (this.popularActive) {
|
if (this.popularActive) {
|
||||||
this.movies = await this.searchService.popularMoviesByPage(this.contentLoaded, 12);
|
this.movies = await this.searchService.popularMoviesByPage(this.contentLoaded, 12);
|
||||||
|
@ -138,7 +136,8 @@ export class DiscoverComponent implements OnInit {
|
||||||
url: `http://www.imdb.com/title/${m.imdbId}/`,
|
url: `http://www.imdb.com/title/${m.imdbId}/`,
|
||||||
rating: m.voteAverage,
|
rating: m.voteAverage,
|
||||||
overview: m.overview,
|
overview: m.overview,
|
||||||
approved: m.approved
|
approved: m.approved,
|
||||||
|
imdbid: m.imdbId
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
this.tvShows.forEach(m => {
|
this.tvShows.forEach(m => {
|
||||||
|
@ -152,7 +151,8 @@ export class DiscoverComponent implements OnInit {
|
||||||
url: undefined,
|
url: undefined,
|
||||||
rating: +m.rating,
|
rating: +m.rating,
|
||||||
overview: m.overview,
|
overview: m.overview,
|
||||||
approved: m.approved
|
approved: m.approved,
|
||||||
|
imdbid: m.imdbId
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
this.shuffle(tempResults);
|
this.shuffle(tempResults);
|
||||||
|
@ -173,7 +173,8 @@ export class DiscoverComponent implements OnInit {
|
||||||
url: `http://www.imdb.com/title/${m.imdbId}/`,
|
url: `http://www.imdb.com/title/${m.imdbId}/`,
|
||||||
rating: m.voteAverage,
|
rating: m.voteAverage,
|
||||||
overview: m.overview,
|
overview: m.overview,
|
||||||
approved: m.approved
|
approved: m.approved,
|
||||||
|
imdbid: m.imdbId
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
this.tvShows.forEach(m => {
|
this.tvShows.forEach(m => {
|
||||||
|
@ -187,7 +188,8 @@ export class DiscoverComponent implements OnInit {
|
||||||
url: undefined,
|
url: undefined,
|
||||||
rating: +m.rating,
|
rating: +m.rating,
|
||||||
overview: m.overview,
|
overview: m.overview,
|
||||||
approved: m.approved
|
approved: m.approved,
|
||||||
|
imdbid: m.imdbId
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
this.shuffle(this.discoverResults);
|
this.shuffle(this.discoverResults);
|
||||||
|
|
|
@ -11,4 +11,5 @@ export interface IDiscoverCardResult {
|
||||||
requested: boolean;
|
requested: boolean;
|
||||||
rating: number;
|
rating: number;
|
||||||
overview: string;
|
overview: string;
|
||||||
|
imdbid: string;
|
||||||
}
|
}
|
|
@ -1,4 +1,5 @@
|
||||||
using System.Collections.Generic;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Microsoft.AspNetCore.Authorization;
|
using Microsoft.AspNetCore.Authorization;
|
||||||
using Microsoft.AspNetCore.Http;
|
using Microsoft.AspNetCore.Http;
|
||||||
|
@ -309,13 +310,14 @@ namespace Ombi.Controllers.V1
|
||||||
[HttpGet("tv/mostwatched")]
|
[HttpGet("tv/mostwatched")]
|
||||||
[ProducesResponseType(StatusCodes.Status200OK)]
|
[ProducesResponseType(StatusCodes.Status200OK)]
|
||||||
[ProducesDefaultResponseType]
|
[ProducesDefaultResponseType]
|
||||||
|
[Obsolete("This method is obsolete, Trakt API no longer supports this")]
|
||||||
public async Task<IEnumerable<SearchTvShowViewModel>> MostWatched()
|
public async Task<IEnumerable<SearchTvShowViewModel>> MostWatched()
|
||||||
{
|
{
|
||||||
if (IsDemo)
|
if (IsDemo)
|
||||||
{
|
{
|
||||||
return await DemoTvSearch.NowPlayingMovies();
|
return await DemoTvSearch.NowPlayingMovies();
|
||||||
}
|
}
|
||||||
return await TvEngine.MostWatches();
|
return await TvEngine.Popular();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
using Microsoft.AspNetCore.Authorization;
|
using System;
|
||||||
|
using Microsoft.AspNetCore.Authorization;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Microsoft.AspNetCore.Http;
|
using Microsoft.AspNetCore.Http;
|
||||||
|
|
||||||
|
@ -274,9 +275,10 @@ namespace Ombi.Controllers.V2
|
||||||
[HttpGet("tv/mostwatched")]
|
[HttpGet("tv/mostwatched")]
|
||||||
[ProducesResponseType(StatusCodes.Status200OK)]
|
[ProducesResponseType(StatusCodes.Status200OK)]
|
||||||
[ProducesDefaultResponseType]
|
[ProducesDefaultResponseType]
|
||||||
|
[Obsolete("This method is obsolete, Trakt API no longer supports this")]
|
||||||
public async Task<IEnumerable<SearchTvShowViewModel>> MostWatched()
|
public async Task<IEnumerable<SearchTvShowViewModel>> MostWatched()
|
||||||
{
|
{
|
||||||
return await _tvSearchEngine.MostWatches();
|
return await _tvSearchEngine.Popular();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -287,9 +289,10 @@ namespace Ombi.Controllers.V2
|
||||||
[HttpGet("tv/mostwatched/{currentPosition}/{amountToLoad}")]
|
[HttpGet("tv/mostwatched/{currentPosition}/{amountToLoad}")]
|
||||||
[ProducesResponseType(StatusCodes.Status200OK)]
|
[ProducesResponseType(StatusCodes.Status200OK)]
|
||||||
[ProducesDefaultResponseType]
|
[ProducesDefaultResponseType]
|
||||||
|
[Obsolete("This method is obsolete, Trakt API no longer supports this")]
|
||||||
public async Task<IEnumerable<SearchTvShowViewModel>> MostWatched(int currentPosition, int amountToLoad)
|
public async Task<IEnumerable<SearchTvShowViewModel>> MostWatched(int currentPosition, int amountToLoad)
|
||||||
{
|
{
|
||||||
return await _tvSearchEngine.MostWatches(currentPosition, amountToLoad);
|
return await _tvSearchEngine.Popular(currentPosition, amountToLoad);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue