private Response SearchTvShow(string searchTerm) { Log.Trace("Searching for TV Show {0}", searchTerm); var taskList = new List <Task>(); var apiTv = new List <TvMazeSearch>(); taskList.Add(Task.Factory.StartNew(() => { return(new TvMazeApi().Search(searchTerm)); }).ContinueWith((t) => { apiTv = t.Result; })); var dbTv = new Dictionary <int, RequestedModel>(); taskList.Add(Task.Factory.StartNew(() => { return(RequestService.GetAll().Where(x => x.Type == RequestType.TvShow)); }).ContinueWith((t) => { dbTv = t.Result.ToDictionary(x => x.ProviderId); })); Task.WaitAll(taskList.ToArray()); if (!apiTv.Any()) { Log.Trace("TV Show data is null"); return(Response.AsJson("")); } var sonarrCached = SonarrCacher.QueuedIds(); var sickRageCache = SickRageCacher.QueuedIds(); // consider just merging sonarr/sickrage arrays var plexTvShows = Checker.GetPlexTvShows(); var viewTv = new List <SearchTvShowViewModel>(); foreach (var t in apiTv) { var viewT = new SearchTvShowViewModel { // We are constructing the banner with the id: // http://thetvdb.com/banners/_cache/posters/ID-1.jpg Banner = t.show.image?.medium, FirstAired = t.show.premiered, Id = t.show.externals?.thetvdb ?? 0, ImdbId = t.show.externals?.imdb, Network = t.show.network?.name, NetworkId = t.show.network?.id.ToString(), Overview = t.show.summary.RemoveHtml(), Rating = t.score.ToString(CultureInfo.CurrentUICulture), Runtime = t.show.runtime.ToString(), SeriesId = t.show.id, SeriesName = t.show.name, Status = t.show.status }; if (Checker.IsTvShowAvailable(plexTvShows.ToArray(), t.show.name, t.show.premiered?.Substring(0, 4))) { viewT.Available = true; } else if (t.show?.externals?.thetvdb != null) { int tvdbid = (int)t.show.externals.thetvdb; if (dbTv.ContainsKey(tvdbid)) { var dbt = dbTv[tvdbid]; viewT.Requested = true; viewT.Approved = dbt.Approved; viewT.Available = dbt.Available; } else if (sonarrCached.Contains(tvdbid) || sickRageCache.Contains(tvdbid)) // compare to the sonarr/sickrage db { viewT.Requested = true; } } viewTv.Add(viewT); } Log.Trace("Returning TV Show results: "); Log.Trace(viewTv.DumpJson()); return(Response.AsJson(viewTv)); }
private async Task <Response> ScheduleRun(string key) { if (key.Equals(JobNames.PlexCacher, StringComparison.CurrentCultureIgnoreCase)) { PlexContentCacher.CacheContent(); } if (key.Equals(JobNames.WatcherCacher, StringComparison.CurrentCultureIgnoreCase)) { WatcherCacher.Queued(); } if (key.Equals(JobNames.SonarrCacher, StringComparison.CurrentCultureIgnoreCase)) { SonarrCacher.Queued(); } if (key.Equals(JobNames.RadarrCacher, StringComparison.CurrentCultureIgnoreCase)) { RadarrCacher.Queued(); } if (key.Equals(JobNames.CpCacher, StringComparison.CurrentCultureIgnoreCase)) { CpCacher.Queued(); } if (key.Equals(JobNames.StoreBackup, StringComparison.CurrentCultureIgnoreCase)) { StoreBackup.Start(); } if (key.Equals(JobNames.SrCacher, StringComparison.CurrentCultureIgnoreCase)) { SrCacher.Queued(); } if (key.Equals(JobNames.PlexChecker, StringComparison.CurrentCultureIgnoreCase)) { AvailabilityChecker.Start(); } if (key.Equals(JobNames.StoreCleanup, StringComparison.CurrentCultureIgnoreCase)) { StoreCleanup.Start(); } if (key.Equals(JobNames.RequestLimitReset, StringComparison.CurrentCultureIgnoreCase)) { RequestLimit.Start(); } if (key.Equals(JobNames.EpisodeCacher, StringComparison.CurrentCultureIgnoreCase)) { EpisodeCacher.Start(); } if (key.Equals(JobNames.RecentlyAddedEmail, StringComparison.CurrentCultureIgnoreCase)) { RecentlyAdded.Start(); } if (key.Equals(JobNames.FaultQueueHandler, StringComparison.CurrentCultureIgnoreCase)) { FaultQueueHandler.Start(); } if (key.Equals(JobNames.PlexUserChecker, StringComparison.CurrentCultureIgnoreCase)) { RequestLimit.Start(); } return(Response.AsJson(new JsonResponseModel { Result = true })); }