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, ISettingsService plexSettings, ISettingsService embySettings, IPlexContentRepository repo, IEmbyContentRepository embyRepo, ITraktApi trakt, IRuleEvaluator r, OmbiUserManager um, ICacheService memCache, ISettingsService s, IRepository sub, IOptions lists) : base(identity, service, tvMaze, mapper, plexSettings, embySettings, repo, embyRepo, 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(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(ProcessResult(movieResult)); } return responses; } } public interface IDemoTvSearchEngine { Task> Search(string search); Task> NowPlayingMovies(); } }