pull/3895/head
tidusjar 5 years ago
parent eaa4a7ec1c
commit 4fb965e782

@ -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…
Cancel
Save