private string GetGameBackground(uint appId)
        {
            foreach (var url in backgroundUrls)
            {
                var bk = string.Format(url, appId);
                if (HttpDownloader.GetResponseCode(bk) == HttpStatusCode.OK)
                {
                    return(bk);
                }
            }

            return(null);
        }
 public static StorePageMetadata GetStoreMetadata(string offerPath)
 {
     // Remove edition from offer path, offer path is: /<franchise>/<game>/<edition>
     var match = Regex.Match(offerPath, @"(\/(.+?)\/(.+?))\/");
     var offer = match.Groups[1].Value.ToString();
     var url = string.Format(@"https://data3.origin.com/ocd{0}.en-us.irl.ocd", offer);
     if (HttpDownloader.GetResponseCode(url) == System.Net.HttpStatusCode.OK)
     {
         var stringData = Encoding.UTF8.GetString(HttpDownloader.DownloadData(url));
         return JsonConvert.DeserializeObject<StorePageMetadata>(stringData);
     }
     else
     {
         return null;
     }
 }
Beispiel #3
0
        public string SelectGoogleImage(string searchTerm, string tempFileName, double imageWidth = 0, double imageHeight = 0)
        {
            var model = new GoogleImageDownloadViewModel(
                new GoogleImageDownloadWindowFactory(),
                resources,
                searchTerm,
                imageWidth,
                imageHeight);

            if (model.OpenView() == true)
            {
                try
                {
                    var url = model.SelectedImage?.ImageUrl;
                    if (url.IsNullOrEmpty())
                    {
                        return(null);
                    }

                    var response = HttpDownloader.GetResponseCode(url);
                    if (response != HttpStatusCode.OK)
                    {
                        logger.Warn("Original Google image request failed: " + response.ToString());
                        url = model.SelectedImage.ThumbUrl;
                    }

                    return(ProcessMetadataFile(url, tempFileName));
                }
                catch (Exception e) when(!PlayniteEnvironment.ThrowAllErrors)
                {
                    logger.Error(e, $"Failed to use google image {model.SelectedImage?.ImageUrl}.");
                }
            }

            return(null);
        }
        internal SteamGameMetadata DownloadGameMetadata(uint appId, BackgroundSource backgroundSource)
        {
            var metadata    = new SteamGameMetadata();
            var productInfo = GetAppInfo(appId);

            metadata.ProductDetails = productInfo;

            try
            {
                metadata.StoreDetails = GetStoreData(appId);
            }
            catch (Exception e)
            {
                logger.Error(e, $"Failed to download Steam store metadata {appId}");
            }

            // Icon
            if (productInfo != null)
            {
                var iconRoot = @"https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/{0}/{1}.ico";
                var icon     = productInfo["common"]["clienticon"];
                var iconUrl  = string.Empty;
                if (!string.IsNullOrEmpty(icon.Value))
                {
                    iconUrl = string.Format(iconRoot, appId, icon.Value);
                }
                else
                {
                    var newIcon = productInfo["common"]["icon"];
                    if (!string.IsNullOrEmpty(newIcon.Value))
                    {
                        iconRoot = @"https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/{0}/{1}.jpg";
                        iconUrl  = string.Format(iconRoot, appId, newIcon.Value);
                    }
                }

                // There might be no icon assigned to game
                if (!string.IsNullOrEmpty(iconUrl))
                {
                    metadata.Icon = new MetadataFile(iconUrl);
                }
            }

            // Image
            var imageRoot = @"https://steamcdn-a.akamaihd.net/steam/apps/{0}/header.jpg";
            var imageUrl  = string.Format(imageRoot, appId);

            if (HttpDownloader.GetResponseCode(imageUrl) == HttpStatusCode.OK)
            {
                metadata.CoverImage = new MetadataFile(imageUrl);
            }
            else
            {
                if (productInfo != null)
                {
                    imageRoot = @"https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/{0}/{1}.jpg";
                    var image = productInfo["common"]["logo"];
                    if (!string.IsNullOrEmpty(image.Value))
                    {
                        imageUrl            = string.Format(imageRoot, appId, image.Value);
                        metadata.CoverImage = new MetadataFile(imageUrl);
                    }
                }
            }

            // Background Image
            switch (backgroundSource)
            {
            case BackgroundSource.Image:
                metadata.BackgroundImage = new MetadataFile(GetGameBackground(appId));
                break;

            case BackgroundSource.StoreScreenshot:
                if (metadata.StoreDetails != null)
                {
                    metadata.BackgroundImage = new MetadataFile(Regex.Replace(metadata.StoreDetails.screenshots.First().path_full, "\\?.*$", ""));
                }
                break;

            case BackgroundSource.StoreBackground:
                metadata.BackgroundImage = new MetadataFile(string.Format(@"https://steamcdn-a.akamaihd.net/steam/apps/{0}/page_bg_generated_v6b.jpg", appId));
                break;

            default:
                break;
            }

            return(metadata);
        }
        internal SteamGameMetadata DownloadGameMetadata(uint appId, ISteamMetadataDownloadConfig cfg)
        {
            var metadata    = new SteamGameMetadata();
            var productInfo = GetAppInfo(appId);

            metadata.ProductDetails = productInfo;

            try
            {
                metadata.StoreDetails = GetStoreData(appId, cfg.MetadataOtherLanguage);
                if (cfg.MetadataDescriptionLanguage != cfg.MetadataOtherLanguage)
                {
                    var storeDetailsInDescriptionLanguage = GetStoreData(appId, cfg.MetadataDescriptionLanguage);
                    metadata.StoreDetails.short_description    = storeDetailsInDescriptionLanguage.short_description;
                    metadata.StoreDetails.detailed_description = storeDetailsInDescriptionLanguage.detailed_description;
                    metadata.StoreDetails.about_the_game       = storeDetailsInDescriptionLanguage.about_the_game;
                }
            }
            catch (Exception e)
            {
                logger.Error(e, $"Failed to download Steam store metadata {appId}");
            }

            try
            {
                metadata.UserReviewDetails = GetUserReviewsData(appId);
            }
            catch (Exception e)
            {
                logger.Error(e, $"Failed to download Steam user reviews metadata {appId}");
            }

            // Icon
            if (productInfo != null)
            {
                var iconRoot = @"https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/{0}/{1}.ico";
                var icon     = productInfo["common"]["clienticon"];
                var iconUrl  = string.Empty;
                if (!string.IsNullOrEmpty(icon.Value))
                {
                    iconUrl = string.Format(iconRoot, appId, icon.Value);
                }
                else
                {
                    var newIcon = productInfo["common"]["icon"];
                    if (!string.IsNullOrEmpty(newIcon.Value))
                    {
                        iconRoot = @"https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/{0}/{1}.jpg";
                        iconUrl  = string.Format(iconRoot, appId, newIcon.Value);
                    }
                }

                // There might be no icon assigned to game
                if (!string.IsNullOrEmpty(iconUrl))
                {
                    metadata.Icon = new MetadataFile(iconUrl);
                }
            }

            // Image
            var useBanner = false;

            if (cfg.DownloadVerticalCovers)
            {
                var imageRoot = @"https://steamcdn-a.akamaihd.net/steam/apps/{0}/library_600x900_2x.jpg";
                var imageUrl  = string.Format(imageRoot, appId);
                if (HttpDownloader.GetResponseCode(imageUrl) == HttpStatusCode.OK)
                {
                    metadata.CoverImage = new MetadataFile(imageUrl);
                }
                else
                {
                    useBanner = true;
                }
            }

            if (useBanner || !cfg.DownloadVerticalCovers)
            {
                var imageRoot = @"https://steamcdn-a.akamaihd.net/steam/apps/{0}/header.jpg";
                var imageUrl  = string.Format(imageRoot, appId);
                if (HttpDownloader.GetResponseCode(imageUrl) == HttpStatusCode.OK)
                {
                    metadata.CoverImage = new MetadataFile(imageUrl);
                }
            }

            if (metadata.CoverImage == null)
            {
                if (productInfo != null)
                {
                    var imageRoot = @"https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/{0}/{1}.jpg";
                    var image     = productInfo["common"]["logo"];
                    if (!string.IsNullOrEmpty(image.Value))
                    {
                        var imageUrl = string.Format(imageRoot, appId, image.Value);
                        metadata.CoverImage = new MetadataFile(imageUrl);
                    }
                }
            }

            // Background Image
            var bannerBk = string.Format(@"https://steamcdn-a.akamaihd.net/steam/apps/{0}/library_hero.jpg", appId);
            var storeBk  = string.Format(@"https://steamcdn-a.akamaihd.net/steam/apps/{0}/page_bg_generated_v6b.jpg", appId);

            switch (cfg.BackgroundSource)
            {
            case BackgroundSource.Image:
                var bk = GetGameBackground(appId);
                if (string.IsNullOrEmpty(bk))
                {
                    if (HttpDownloader.GetResponseCode(bannerBk) == HttpStatusCode.OK)
                    {
                        metadata.BackgroundImage = new MetadataFile(bannerBk);
                    }
                }
                else
                {
                    metadata.BackgroundImage = new MetadataFile(bk);
                }
                break;

            case BackgroundSource.StoreScreenshot:
                if (metadata.StoreDetails != null)
                {
                    metadata.BackgroundImage = new MetadataFile(Regex.Replace(metadata.StoreDetails.screenshots.First().path_full, "\\?.*$", ""));
                }
                break;

            case BackgroundSource.StoreBackground:
                if (HttpDownloader.GetResponseCode(storeBk) == HttpStatusCode.OK)
                {
                    metadata.BackgroundImage = new MetadataFile(storeBk);
                }
                break;

            case BackgroundSource.Banner:
                if (HttpDownloader.GetResponseCode(bannerBk) == HttpStatusCode.OK)
                {
                    metadata.BackgroundImage = new MetadataFile(bannerBk);
                }
                break;

            default:
                break;
            }

            return(metadata);
        }
 public void GetResponseCodeTest()
 {
     Assert.AreEqual(HttpStatusCode.OK, HttpDownloader.GetResponseCode(@"https://playnite.link/favicon.ico"));
     Assert.AreEqual(HttpStatusCode.NotFound, HttpDownloader.GetResponseCode(@"https://playnite.link/test.tst"));
 }