Exemplo n.º 1
0
        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));
        }
Exemplo n.º 2
0
        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
            }));
        }