using AutoMapper; using Microsoft.Extensions.Options; using Ombi.Api.Trakt; using Ombi.Api.TvMaze; using Ombi.Config; using Ombi.Core.Authentication; using Ombi.Core.Models.Requests; using Ombi.Core.Models.Search; using Ombi.Core.Rule.Interfaces; using Ombi.Core.Settings; using Ombi.Core.Settings.Models.External; using Ombi.Helpers; using Ombi.Settings.Settings.Models; using Ombi.Store.Entities; using Ombi.Store.Repository; using System; using System.Collections.Generic; using System.Linq; using System.Security.Principal; using System.Threading.Tasks; namespace Ombi.Core.Engine.Demo { public class DemoTvSearchEngine : TvSearchEngine, IDemoTvSearchEngine { public DemoTvSearchEngine(IPrincipal identity, IRequestServiceMain service, ITvMazeApi tvMaze, IMapper mapper, ITraktApi trakt, IRuleEvaluator r, OmbiUserManager um, ICacheService memCache, ISettingsService s, IRepository sub, IOptions lists) : base(identity, service, tvMaze, mapper, trakt, r, um, memCache, s, sub) { _demoLists = lists.Value; } private readonly DemoLists _demoLists; public async Task> Search(string search) { var searchResult = await TvMazeApi.Search(search); for (var i = 0; i < searchResult.Count; i++) { if (!_demoLists.TvShows.Contains(searchResult[i].show?.externals?.thetvdb ?? 0)) { searchResult.RemoveAt(i); } } if (searchResult != null) { var retVal = new List(); foreach (var tvMazeSearch in searchResult) { if (tvMazeSearch.show.externals == null || !(tvMazeSearch.show.externals?.thetvdb.HasValue ?? false)) { continue; } retVal.Add(await ProcessResult(tvMazeSearch)); } return retVal; } return null; } public async Task> NowPlayingMovies() { var rand = new Random(); var responses = new List(); for (int i = 0; i < 10; i++) { var item = rand.Next(_demoLists.TvShows.Length); var tv = _demoLists.TvShows[item]; if (responses.Any(x => x.Id == tv)) { i--; continue; } var movieResult = await TvMazeApi.ShowLookup(tv); responses.Add(await ProcessResult(movieResult)); } return responses; } } public interface IDemoTvSearchEngine { Task> Search(string search); Task> NowPlayingMovies(); } }