Пример #1
0
        private static void processSeriesDescriptionsResponses()
        {
            // process request response
            foreach (KeyValuePair <string, sdGenericDescriptions> response in seriesDescriptionResponses)
            {
                ++processedObjects; reportProgress();

                string series_id = response.Key.Replace("EP", "SH");
                sdGenericDescriptions description = response.Value;

                // determine which seriesInfo this belongs to
                MxfSeriesInfo mxfSeriesInfo = sdMxf.With[0].getSeriesInfo(series_id.Substring(2, 8));

                // populate descriptions
                mxfSeriesInfo.ShortDescription = description.Description100;
                mxfSeriesInfo.Description      = description.Description1000;

                // serialize JSON directly to a file
                string filepath = string.Format("{0}\\{1}", Helper.Epg123CacheFolder, series_id);
                using (StreamWriter writer = File.CreateText(filepath))
                {
                    try
                    {
                        JsonSerializer serializer = new JsonSerializer();
                        serializer.Serialize(writer, description);
                    }
                    catch { }
                }
            }
        }
Пример #2
0
        private static void processSeriesImageResponses()
        {
            // process request response
            foreach (sdArtworkResponse response in seriesImageResponses)
            {
                ++processedObjects; reportProgress();

                if (response.Data != null)
                {
                    MxfSeriesInfo mxfSeriesInfo = null;
                    if (response.ProgramID.StartsWith("SP"))
                    {
                        foreach (string key in sportsSeries.AllKeys)
                        {
                            if (sportsSeries.Get(key).Contains(response.ProgramID.Substring(0, 10)))
                            {
                                mxfSeriesInfo = sdMxf.With[0].getSeriesInfo(key);
                            }
                        }
                    }
                    else
                    {
                        mxfSeriesInfo = sdMxf.With[0].getSeriesInfo(response.ProgramID.Substring(2, 8));
                    }
                    if (mxfSeriesInfo == null || !string.IsNullOrEmpty(mxfSeriesInfo.GuideImage))
                    {
                        return;
                    }

                    // get series images
                    mxfSeriesInfo.seriesImages = getSeriesImages(response.Data);

                    if (mxfSeriesInfo.seriesImages.Count > 0)
                    {
                        string mxfAspect = config.SeriesPosterArt ? "2x3" : "4x3";
                        var    image     = mxfSeriesInfo.seriesImages.Where(arg => arg.Aspect.ToLower().Equals(mxfAspect)).SingleOrDefault();
                        if (image != null)
                        {
                            mxfSeriesInfo.GuideImage = sdMxf.With[0].getGuideImage(image.Uri).Id;

                            // add to archive for no other reason than to see it
                            newImageLibrary.Images.Add(new archiveImage()
                            {
                                Title    = mxfSeriesInfo.Title,
                                Url      = image.Uri,
                                Zap2itId = mxfSeriesInfo.tmsSeriesId,
                                Height   = image.Height,
                                Width    = image.Width
                            });
                        }
                    }
                }
            }
        }
Пример #3
0
        private static void ProcessSeriesImageResponses()
        {
            // process request response
            foreach (var response in imageResponses)
            {
                ++processedObjects; ReportProgress();
                var uid = response.ProgramId;

                if (response.Data == null)
                {
                    continue;
                }
                MxfSeriesInfo series = null;
                if (response.ProgramId.StartsWith("SP"))
                {
                    foreach (var key in sportsSeries.AllKeys)
                    {
                        if (!sportsSeries.Get(key).Contains(response.ProgramId))
                        {
                            continue;
                        }
                        series = SdMxf.GetSeriesInfo(key);
                        uid    = key;
                    }
                }
                else
                {
                    series = SdMxf.GetSeriesInfo(response.ProgramId.Substring(2, 8));
                }
                if (series == null || !string.IsNullOrEmpty(series.GuideImage) || series.extras.ContainsKey("artwork"))
                {
                    continue;
                }

                // get series images
                var artwork = GetTieredImages(response.Data, new List <string> {
                    "series", "sport", "episode"
                });
                if (response.ProgramId.StartsWith("SP") && artwork.Count <= 0)
                {
                    continue;
                }
                series.extras.Add("artwork", artwork);
                series.mxfGuideImage = GetGuideImageAndUpdateCache(artwork, ImageType.Series, uid);
            }
        }
Пример #4
0
        // Icons
        private static List <XmltvIcon> buildProgramIcons(MxfProgram mxfProgram)
        {
            // a movie will have a guide image from the program
            if (mxfProgram.programImages != null)
            {
                List <XmltvIcon> ret = new List <XmltvIcon>();
                foreach (sdImage image in mxfProgram.programImages)
                {
                    ret.Add(new XmltvIcon()
                    {
                        src    = image.Uri,
                        height = image.Height,
                        width  = image.Width
                    });
                }
                return(ret);
            }

            // get the series info class from the program if it is a series
            if (!string.IsNullOrEmpty(mxfProgram.Series))
            {
                MxfSeriesInfo mxfSeriesInfo = sdMxf.With[0].SeriesInfos[int.Parse(mxfProgram.Series.Substring(2)) - 1];
                if (!mxfSeriesInfo.Id.Equals(mxfProgram.Series))
                {
                    mxfSeriesInfo = sdMxf.With[0].SeriesInfos.Where(arg => arg.Id.Equals(mxfProgram.Series)).SingleOrDefault();
                }
                if (mxfSeriesInfo != null && mxfSeriesInfo.seriesImages != null)
                {
                    List <XmltvIcon> ret = new List <XmltvIcon>();
                    foreach (sdImage image in mxfSeriesInfo.seriesImages)
                    {
                        ret.Add(new XmltvIcon()
                        {
                            src    = image.Uri,
                            height = image.Height,
                            width  = image.Width
                        });
                    }
                    return(ret);
                }
            }
            return(null);
        }
Пример #5
0
        private static bool BuildProgram(string tmsId, XmltvProgramme program)
        {
            MxfProgram mxfProgram = Common.mxf.With[0].getProgram(tmsId);

            if (!string.IsNullOrEmpty(mxfProgram.Title))
            {
                return(true);
            }

            mxfProgram.Title = program.Titles[0].Text;
            if (mxfProgram.episodeInfo.NumberOfParts > 1)
            {
                string partofparts = string.Format(" ({0}/{1})", mxfProgram.episodeInfo.PartNumber, mxfProgram.episodeInfo.NumberOfParts);
                mxfProgram.Title = mxfProgram.Title.Replace(partofparts, "") + partofparts;
            }
            mxfProgram.EpisodeTitle  = (program.SubTitles.Count > 0) ? program.SubTitles[0].Text : null;
            mxfProgram.Description   = (program.Descriptions.Count > 0) ? program.Descriptions[0].Text : null;
            mxfProgram.Language      = program.Language?.Text ?? program.Titles[0].Language;
            mxfProgram.SeasonNumber  = (mxfProgram.episodeInfo.SeasonNumber > 0) ? mxfProgram.episodeInfo.SeasonNumber.ToString() : null;
            mxfProgram.EpisodeNumber = (mxfProgram.episodeInfo.EpisodeNumber > 0) ? mxfProgram.episodeInfo.EpisodeNumber.ToString() : null;

            mxfProgram.IsAction      = Common.ListContains(program.Categories, "Action");
            mxfProgram.IsComedy      = Common.ListContains(program.Categories, "Comedy");
            mxfProgram.IsDocumentary = Common.ListContains(program.Categories, "Documentary");
            mxfProgram.IsDrama       = Common.ListContains(program.Categories, "Drama");
            mxfProgram.IsEducational = Common.ListContains(program.Categories, "Educational");
            mxfProgram.IsHorror      = Common.ListContains(program.Categories, "Horror");
            //mxfProgram.IsIndy = null;
            mxfProgram.IsKids           = Common.ListContains(program.Categories, "Children") ?? Common.ListContains(program.Categories, "Family");
            mxfProgram.IsMusic          = Common.ListContains(program.Categories, "Music");
            mxfProgram.IsNews           = Common.ListContains(program.Categories, "News");
            mxfProgram.IsReality        = Common.ListContains(program.Categories, "Reality");
            mxfProgram.IsRomance        = Common.ListContains(program.Categories, "Romance");
            mxfProgram.IsScienceFiction = Common.ListContains(program.Categories, "Science Fiction");
            mxfProgram.IsSoap           = Common.ListContains(program.Categories, "Soap");
            mxfProgram.IsThriller       = Common.ListContains(program.Categories, "Suspense") ?? Common.ListContains(program.Categories, "Thriller");

            //mxfProgram.IsPremiere = ;
            //mxfProgram.IsSeasonFinale = ;
            //mxfProgram.IsSeasonPremiere = ;
            //mxfProgram.IsSeriesFinale = ;
            //mxfProgram.IsSeriesPremiere = ;

            //mxfProgram.IsLimitedSeries = null;
            mxfProgram.IsMiniseries      = Common.ListContains(program.Categories, "Miniseries");
            mxfProgram.IsMovie           = mxfProgram.episodeInfo.Type.Equals("MV") ? "true" : Common.ListContains(program.Categories, "Movie");
            mxfProgram.IsPaidProgramming = Common.ListContains(program.Categories, "Paid Programming");
            //mxfProgram.IsProgramEpisodic = null;
            //mxfProgram.IsSerial = null;
            mxfProgram.IsSeries    = Common.ListContains(program.Categories, "Series") ?? Common.ListContains(program.Categories, "Sports non-event");
            mxfProgram.IsShortFilm = Common.ListContains(program.Categories, "Short Film");
            mxfProgram.IsSpecial   = Common.ListContains(program.Categories, "Special");
            mxfProgram.IsSports    = Common.ListContains(program.Categories, "Sports event");
            if (string.IsNullOrEmpty(mxfProgram.IsSeries + mxfProgram.IsMiniseries + mxfProgram.IsMovie + mxfProgram.IsPaidProgramming + mxfProgram.IsShortFilm + mxfProgram.IsSpecial + mxfProgram.IsSports))
            {
                mxfProgram.IsSeries = "true";
            }

            // determine if generic
            if (mxfProgram.episodeInfo.Type.Equals("SH") && (!string.IsNullOrEmpty(mxfProgram.IsSeries) || !string.IsNullOrEmpty(mxfProgram.IsSports)) && string.IsNullOrEmpty(mxfProgram.IsMiniseries) && string.IsNullOrEmpty(mxfProgram.IsPaidProgramming))
            {
                mxfProgram.IsGeneric = "true";
            }

            // determine keywords
            Common.determineProgramKeywords(ref mxfProgram, program.Categories);

            // take care of episode original air date or movie year
            if (!string.IsNullOrEmpty(mxfProgram.IsMovie) && !string.IsNullOrEmpty(program.Date))
            {
                mxfProgram.Year = program.Date.Substring(0, 4);
            }
            else if (!string.IsNullOrEmpty(program.Date) && program.Date.Length >= 8)
            {
                mxfProgram.OriginalAirdate = program.Date.Substring(0, 4) + "-" + program.Date.Substring(4, 2) + "-" + program.Date.Substring(6, 2);
            }
            else if (program.PreviouslyShown != null)
            {
                mxfProgram.OriginalAirdate = "1970-01-01";
            }

            // handle series specific info
            if (string.IsNullOrEmpty(mxfProgram.IsMovie))
            {
                MxfSeriesInfo mxfSeriesInfo = Common.mxf.With[0].getSeriesInfo(mxfProgram.episodeInfo.SeriesID);
                if (string.IsNullOrEmpty(mxfSeriesInfo.Title))
                {
                    mxfSeriesInfo.Title = mxfProgram.Title;
                    if (program.Icons.Count > 0)
                    {
                        mxfSeriesInfo.GuideImage = Common.mxf.With[0].getGuideImage(program.Icons[0].src)?.Id;
                    }
                }
                if (mxfProgram.episodeInfo.Type.Equals("SH"))
                {
                    if (string.IsNullOrEmpty(mxfSeriesInfo.Description))
                    {
                        mxfSeriesInfo.Description = mxfProgram.Description;
                    }
                }
                mxfProgram.Series = mxfSeriesInfo.Id;

                // if there is a season number, create as seasonInfo entry
                if (!string.IsNullOrEmpty(mxfProgram.SeasonNumber))
                {
                    mxfProgram.Season = Common.mxf.With[0].getSeasonId(mxfProgram.episodeInfo.SeriesID, mxfProgram.SeasonNumber);
                }
            }
            // handle movie specific info
            else
            {
                // grab the movie poster
                var icon = program.Icons.Where(arg => arg.src.Contains("/posters/")).SingleOrDefault();
                if (icon != null)
                {
                    mxfProgram.GuideImage = Common.mxf.With[0].getGuideImage(icon.src).Id;
                }
                else if (program.Icons.Count > 0)
                {
                    mxfProgram.GuideImage = Common.mxf.With[0].getGuideImage(program.Icons[0].src).Id;
                }

                // get the star ratings
                if (program.StarRating.Count > 0)
                {
                    mxfProgram.HalfStars = GetStarRating(program.StarRating);
                }
                else if (program.Descriptions.Count > 0)
                {
                    Match m = Regex.Match(program.Descriptions[0].Text, @"\d\.\d/\d\.\d");
                    if (m != null)
                    {
                        string[] nums = m.Value.Split('/');
                        if (nums.Length == 2)
                        {
                            if (double.TryParse(nums[0], out double numerator) && double.TryParse(nums[1], out double denominator))
                            {
                                int halfstars = (int)((numerator / denominator) * 8);
                                mxfProgram.HalfStars   = halfstars.ToString();
                                mxfProgram.Description = mxfProgram.Description.Replace(string.Format(" ({0})", m.Value), "");
                            }
                        }
                    }
                }

                // handle movie ratings and advisories
                GetUsMovieRatings(program.Rating, mxfProgram);
            }

            // handle cast and crew
            if (program.Credits != null)
            {
                foreach (string person in program.Credits.Directors)
                {
                    mxfProgram.DirectorRole.Add(new MxfPersonRank()
                    {
                        Person = Common.mxf.With[0].getPersonId(person),
                    });
                }
                foreach (XmltvActor person in program.Credits.Actors)
                {
                    mxfProgram.ActorRole.Add(new MxfPersonRank()
                    {
                        Person    = Common.mxf.With[0].getPersonId(person.Actor),
                        Character = person.Role,
                    });
                }
                foreach (string person in program.Credits.Writers)
                {
                    mxfProgram.WriterRole.Add(new MxfPersonRank()
                    {
                        Person = Common.mxf.With[0].getPersonId(person),
                    });
                }
                foreach (string person in program.Credits.Adapters)
                {
                    mxfProgram.WriterRole.Add(new MxfPersonRank()
                    {
                        Person = Common.mxf.With[0].getPersonId(person),
                    });
                }
                foreach (string person in program.Credits.Producers)
                {
                    mxfProgram.ProducerRole.Add(new MxfPersonRank()
                    {
                        Person = Common.mxf.With[0].getPersonId(person),
                    });
                }
                foreach (string person in program.Credits.Composers)
                {
                    mxfProgram.ProducerRole.Add(new MxfPersonRank()
                    {
                        Person = Common.mxf.With[0].getPersonId(person),
                    });
                }
                foreach (string person in program.Credits.Editors)
                {
                    mxfProgram.HostRole.Add(new MxfPersonRank()
                    {
                        Person = Common.mxf.With[0].getPersonId(person),
                    });
                }
                foreach (string person in program.Credits.Presenters)
                {
                    mxfProgram.HostRole.Add(new MxfPersonRank()
                    {
                        Person = Common.mxf.With[0].getPersonId(person),
                    });
                }
                foreach (string person in program.Credits.Commentators)
                {
                    mxfProgram.HostRole.Add(new MxfPersonRank()
                    {
                        Person = Common.mxf.With[0].getPersonId(person),
                    });
                }
                foreach (string person in program.Credits.Guests)
                {
                    mxfProgram.GuestActorRole.Add(new MxfPersonRank()
                    {
                        Person = Common.mxf.With[0].getPersonId(person),
                    });
                }
            }

            return(true);
        }
Пример #6
0
        private static void BuildProgram(string id, HDHRProgram program)
        {
            MxfProgram mxfProgram = Common.mxf.With[0].getProgram(id);

            if (!string.IsNullOrEmpty(mxfProgram.Title))
            {
                return;
            }

            mxfProgram.Title        = program.Title;
            mxfProgram.EpisodeTitle = program.EpisodeTitle;
            mxfProgram.Description  = program.Synopsis;

            mxfProgram.IsAction      = Common.ListContains(program.Filters, "Action");
            mxfProgram.IsComedy      = Common.ListContains(program.Filters, "Comedy");
            mxfProgram.IsDocumentary = Common.ListContains(program.Filters, "Documentary");
            mxfProgram.IsDrama       = Common.ListContains(program.Filters, "Drama");
            mxfProgram.IsEducational = Common.ListContains(program.Filters, "Educational");
            mxfProgram.IsHorror      = Common.ListContains(program.Filters, "Horror");
            //mxfProgram.IsIndy = null;
            mxfProgram.IsKids           = Common.ListContains(program.Filters, "Children") ?? Common.ListContains(program.Filters, "Kids") ?? Common.ListContains(program.Filters, "Family");
            mxfProgram.IsMusic          = Common.ListContains(program.Filters, "Music");
            mxfProgram.IsNews           = Common.ListContains(program.Filters, "News");
            mxfProgram.IsReality        = Common.ListContains(program.Filters, "Reality");
            mxfProgram.IsRomance        = Common.ListContains(program.Filters, "Romance");
            mxfProgram.IsScienceFiction = Common.ListContains(program.Filters, "Science Fiction");
            mxfProgram.IsSoap           = Common.ListContains(program.Filters, "Soap");
            mxfProgram.IsThriller       = Common.ListContains(program.Filters, "Suspense") ?? Common.ListContains(program.Filters, "Thriller");

            //mxfProgram.IsPremiere = ;
            //mxfProgram.IsSeasonFinale = ;
            //mxfProgram.IsSeasonPremiere = ;
            //mxfProgram.IsSeriesFinale = ;
            //mxfProgram.IsSeriesPremiere = ;

            //mxfProgram.IsLimitedSeries = null;
            mxfProgram.IsMiniseries      = Common.ListContains(program.Filters, "Miniseries");
            mxfProgram.IsMovie           = program.SeriesID.StartsWith("MV") ? "true" : Common.ListContains(program.Filters, "Movie");
            mxfProgram.IsPaidProgramming = Common.ListContains(program.Filters, "Paid Programming") ?? Common.ListContains(program.Filters, "Shopping") ?? Common.ListContains(program.Filters, "Consumer");
            //mxfProgram.IsProgramEpisodic = null;
            //mxfProgram.IsSerial = null;
            mxfProgram.IsSeries    = Common.ListContains(program.Filters, "Series") ?? Common.ListContains(program.Filters, "Sports non-event");
            mxfProgram.IsShortFilm = Common.ListContains(program.Filters, "Short Film");
            mxfProgram.IsSpecial   = Common.ListContains(program.Filters, "Special");
            mxfProgram.IsSports    = Common.ListContains(program.Filters, "Sports event") ?? Common.ListContains(program.Filters, "Sports", true);
            if (string.IsNullOrEmpty(mxfProgram.IsSeries + mxfProgram.IsMiniseries + mxfProgram.IsMovie + mxfProgram.IsPaidProgramming + mxfProgram.IsShortFilm + mxfProgram.IsSpecial + mxfProgram.IsSports))
            {
                mxfProgram.IsSeries = "true";
            }

            // determine keywords
            Common.determineProgramKeywords(ref mxfProgram, program.Filters);

            if (!program.SeriesID.StartsWith("MV"))
            {
                // write the language
                mxfProgram.Language = program.SeriesID.Substring(program.SeriesID.Length - 6, 2).ToLower();

                // add the series
                MxfSeriesInfo mxfSeriesInfo = Common.mxf.With[0].getSeriesInfo(program.SeriesID);
                mxfSeriesInfo.Title = program.Title;
                mxfProgram.Series   = mxfSeriesInfo.Id;

                // add the image
                if (!string.IsNullOrEmpty(program.ImageURL))
                {
                    mxfSeriesInfo.GuideImage = Common.mxf.With[0].getGuideImage(program.ImageURL).Id;
                }

                // handle any season and episode numbers along with season entries
                if (!string.IsNullOrEmpty(program.EpisodeNumber))
                {
                    string[] se = program.EpisodeNumber.Substring(1).Split('E');
                    mxfProgram.SeasonNumber  = int.Parse(se[0]).ToString();
                    mxfProgram.EpisodeNumber = int.Parse(se[1]).ToString();

                    mxfProgram.Season = Common.mxf.With[0].getSeasonId(program.SeriesID, mxfProgram.SeasonNumber);
                }
                else if (string.IsNullOrEmpty(mxfProgram.EpisodeTitle))
                {
                    mxfProgram.IsGeneric = "true";
                }

                if (string.IsNullOrEmpty(mxfProgram.IsGeneric))
                {
                    mxfProgram.OriginalAirdate = program.OriginalAirDateTime.ToString("yyyy-MM-dd");
                }
            }
            else
            {
                if (!string.IsNullOrEmpty(program.PosterURL))
                {
                    mxfProgram.GuideImage = Common.mxf.With[0].getGuideImage(program.PosterURL).Id;
                }

                if (!string.IsNullOrEmpty(program.Synopsis))
                {
                    Match m = Regex.Match(program.Synopsis, @"\d\.\d/\d\.\d");
                    if (m != null)
                    {
                        string[] nums = m.Value.Split('/');
                        if (double.TryParse(nums[0], out double numerator) && double.TryParse(nums[1], out double denominator))
                        {
                            int halfstars = (int)((numerator / denominator) * 8);
                            mxfProgram.HalfStars   = halfstars.ToString();
                            mxfProgram.Description = mxfProgram.Description.Replace(string.Format(" ({0})", m.Value), "");
                        }
                    }
                }
            }
        }