internal SteamGameMetadata UpdateGameWithMetadata(Game game) { var appId = game.ToSteamGameID().AppID; var metadata = DownloadGameMetadata(appId, library.LibrarySettings.PreferScreenshotForBackground); game.Name = metadata.ProductDetails?["common"]["name"]?.Value ?? game.Name; game.Links = new ObservableCollection <Link>() { new Link("Forum", @"https://steamcommunity.com/app/" + appId), new Link("News", @"http://store.steampowered.com/news/?appids=" + appId), new Link("Store", @"http://store.steampowered.com/app/" + appId), new Link("Wiki", @"http://pcgamingwiki.com/api/appid.php?appid=" + appId) }; if (metadata.StoreDetails?.categories?.FirstOrDefault(a => a.id == 30) != null) { game.Links.Add(new Link("Workshop", Steam.GetWorkshopUrl(appId))); } if (metadata.StoreDetails != null) { game.Description = metadata.StoreDetails.detailed_description; game.Genres = new ComparableList <string>(metadata.StoreDetails.genres?.Select(a => a.description)); game.Developers = new ComparableList <string>(metadata.StoreDetails.developers); game.Publishers = new ComparableList <string>(metadata.StoreDetails.publishers); var cultInfo = new CultureInfo("en-US", false).TextInfo; game.Tags = new ComparableList <string>(metadata.StoreDetails.categories?.Select(a => cultInfo.ToTitleCase(a.description))); game.ReleaseDate = metadata.StoreDetails.release_date.date; game.CriticScore = metadata.StoreDetails.metacritic?.score; } if (metadata.ProductDetails != null) { var tasks = new ObservableCollection <GameAction>(); var launchList = metadata.ProductDetails["config"]["launch"].Children; foreach (var task in launchList.Skip(1)) { var properties = task["config"]; if (properties.Name != null) { if (properties["oslist"].Name != null) { if (properties["oslist"].Value != "windows") { continue; } } } // Ignore action without name - shoudn't be visible to end user if (task["description"].Name != null) { var newTask = new GameAction() { Name = task["description"].Value, Arguments = task["arguments"].Value ?? string.Empty, Path = task["executable"].Value, IsHandledByPlugin = false, WorkingDir = "{InstallDir}" }; tasks.Add(newTask); } } var manual = metadata.ProductDetails["extended"]["gamemanualurl"]; if (manual.Name != null) { tasks.Add((new GameAction() { Name = "Manual", Type = GameActionType.URL, Path = manual.Value, IsHandledByPlugin = false })); } game.OtherActions = tasks; } if (!string.IsNullOrEmpty(metadata.BackgroundImage)) { game.BackgroundImage = metadata.BackgroundImage; } return(metadata); }