Ejemplo n.º 1
0
        public GetFanart(int SeriesID)
        {
            XmlNode node = OnlineAPI.GetBannerList(SeriesID);

            if (node == null)
            {
                return;
            }

            mFanart = getFanart(node, SeriesID);

            // also try to get from english banners.xml
            if (OnlineAPI.GetSeriesLanguage(SeriesID) != "en")
            {
                node = OnlineAPI.GetBannerList(SeriesID, "en");
                if (node == null)
                {
                    return;
                }

                List <DBFanart> lEnglishFanarts = getFanart(node, SeriesID);

                foreach (var fanart in lEnglishFanarts)
                {
                    // ensure no duplicates
                    if (!mFanart.Contains(fanart))
                    {
                        mFanart.Add(fanart);
                    }
                }
            }
        }
Ejemplo n.º 2
0
        public int CompareTo(T other)
        {
            // Sort by:
            // 1. Local Language
            // 2. Highest Rated
            // 3. Number of Votes

            double thisArtwork;
            double otherArtwork;

            if (DBOption.GetOptions(DBOption.cOverrideLanguage))
            {
                thisArtwork  = this.Language == OnlineAPI.GetLanguageOverride(this.SeriesID) ? 100.0 : 0.0;
                otherArtwork = other.Language == OnlineAPI.GetLanguageOverride(other.SeriesID) ? 100.0 : 0.0;
            }
            else
            {
                thisArtwork  = this.Language == OnlineAPI.SelLanguageAsString ? 100.0 : 0.0;
                otherArtwork = other.Language == OnlineAPI.SelLanguageAsString ? 100.0 : 0.0;
            }

            if (this.Rating == other.Rating)
            {
                thisArtwork  += this.RatingCount;
                otherArtwork += other.RatingCount;
            }

            thisArtwork  += this.Rating;
            otherArtwork += other.Rating;

            return(otherArtwork.CompareTo(thisArtwork));
        }
Ejemplo n.º 3
0
        public int CompareTo(T other)
        {
            // Sort by:
            // 1. Local Language
            // 2. Number of Votes (Ratings no longer exist, and is based on a favourate/like system)

            double thisArtwork;
            double otherArtwork;

            if (DBOption.GetOptions(DBOption.cOverrideLanguage))
            {
                thisArtwork  = this.Language == OnlineAPI.GetLanguageOverride(this.SeriesID) ? 100.0 : 0.0;
                otherArtwork = other.Language == OnlineAPI.GetLanguageOverride(other.SeriesID) ? 100.0 : 0.0;
            }
            else
            {
                thisArtwork  = this.Language == OnlineAPI.SelLanguageAsString ? 100.0 : 0.0;
                otherArtwork = other.Language == OnlineAPI.SelLanguageAsString ? 100.0 : 0.0;
            }

            thisArtwork  += this.RatingCount;
            otherArtwork += other.RatingCount;

            return(otherArtwork.CompareTo(thisArtwork));
        }
Ejemplo n.º 4
0
        public GetFanart(int SeriesID)
        {
            XmlNode node = OnlineAPI.getBannerList(SeriesID);

            if (node == null)
            {
                return;
            }

            foreach (XmlNode fanartNode in node.SelectNodes("/Banners/Banner[BannerType='fanart']"))
            {
                DBFanart dbf = new DBFanart();
                foreach (XmlNode propertyNode in fanartNode.ChildNodes)
                {
                    try
                    {
                        dbf[propertyNode.Name] = propertyNode.InnerText;
                    }
                    catch (Exception ex)
                    {
                        MPTVSeriesLog.Write("Error adding Fanart Property to DBEntry: " + propertyNode.Name + " - " + ex.Message);
                    }
                }

                // Sync local files with database
                string localPath = dbf[DBFanart.cBannerPath];
                localPath = localPath.Replace("/", @"\");
                string fanart = Helper.PathCombine(Settings.GetPath(Settings.Path.fanart), localPath);
                if (File.Exists(fanart))
                {
                    dbf[DBFanart.cLocalPath] = localPath;
                }
                else
                {
                    dbf[DBFanart.cLocalPath] = string.Empty;
                }

                dbf[DBFanart.cSeriesID] = SeriesID;
                _fanart.Add(dbf);
            }
        }
Ejemplo n.º 5
0
        public void DownloadBanners(string onlineLanguage)
        {
            int maxConsecutiveDownloadErrors;
            var consecutiveDownloadErrors = 0;

            if (!int.TryParse(DBOption.GetOptions(DBOption.cMaxConsecutiveDownloadErrors).ToString(), out maxConsecutiveDownloadErrors))
            {
                maxConsecutiveDownloadErrors = 3;
            }

            // now that we have all the paths, download all the files
            foreach (SeriesBannersMap map in SeriesBannersMap)
            {
                #region Series Wide Banners

                var seriesWideBanners       = new List <WideBannerSeries>(map.SeriesWideBanners);
                var seriesWideBannersToKeep = new List <WideBannerSeries>();

                // if localized and english banners exist then only get them
                // if none exist, then get what's left over
                if (seriesWideBanners.Exists(b => b.Language == onlineLanguage || b.Language == "en" || b.Language == string.Empty))
                {
                    seriesWideBanners.RemoveAll(b => b.Language != onlineLanguage && b.Language != "en" && b.Language != string.Empty);
                }

                foreach (var seriesWideBanner in seriesWideBanners)
                {
                    if (consecutiveDownloadErrors >= maxConsecutiveDownloadErrors)
                    {
                        MPTVSeriesLog.Write("Too many consecutive download errors. Aborting.");
                        return;
                    }

                    // mark the filename with the language
                    seriesWideBanner.FileName = Helper.cleanLocalPath(seriesWideBanner.SeriesName) + @"\-lang" + seriesWideBanner.Language + "-" + seriesWideBanner.OnlinePath;

                    string file = OnlineAPI.DownloadBanner(seriesWideBanner.OnlinePath, Settings.Path.banners, seriesWideBanner.FileName);
                    if (BannerDownloadDone != null)
                    {
                        BannerDownloadDone(file);
                        seriesWideBannersToKeep.Add(seriesWideBanner);
                        consecutiveDownloadErrors = 0;
                    }
                    else
                    {
                        consecutiveDownloadErrors++;
                    }
                }

                map.SeriesWideBanners = seriesWideBannersToKeep;

                #endregion

                #region Series Posters

                var seriesPosters       = new List <PosterSeries>(map.SeriesPosters);
                var seriesPostersToKeep = new List <PosterSeries>();

                // if localized and english banners exist then only get them
                // if none exist, then get what's left over
                if (seriesPosters.Exists(p => p.Language == onlineLanguage || p.Language == "en" || p.Language == string.Empty))
                {
                    seriesPosters.RemoveAll(p => p.Language != onlineLanguage && p.Language != "en" && p.Language != string.Empty);
                }

                foreach (var seriesPoster in seriesPosters)
                {
                    if (consecutiveDownloadErrors >= maxConsecutiveDownloadErrors)
                    {
                        MPTVSeriesLog.Write("Too many consecutive download errors. Aborting.");
                        return;
                    }

                    // mark the filename with the language
                    seriesPoster.FileName = Helper.cleanLocalPath(seriesPoster.SeriesName) + @"\-lang" + seriesPoster.Language + "-" + seriesPoster.OnlinePath;
                    string file = OnlineAPI.DownloadBanner(seriesPoster.OnlinePath, Settings.Path.banners, seriesPoster.FileName);
                    if (BannerDownloadDone != null)
                    {
                        BannerDownloadDone(file);
                        seriesPostersToKeep.Add(seriesPoster);
                        consecutiveDownloadErrors = 0;
                    }
                    else
                    {
                        consecutiveDownloadErrors++;
                    }
                }

                map.SeriesPosters = seriesPostersToKeep;

                #endregion

                #region Season Posters

                List <DBSeason> localSeasons = DBSeason.Get(new SQLCondition(new DBSeason(), DBSeason.cSeriesID, map.SeriesID, SQLConditionType.Equal), false);

                var seasonPosters       = new List <PosterSeason>(map.SeasonPosters);
                var seasonPostersToKeep = new List <PosterSeason>();

                // if localized and english banners exist then only get them
                // if none exist, then get what's left over
                if (seasonPosters.Exists(p => p.Language == onlineLanguage || p.Language == "en" || p.Language == string.Empty))
                {
                    seasonPosters.RemoveAll(p => p.Language != onlineLanguage && p.Language != "en" && p.Language != string.Empty);
                }

                foreach (var seasonPoster in seasonPosters)
                {
                    if (consecutiveDownloadErrors >= maxConsecutiveDownloadErrors)
                    {
                        MPTVSeriesLog.Write("Too many consecutive download errors. Aborting.");
                        return;
                    }

                    // only download season banners if we have online season in database
                    if (!localSeasons.Any(s => s[DBSeason.cIndex] == seasonPoster.SeasonIndex))
                    {
                        continue;
                    }

                    seasonPoster.FileName = Helper.cleanLocalPath(seasonPoster.SeriesName) + @"\-lang" + seasonPoster.Language + "-" + seasonPoster.OnlinePath;

                    string file = OnlineAPI.DownloadBanner(seasonPoster.OnlinePath, Settings.Path.banners, seasonPoster.FileName);
                    if (BannerDownloadDone != null)
                    {
                        BannerDownloadDone(file);
                        seasonPostersToKeep.Add(seasonPoster);
                        consecutiveDownloadErrors = 0;
                    }
                    else
                    {
                        consecutiveDownloadErrors++;
                    }
                }

                map.SeasonPosters = seasonPostersToKeep;

                #endregion
            }
        }
Ejemplo n.º 6
0
        private void doWork(string seriesID)
        {
            XmlNode banners = OnlineAPI.getBannerList(Int32.Parse(seriesID));

            if (banners == null)
            {
                return;
            }

            if (Helper.getCorrespondingSeries(Int32.Parse(seriesID)) == null)
            {
                return;
            }

            string SeriesName = Helper.getCorrespondingSeries(Int32.Parse(seriesID)).ToString();
            List <WideBannerSeries> widebannerSeriesList = new List <WideBannerSeries>();
            List <PosterSeries>     posterSeriesList     = new List <PosterSeries>();
            List <PosterSeason>     posterSeasonList     = new List <PosterSeason>();
            SeriesBannersMap        map = new SeriesBannersMap();

            map.SeriesID = seriesID;

            #region Series WideBanners
            foreach (XmlNode banner in banners.SelectNodes("/Banners/Banner[BannerType='series']"))
            {
                WideBannerSeries seriesWideBanners = new WideBannerSeries();

                seriesWideBanners.Language   = banner.SelectSingleNode("Language").InnerText;
                seriesWideBanners.OnlinePath = banner.SelectSingleNode("BannerPath").InnerText;
                seriesWideBanners.SeriesName = SeriesName;

                try
                {
                    seriesWideBanners.Style = (ArtworkStyles)Enum.Parse(typeof(ArtworkStyles), banner.SelectSingleNode("BannerType2").InnerText, true);
                }
                catch
                {
                    // maybe a new style introduced
                    seriesWideBanners.Style = ArtworkStyles.unknown;
                }

                if (!string.IsNullOrEmpty(banner.SelectSingleNode("Rating").InnerText))
                {
                    double rating = double.Parse(banner.SelectSingleNode("Rating").InnerText, NumberStyles.Any, NumberFormatInfo.InvariantInfo);
                    seriesWideBanners.Rating = Math.Round(rating, 1, MidpointRounding.AwayFromZero);
                }

                if (!string.IsNullOrEmpty(banner.SelectSingleNode("RatingCount").InnerText))
                {
                    seriesWideBanners.RatingCount = int.Parse(banner.SelectSingleNode("RatingCount").InnerText);
                }

                seriesWideBanners.SeriesID = seriesID;
                widebannerSeriesList.Add(seriesWideBanners);
            }
            // sort by highest rated
            widebannerSeriesList.Sort();

            // remove banners of no interest
            if (!DBOption.GetOptions(DBOption.cGetTextBanners))
            {
                widebannerSeriesList.RemoveAll(b => b.Style == ArtworkStyles.text);
            }
            if (!DBOption.GetOptions(DBOption.cGetBlankBanners))
            {
                widebannerSeriesList.RemoveAll(b => b.Style == ArtworkStyles.blank);
            }

            // Respect User Limits, exception: if higher rated image or localised image is uploaded online
            int limit = DBOption.GetOptions(DBOption.cArtworkLimitSeriesWideBanners);
            if (limit < widebannerSeriesList.Count)
            {
                widebannerSeriesList.RemoveRange(limit, widebannerSeriesList.Count - limit);
            }

            map.SeriesWideBanners = widebannerSeriesList;
            #endregion

            #region Series Posters
            foreach (XmlNode banner in banners.SelectNodes("/Banners/Banner[BannerType='poster']"))
            {
                PosterSeries seriesPoster = new PosterSeries();

                seriesPoster.Language   = banner.SelectSingleNode("Language").InnerText;
                seriesPoster.OnlinePath = banner.SelectSingleNode("BannerPath").InnerText;
                seriesPoster.SeriesName = SeriesName;

                if (!string.IsNullOrEmpty(banner.SelectSingleNode("Rating").InnerText))
                {
                    double rating = double.Parse(banner.SelectSingleNode("Rating").InnerText, NumberStyles.Any, NumberFormatInfo.InvariantInfo);
                    seriesPoster.Rating = Math.Round(rating, 1, MidpointRounding.AwayFromZero);
                }

                if (!string.IsNullOrEmpty(banner.SelectSingleNode("RatingCount").InnerText))
                {
                    seriesPoster.RatingCount = int.Parse(banner.SelectSingleNode("RatingCount").InnerText);
                }

                seriesPoster.SeriesID = seriesID;
                posterSeriesList.Add(seriesPoster);
            }

            posterSeasonList.Sort();

            limit = DBOption.GetOptions(DBOption.cArtworkLimitSeriesPosters);
            if (limit < posterSeriesList.Count)
            {
                posterSeriesList.RemoveRange(limit, posterSeriesList.Count - limit);
            }

            map.SeriesPosters = posterSeriesList;
            #endregion

            #region Season Posters
            List <string> seasons = new List <string>();
            foreach (XmlNode banner in banners.SelectNodes("/Banners/Banner[BannerType='season']"))
            {
                PosterSeason seasonPoster = new PosterSeason();

                seasonPoster.Language    = banner.SelectSingleNode("Language").InnerText;
                seasonPoster.OnlinePath  = banner.SelectSingleNode("BannerPath").InnerText;
                seasonPoster.SeasonIndex = banner.SelectSingleNode("Season").InnerText;
                seasonPoster.SeriesName  = SeriesName;

                try
                {
                    seasonPoster.Style = (ArtworkStyles)Enum.Parse(typeof(ArtworkStyles), banner.SelectSingleNode("BannerType2").InnerText, true);
                }
                catch
                {
                    // maybe a new style introduced
                    seasonPoster.Style = ArtworkStyles.unknown;
                }

                if (!string.IsNullOrEmpty(banner.SelectSingleNode("Rating").InnerText))
                {
                    double rating = double.Parse(banner.SelectSingleNode("Rating").InnerText, NumberStyles.Any, NumberFormatInfo.InvariantInfo);
                    seasonPoster.Rating = Math.Round(rating, 1, MidpointRounding.AwayFromZero);
                }

                if (!string.IsNullOrEmpty(banner.SelectSingleNode("RatingCount").InnerText))
                {
                    seasonPoster.RatingCount = int.Parse(banner.SelectSingleNode("RatingCount").InnerText);
                }

                if (!seasons.Contains(seasonPoster.SeasonIndex))
                {
                    seasons.Add(seasonPoster.SeasonIndex);
                }

                seasonPoster.SeriesID = seriesID;
                posterSeasonList.Add(seasonPoster);
            }

            posterSeasonList.Sort();

            // we dont support season widebanners
            posterSeasonList.RemoveAll(p => p.Style == ArtworkStyles.seasonwide);

            limit = DBOption.GetOptions(DBOption.cArtworkLimitSeasonPosters);
            List <PosterSeason> posterSeasonListTemp = new List <PosterSeason>(posterSeasonList);

            foreach (string season in seasons)
            {
                int count = 0;
                foreach (PosterSeason pSeason in posterSeasonListTemp)
                {
                    if (season == pSeason.SeasonIndex)
                    {
                        count++;
                        if (limit < count)
                        {
                            posterSeasonList.Remove(pSeason);
                        }
                    }
                }
            }

            map.SeasonPosters = posterSeasonList;
            #endregion

            // series already in?
            if (SeriesBannersMap.Contains(map))
            {
                SeriesBannersMap seriesMap = SeriesBannersMap[SeriesBannersMap.IndexOf(map)];
                seriesMap.SeasonPosters.AddRange(map.SeasonPosters);
                seriesMap.SeriesWideBanners.AddRange(map.SeriesWideBanners);
                seriesMap.SeriesPosters.AddRange(map.SeriesPosters);
            }
            else
            {
                SeriesBannersMap.Add(map);
            }
        }
Ejemplo n.º 7
0
        private void doWork(string aSeriesID)
        {
            XmlNode lEnglishBanners = null;
            XmlNode lBanners        = OnlineAPI.GetBannerList(Int32.Parse(aSeriesID));

            if (lBanners == null)
            {
                return;
            }

            DBSeries lSeries = Helper.getCorrespondingSeries(Int32.Parse(aSeriesID));

            if (lSeries == null)
            {
                return;
            }

            string lSeriesName = lSeries.ToString();
            List <WideBannerSeries> lWidebannerSeriesList = new List <WideBannerSeries>();
            List <PosterSeries>     lPosterSeriesList     = new List <PosterSeries>();
            List <PosterSeason>     lPosterSeasonList     = new List <PosterSeason>();
            SeriesBannersMap        lMap = new SeriesBannersMap();

            lMap.SeriesID = aSeriesID;

            #region Series WideBanners
            lWidebannerSeriesList = GetWideSeriesBanners(lBanners, aSeriesID, lSeriesName);

            // if the banner count is zero, try to get from english language
            if (lWidebannerSeriesList.Count == 0 && OnlineAPI.GetSeriesLanguage(int.Parse(aSeriesID)) != "en")
            {
                lEnglishBanners = OnlineAPI.GetBannerList(Int32.Parse(aSeriesID), "en");
                if (lEnglishBanners == null)
                {
                    return;
                }

                lWidebannerSeriesList = GetWideSeriesBanners(lEnglishBanners, aSeriesID, lSeriesName);
            }

            // sort by highest rated
            lWidebannerSeriesList.Sort();

            // remove banners of no interest
            if (!DBOption.GetOptions(DBOption.cGetTextBanners))
            {
                lWidebannerSeriesList.RemoveAll(b => b.Style == ArtworkStyles.text);
            }
            if (!DBOption.GetOptions(DBOption.cGetBlankBanners))
            {
                lWidebannerSeriesList.RemoveAll(b => b.Style == ArtworkStyles.blank);
            }

            // Respect User Limits, exception: if higher rated image or localised image is uploaded online
            int limit = DBOption.GetOptions(DBOption.cArtworkLimitSeriesWideBanners);
            if (limit < lWidebannerSeriesList.Count)
            {
                lWidebannerSeriesList.RemoveRange(limit, lWidebannerSeriesList.Count - limit);
            }

            lMap.SeriesWideBanners = lWidebannerSeriesList;
            #endregion

            #region Series Posters
            lPosterSeriesList = GetPosterSeries(lBanners, aSeriesID, lSeriesName);

            // if the poster count is zero, try to get from english language
            if (lPosterSeriesList.Count == 0 && OnlineAPI.GetSeriesLanguage(int.Parse(aSeriesID)) != "en")
            {
                if (lEnglishBanners == null)
                {
                    lEnglishBanners = OnlineAPI.GetBannerList(Int32.Parse(aSeriesID), "en");
                    if (lEnglishBanners == null)
                    {
                        return;
                    }
                }

                lPosterSeriesList = GetPosterSeries(lEnglishBanners, aSeriesID, lSeriesName);
            }

            lPosterSeriesList.Sort();

            limit = DBOption.GetOptions(DBOption.cArtworkLimitSeriesPosters);
            if (limit < lPosterSeriesList.Count)
            {
                lPosterSeriesList.RemoveRange(limit, lPosterSeriesList.Count - limit);
            }

            lMap.SeriesPosters = lPosterSeriesList;
            #endregion

            #region Season Posters
            List <string> lSeasons = new List <string>();
            lPosterSeasonList = GetPosterSeason(lBanners, aSeriesID, lSeriesName, ref lSeasons);

            // if the poster count is zero try to get from english language
            if (lPosterSeasonList.Count == 0 && OnlineAPI.GetSeriesLanguage(int.Parse(aSeriesID)) != "en")
            {
                if (lEnglishBanners == null)
                {
                    lEnglishBanners = OnlineAPI.GetBannerList(Int32.Parse(aSeriesID), "en");
                    if (lEnglishBanners == null)
                    {
                        return;
                    }
                }

                lPosterSeasonList = GetPosterSeason(lEnglishBanners, aSeriesID, lSeriesName, ref lSeasons);
            }

            lPosterSeasonList.Sort();

            // we dont support season widebanners
            lPosterSeasonList.RemoveAll(p => p.Style == ArtworkStyles.seasonwide);

            limit = DBOption.GetOptions(DBOption.cArtworkLimitSeasonPosters);
            List <PosterSeason> posterSeasonListTemp = new List <PosterSeason>(lPosterSeasonList);

            foreach (string season in lSeasons)
            {
                int count = 0;
                foreach (PosterSeason pSeason in posterSeasonListTemp)
                {
                    if (season == pSeason.SeasonIndex)
                    {
                        count++;
                        if (limit < count)
                        {
                            lPosterSeasonList.Remove(pSeason);
                        }
                    }
                }
            }

            lMap.SeasonPosters = lPosterSeasonList;
            #endregion

            // series already in?
            if (SeriesBannersMap.Contains(lMap))
            {
                SeriesBannersMap seriesMap = SeriesBannersMap[SeriesBannersMap.IndexOf(lMap)];
                seriesMap.SeasonPosters.AddRange(lMap.SeasonPosters);
                seriesMap.SeriesWideBanners.AddRange(lMap.SeriesWideBanners);
                seriesMap.SeriesPosters.AddRange(lMap.SeriesPosters);
            }
            else
            {
                SeriesBannersMap.Add(lMap);
            }
        }