Example #1
0
        /// <summary>
        /// Fetches the series data.
        /// </summary>
        /// <param name="series">The series.</param>
        /// <param name="seriesId">The series id.</param>
        /// <param name="cancellationToken">The cancellation token.</param>
        /// <returns>Task{System.Boolean}.</returns>
        private async Task <bool> FetchSeriesData(Series series, string seriesId, CancellationToken cancellationToken)
        {
            var success = false;

            var name = series.Name;

            Logger.Debug("TvDbProvider: Fetching series data: " + name);

            if (!string.IsNullOrEmpty(seriesId))
            {
                string url = string.Format(seriesGet, TVUtils.TVDBApiKey, seriesId, ConfigurationManager.Configuration.PreferredMetadataLanguage);
                var    doc = new XmlDocument();

                try
                {
                    using (var xml = await HttpClient.Get(url, TvDbResourcePool, cancellationToken).ConfigureAwait(false))
                    {
                        doc.Load(xml);
                    }
                }
                catch (HttpException)
                {
                }

                if (doc.HasChildNodes)
                {
                    //kick off the actor and image fetch simultaneously
                    var actorTask = FetchActors(series, seriesId, doc, cancellationToken);
                    var imageTask = FetchImages(series, seriesId, cancellationToken);

                    success = true;

                    series.Name            = doc.SafeGetString("//SeriesName");
                    series.Overview        = doc.SafeGetString("//Overview");
                    series.CommunityRating = doc.SafeGetSingle("//Rating", 0, 10);
                    series.AirDays         = TVUtils.GetAirDays(doc.SafeGetString("//Airs_DayOfWeek"));
                    series.AirTime         = doc.SafeGetString("//Airs_Time");

                    string n = doc.SafeGetString("//banner");
                    if (!string.IsNullOrWhiteSpace(n))
                    {
                        series.SetImage(ImageType.Banner, await _providerManager.DownloadAndSaveImage(series, TVUtils.BannerUrl + n, "banner" + Path.GetExtension(n), TvDbResourcePool, cancellationToken).ConfigureAwait(false));
                    }

                    string s = doc.SafeGetString("//Network");
                    if (!string.IsNullOrWhiteSpace(s))
                    {
                        series.AddStudios(new List <string>(s.Trim().Split('|')));
                    }

                    series.OfficialRating = doc.SafeGetString("//ContentRating");

                    string g = doc.SafeGetString("//Genre");

                    if (g != null)
                    {
                        string[] genres = g.Trim('|').Split('|');
                        if (g.Length > 0)
                        {
                            series.AddGenres(genres);
                        }
                    }

                    //wait for other tasks
                    await Task.WhenAll(actorTask, imageTask).ConfigureAwait(false);

                    if (ConfigurationManager.Configuration.SaveLocalMeta)
                    {
                        var ms = new MemoryStream();
                        doc.Save(ms);

                        await _providerManager.SaveToLibraryFilesystem(series, Path.Combine(series.MetaLocation, LOCAL_META_FILE_NAME), ms, cancellationToken).ConfigureAwait(false);
                    }
                }
            }



            return(success);
        }