internal SteamGameMetadata DownloadGameMetadata(uint appId, BackgroundSource backgroundSource) { var metadata = new SteamGameMetadata(); var productInfo = GetAppInfo(appId); metadata.ProductDetails = productInfo; metadata.StoreDetails = GetStoreData(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)) { var iconName = Path.GetFileName(new Uri(iconUrl).AbsolutePath); var iconData = HttpDownloader.DownloadData(iconUrl); metadata.Icon = new MetadataFile(iconName, iconData); } } // Image var imageRoot = @"http://cdn.akamai.steamstatic.com/steam/apps/{0}/header.jpg"; var imageUrl = string.Format(imageRoot, appId); byte[] imageData = null; try { imageData = HttpDownloader.DownloadData(imageUrl); } catch (WebException e) { var response = (HttpWebResponse)e.Response; if (response.StatusCode == HttpStatusCode.NotFound) { 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); imageData = HttpDownloader.DownloadData(imageUrl); } } } else { throw; } } if (imageData != null) { var imageName = Path.GetFileName(new Uri(imageUrl).AbsolutePath); metadata.Image = new MetadataFile(imageName, imageData); } // Background Image switch (backgroundSource) { case BackgroundSource.Image: metadata.BackgroundImage = GetGameBackground(appId); break; case BackgroundSource.StoreScreenshot: metadata.BackgroundImage = Regex.Replace(metadata.StoreDetails.screenshots.First().path_full, "\\?.*$", ""); break; case BackgroundSource.StoreBackground: metadata.BackgroundImage = 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); }
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 void GetGameData() { if (currentMetadata != null) { return; } try { var metadataProvider = new MetadataProvider(apiClient); if (BuiltinExtensions.GetExtensionFromId(options.GameData.PluginId) == BuiltinExtension.SteamLibrary) { var appId = uint.Parse(options.GameData.GameId); currentMetadata = metadataProvider.GetGameMetadata( appId, plugin.SettingsViewModel.Settings.BackgroundSource, plugin.SettingsViewModel.Settings.DownloadVerticalCovers); } else { if (options.IsBackgroundDownload) { var matchedId = GetMatchingGame(options.GameData); if (matchedId > 0) { currentMetadata = metadataProvider.GetGameMetadata( matchedId, plugin.SettingsViewModel.Settings.BackgroundSource, plugin.SettingsViewModel.Settings.DownloadVerticalCovers); } else { currentMetadata = new SteamGameMetadata(); } } else { var selectedGame = plugin.PlayniteApi.Dialogs.ChooseItemWithSearch(null, (a) => { if (uint.TryParse(a, out var appId)) { try { var store = WebApiClient.GetStoreAppDetail(appId); return(new List <GenericItemOption> { new StoreSearchResult { GameId = appId, Name = store.name } }); } catch (Exception e) { logger.Error(e, $"Failed to get Steam app info {appId}"); return(new List <GenericItemOption>()); } } else { try { var name = StringExtensions.NormalizeGameName(a); return(new List <GenericItemOption>(UniversalSteamMetadata.GetSearchResults(name))); } catch (Exception e) { logger.Error(e, $"Failed to get Steam search data for {a}"); return(new List <GenericItemOption>()); } } }, options.GameData.Name, string.Empty); if (selectedGame == null) { currentMetadata = new SteamGameMetadata(); } else { currentMetadata = metadataProvider.GetGameMetadata( ((StoreSearchResult)selectedGame).GameId, plugin.SettingsViewModel.Settings.BackgroundSource, plugin.SettingsViewModel.Settings.DownloadVerticalCovers); } } } } catch (Exception e) { logger.Error(e, $"Failed to get Steam metadata."); currentMetadata = new SteamGameMetadata(); } }