From faa6b36759ac7c03d1f7059f648cfb41cb425771 Mon Sep 17 00:00:00 2001 From: Brian Lima Date: Sun, 18 Sep 2022 18:12:17 -0300 Subject: [PATCH] Fix icons being repeated between apps, default to app.Icon --- UWPHook/GamesWindow.xaml.cs | 43 ++++++++++++++++--------------------- 1 file changed, 18 insertions(+), 25 deletions(-) diff --git a/UWPHook/GamesWindow.xaml.cs b/UWPHook/GamesWindow.xaml.cs index f290ca8..569a295 100644 --- a/UWPHook/GamesWindow.xaml.cs +++ b/UWPHook/GamesWindow.xaml.cs @@ -284,7 +284,7 @@ private async Task DownloadTempGridImages(string appName, string appTarget) { SteamGridDbApi api = new SteamGridDbApi(Properties.Settings.Default.SteamGridDbApiKey); string tmpGridDirectory = Path.GetTempPath() + "UWPHook\\tmp_grid\\"; - GameResponse[] games; + GameResponse[] games = null; try { @@ -293,7 +293,6 @@ private async Task DownloadTempGridImages(string appName, string appTarget) catch (TaskCanceledException exception) { Log.Error(exception.Message); - throw; } if (games != null) @@ -390,6 +389,8 @@ private async Task ExportGames() } } + await Task.WhenAll(gridImagesDownloadTasks); + // Export the selected apps and the downloaded images to each user // in the steam folder by modifying it's VDF file foreach (var user in users) @@ -415,30 +416,26 @@ private async Task ExportGames() { foreach (var app in selected_apps) { - string icon = ""; - if (gridImagesDownloadTasks.Count > 0) + try { - await Task.WhenAll(gridImagesDownloadTasks); + + app.Icon = PersistAppIcon(app); + Log.Verbose("Defaulting to app.Icon for app " + app.Name); + + } + catch (System.IO.IOException) + { + Log.Verbose("Using backup icon for app " + app.Name); await Task.Run(() => { string tmpGridDirectory = Path.GetTempPath() + "UWPHook\\tmp_grid\\"; string[] images = Directory.GetFiles(tmpGridDirectory); - foreach (string image in images) - { - if (image.EndsWith("_logo.png")) - { - icon = PersistAppIcon(app, image); - break; - } - } + UInt64 gameId = GenerateSteamGridAppId(app.Name, exePath); + app.Icon = PersistAppIcon(app, tmpGridDirectory + gameId + "_logo.png"); }); } - else - { - icon = PersistAppIcon(app); - } VDFEntry newApp = new VDFEntry() { @@ -448,7 +445,7 @@ await Task.Run(() => LaunchOptions = app.Aumid + " " + app.Executable, AllowDesktopConfig = 1, AllowOverlay = 1, - Icon = icon, + Icon = app.Icon, Index = shortcuts.Length, IsHidden = 0, OpenVR = 0, @@ -537,7 +534,6 @@ private string PersistAppIcon(AppEntry app, string forcedIcon = "") // If we do not have an specific icon to copy, copy app.icon, if we do, copy the specified icon string icon_to_copy = String.IsNullOrEmpty(forcedIcon) ? app.Icon : forcedIcon; - if (!Directory.Exists(icons_path)) { Directory.CreateDirectory(icons_path); @@ -548,13 +544,10 @@ private string PersistAppIcon(AppEntry app, string forcedIcon = "") { File.Copy(icon_to_copy, dest_file, true); } - catch (System.IO.IOException) + catch (System.IO.IOException e) { - // This file is most likely encrypted or does not exist, so we return the app.Icon itself - // but this app is now prone to #90 unfortunately, if we return String.empty, Steam will default - // to UWPHook's icon - Log.Warning("File could not be copied: " + icon_to_copy); - dest_file = app.Icon; + Log.Warning(e, "Could not copy icon " + app.Icon); + throw e; } return dest_file;