diff --git a/DisplayMagician/GameLibraries/GameLibrary.cs b/DisplayMagician/GameLibraries/GameLibrary.cs index 6ac3a63..7069d7f 100644 --- a/DisplayMagician/GameLibraries/GameLibrary.cs +++ b/DisplayMagician/GameLibraries/GameLibrary.cs @@ -269,7 +269,8 @@ namespace DisplayMagician.GameLibraries EpicLibrary.GetLibrary().AllInstalledGames.Clear(); GogLibrary.GetLibrary().AllInstalledGames.Clear(); // Produce a single array of Games we can reference later - GameLibrary.AllInstalledGamesInAllLibraries = SteamLibrary.GetLibrary().AllInstalledGames; + GameLibrary.AllInstalledGamesInAllLibraries = new List(); + GameLibrary.AllInstalledGamesInAllLibraries.AddRange(SteamLibrary.GetLibrary().AllInstalledGames); GameLibrary.AllInstalledGamesInAllLibraries.AddRange(UplayLibrary.GetLibrary().AllInstalledGames); GameLibrary.AllInstalledGamesInAllLibraries.AddRange(OriginLibrary.GetLibrary().AllInstalledGames); GameLibrary.AllInstalledGamesInAllLibraries.AddRange(EpicLibrary.GetLibrary().AllInstalledGames); diff --git a/DisplayMagician/GameLibraries/UplayLibrary.cs b/DisplayMagician/GameLibraries/UplayLibrary.cs index aed036e..79d6c44 100644 --- a/DisplayMagician/GameLibraries/UplayLibrary.cs +++ b/DisplayMagician/GameLibraries/UplayLibrary.cs @@ -482,7 +482,7 @@ namespace DisplayMagician.GameLibraries if (uplayInstallKey != null) { int uplayGamesInstalledCount = 0; - // Loop through the subKeys as they are the Steam Game IDs + // Loop through the subKeys as they are the Uplay Game IDs foreach (string uplayGameKeyName in uplayInstallKey.GetSubKeyNames()) { logger.Trace($"UplayLibrary/LoadInstalledGames: Found uplayGameKeyName = {uplayGameKeyName}"); @@ -497,7 +497,7 @@ namespace DisplayMagician.GameLibraries if (!uplayGameKey.GetValue(@"InstallDir", "").ToString().Equals("")) { logger.Trace($"UplayLibrary/LoadInstalledGames: {uplayGameKey} contains an 'InstallDir' value so is an installed Uplay Game."); - // Add this Steam App ID to the list we're keeping for later + // Add this Uplay App ID to the list we're keeping for later uplayGamesInstalledCount++; } else diff --git a/DisplayMagician/Properties/AssemblyInfo.cs b/DisplayMagician/Properties/AssemblyInfo.cs index 3d20a54..ea3264f 100644 --- a/DisplayMagician/Properties/AssemblyInfo.cs +++ b/DisplayMagician/Properties/AssemblyInfo.cs @@ -26,8 +26,8 @@ using System.Resources; [assembly: Guid("e4ceaf5e-ad01-4695-b179-31168eb74c48")] // Version information -[assembly: AssemblyVersion("2.1.3.1")] -[assembly: AssemblyFileVersion("2.1.3.1")] +[assembly: AssemblyVersion("2.1.3.10")] +[assembly: AssemblyFileVersion("2.1.3.10")] [assembly: NeutralResourcesLanguageAttribute( "en" )] [assembly: CLSCompliant(true)] diff --git a/DisplayMagician/ShortcutItem.cs b/DisplayMagician/ShortcutItem.cs index 9148c18..093fa1a 100644 --- a/DisplayMagician/ShortcutItem.cs +++ b/DisplayMagician/ShortcutItem.cs @@ -1159,6 +1159,7 @@ namespace DisplayMagician // Is the main application still installed? if (Category.Equals(ShortcutCategory.Application)) { + logger.Trace($"ShortcutItem/RefreshValidity: This shortcut is an Application"); // We need to check if the Application still exists if (!System.IO.File.Exists(ExecutableNameAndPath)) { @@ -1180,41 +1181,76 @@ namespace DisplayMagician else if (Category.Equals(ShortcutCategory.Game)) { GameLibrary gameLibraryToUse = null; - + logger.Trace($"ShortcutItem/RefreshValidity: This shortcut is a Game"); // If the game is a Steam Game we check for that if (GameLibrary.Equals(SupportedGameLibraryType.Steam)) { logger.Trace($"ShortcutItem/RefreshValidity: The game library is Steam"); // We now need to get the SteamGame info - gameLibraryToUse = SteamLibrary.GetLibrary(); + try + { + gameLibraryToUse = SteamLibrary.GetLibrary(); + } + catch(Exception ex) + { + logger.Error(ex,$"ShortcutItem/RefreshValidity: Exception while trying to get a handle to the Steam library"); + } } // If the game is a Uplay Uplay Game we check for that else if (GameLibrary.Equals(SupportedGameLibraryType.Uplay)) { logger.Trace($"ShortcutItem/RefreshValidity: The game library is Uplay"); // We now need to get the Uplay Game info - gameLibraryToUse = UplayLibrary.GetLibrary(); + try + { + gameLibraryToUse = UplayLibrary.GetLibrary(); + } + catch (Exception ex) + { + logger.Error(ex, $"ShortcutItem/RefreshValidity: Exception while trying to get a handle to the Uplay library"); + } } // If the game is an Origin Game we check for that else if (GameLibrary.Equals(SupportedGameLibraryType.Origin)) { logger.Trace($"ShortcutItem/RefreshValidity: The game library is Origin"); // We now need to get the Uplay Game info - gameLibraryToUse = OriginLibrary.GetLibrary(); + try + { + gameLibraryToUse = OriginLibrary.GetLibrary(); + } + catch (Exception ex) + { + logger.Error(ex, $"ShortcutItem/RefreshValidity: Exception while trying to get a handle to the Origin library"); + } } // If the game is an Epic Game we check for that else if (GameLibrary.Equals(SupportedGameLibraryType.Epic)) { logger.Trace($"ShortcutItem/RefreshValidity: The game library is Epic"); // We now need to get the Epic Game info - gameLibraryToUse = EpicLibrary.GetLibrary(); + try + { + gameLibraryToUse = EpicLibrary.GetLibrary(); + } + catch (Exception ex) + { + logger.Error(ex, $"ShortcutItem/RefreshValidity: Exception while trying to get a handle to the Epic library"); + } } // If the game is an GOG Game we check for that else if (GameLibrary.Equals(SupportedGameLibraryType.GOG)) { logger.Trace($"ShortcutItem/RefreshValidity: The game library is GOG"); - // We now need to get the GOG Game info - gameLibraryToUse = GogLibrary.GetLibrary(); + // We now need to get the GOG Game info + try + { + gameLibraryToUse = GogLibrary.GetLibrary(); + } + catch (Exception ex) + { + logger.Error(ex, $"ShortcutItem/RefreshValidity: Exception while trying to get a handle to the GOG library"); + } } else { @@ -1256,7 +1292,18 @@ namespace DisplayMagician if (worstError != ShortcutValidity.Error) worstError = ShortcutValidity.Error; } - } + } + else + { + logger.Trace($"ShortcutItem/RefreshValidity: The GameLibrary was not created properly during the validity check!"); + ShortcutError error = new ShortcutError(); + error.Name = "GameLibraryToUseNotCreated"; + error.Validity = ShortcutValidity.Error; + error.Message = $"The GameLibrary was not created properly during the validity check."; + _shortcutErrors.Add(error); + if (worstError != ShortcutValidity.Error) + worstError = ShortcutValidity.Error; + } } // Check the Audio Device is still valid (if one is specified) CoreAudioController audioController = ShortcutRepository.AudioController; @@ -1268,22 +1315,26 @@ namespace DisplayMagician try { audioDevices = audioController.GetPlaybackDevices(); + logger.Trace($"ShortcutItem/RefreshValidity: Audio Controller successfully detected"); } catch (Exception ex) { - logger.Warn(ex, $"ShortcutRepository/RefreshValidity: Exception trying to get all playback devices!"); + logger.Warn(ex, $"ShortcutItem/RefreshValidity: Exception trying to get all playback devices!"); } if (audioDevices != null) { + bool audioFound = false; + logger.Trace($"ShortcutItem/RefreshValidity: Audio Controller successfully returned a list of audio playback devices"); foreach (CoreAudioDevice audioDevice in audioDevices) { logger.Trace($"ShortcutItem/RefreshValidity: Detected audio playback device {audioDevice.FullName}"); if (audioDevice.FullName.Equals(AudioDevice)) { + audioFound = true; logger.Trace($"ShortcutItem/RefreshValidity: Detected audio playback device {audioDevice.FullName} is the one we want!"); if (audioDevice.State == DeviceState.Disabled) { - logger.Warn($"ShortcutRepository/RefreshValidity: Detected audio playback device {audioDevice.FullName} is the one we want, but it is disabled!"); + logger.Warn($"ShortcutItem/RefreshValidity: Detected audio playback device {audioDevice.FullName} is the one we want, but it is disabled!"); ShortcutError error = new ShortcutError(); error.Name = "AudioDeviceDisabled"; error.Validity = ShortcutValidity.Warning; @@ -1294,36 +1345,39 @@ namespace DisplayMagician } if (audioDevice.State == DeviceState.NotPresent) { - logger.Warn($"ShortcutRepository/RefreshValidity: Detected audio playback device {audioDevice.FullName} is the one we want, but it is not present!"); + logger.Warn($"ShortcutItem/RefreshValidity: Detected audio playback device {audioDevice.FullName} is the one we want, but it is not present!"); ShortcutError error = new ShortcutError(); error.Name = "AudioDeviceNotPresent"; - error.Validity = ShortcutValidity.Error; + error.Validity = ShortcutValidity.Warning; error.Message = $"The Audio Device {AudioDevice} is not present, so the shortcut '{Name}' cannot be used."; _shortcutErrors.Add(error); - if (worstError != ShortcutValidity.Error) - worstError = ShortcutValidity.Error; - } - // As per Issue #39, this causes issues on HDMI audio devices and others that *could* work if the screen was enabled. - // Disabling this code as it is too much error checking for audio devices. The user can plug these in after the chagne and they will work. - /*if (audioDevice.State == DeviceState.Unplugged) - { - logger.Warn($"ShortcutRepository/RefreshValidity: Detected audio playback device {audioDevice.FullName} is the one we want, but it is unplugged!"); - ShortcutError error = new ShortcutError(); - error.Name = "AudioDeviceUnplugged"; - error.Validity = ShortcutValidity.Warning; - error.Message = $"The Audio Device {AudioDevice} is unplugged, so the shortcut '{Name}' cannot be used. You need to plug in the audio device to use this shortcut, or edit the shortcut to change the audio device."; - _shortcutErrors.Add(error); if (worstError != ShortcutValidity.Error) worstError = ShortcutValidity.Warning; - }*/ + } break; } } + + if (!audioFound) + { + logger.Warn($"ShortcutItem/RefreshValidity: The audio device {AudioDevice} was not found in the list of audio devices currently available!"); + ShortcutError error = new ShortcutError(); + error.Name = "AudioDeviceNotFound"; + error.Validity = ShortcutValidity.Warning; + error.Message = $"The audio device {AudioDevice} was not found in the list of audio devices currently available!"; + _shortcutErrors.Add(error); + if (worstError != ShortcutValidity.Error) + worstError = ShortcutValidity.Warning; + } } + else + { + logger.Warn($"ShortcutItem/RefreshValidity: No audio devices detected by Capture Audio. That's fine though, so not logging as an error."); + } } else { - logger.Error($"ShortcutRepository/RefreshValidity: The audio device chipset is not supported by DisplayMagician!"); + logger.Error($"ShortcutItem/RefreshValidity: The audio device chipset is not supported by DisplayMagician!"); ShortcutError error = new ShortcutError(); error.Name = "AudioChipsetNotSupported"; error.Validity = ShortcutValidity.Warning; @@ -1345,20 +1399,22 @@ namespace DisplayMagician } catch(Exception ex) { - logger.Warn(ex, $"ShortcutRepository/RefreshValidity: Exception trying to get all capture devices!"); + logger.Warn(ex, $"ShortcutItem/RefreshValidity: Exception trying to get all capture devices!"); } if (captureDevices != null) { + bool captureFound = false; foreach (CoreAudioDevice captureDevice in captureDevices) { logger.Trace($"ShortcutItem/RefreshValidity: Detected capture device {captureDevice.FullName}"); if (captureDevice.FullName.Equals(CaptureDevice)) { + captureFound = true; logger.Trace($"ShortcutItem/RefreshValidity: Detected capture device {captureDevice.FullName} is the one we want!"); if (captureDevice.State == DeviceState.Disabled) { - logger.Warn($"ShortcutRepository/RefreshValidity: Detected capture device {captureDevice.FullName} is the one we want, but it is disabled!"); + logger.Warn($"ShortcutItem/RefreshValidity: Detected capture device {captureDevice.FullName} is the one we want, but it is disabled!"); ShortcutError error = new ShortcutError(); error.Name = "CaptureDeviceDisabled"; error.Validity = ShortcutValidity.Warning; @@ -1369,40 +1425,43 @@ namespace DisplayMagician } if (captureDevice.State == DeviceState.NotPresent) { - logger.Warn($"ShortcutRepository/RefreshValidity: Detected capture device {captureDevice.FullName} is the one we want, but it is not present!"); + logger.Warn($"ShortcutItem/RefreshValidity: Detected capture device {captureDevice.FullName} is the one we want, but it is not present!"); ShortcutError error = new ShortcutError(); error.Name = "CaptureDeviceNotPresent"; - error.Validity = ShortcutValidity.Error; + error.Validity = ShortcutValidity.Warning; error.Message = $"The Capture Device {CaptureDevice} is not present, so the shortcut '{Name}' cannot be used."; _shortcutErrors.Add(error); - if (worstError != ShortcutValidity.Error) - worstError = ShortcutValidity.Error; - } - // As per Issue #39, this causes issues on HDMI audiodevices and others that *could* work if the screen was enabled. - // Disabling this code as it is too much error checking for capture devices. The user can plug these in after the chagne and they will work. - /*if (captureDevice.State == DeviceState.Unplugged) - { - logger.Warn($"ShortcutRepository/RefreshValidity: Detected capture device {captureDevice.FullName} is the one we want, but it is unplugged!"); - ShortcutError error = new ShortcutError(); - error.Name = "CaptureDeviceUnplugged"; - error.Validity = ShortcutValidity.Warning; - error.Message = $"The Capture Device {CaptureDevice} is unplugged, so the shortcut '{Name}' cannot be used. You need to plug in the capture device to use this shortcut, or edit the shortcut to change the capture device."; - _shortcutErrors.Add(error); if (worstError != ShortcutValidity.Error) worstError = ShortcutValidity.Warning; - }*/ + } break; } } - } + + if (!captureFound) + { + logger.Warn($"ShortcutItem/RefreshValidity: The capture device {CaptureDevice} was not found in the list of capture devices currently available!"); + ShortcutError error = new ShortcutError(); + error.Name = "CaptureDeviceNotFound"; + error.Validity = ShortcutValidity.Warning; + error.Message = $"The capture device {CaptureDevice} was not found in the list of capture devices currently available!"; + _shortcutErrors.Add(error); + if (worstError != ShortcutValidity.Error) + worstError = ShortcutValidity.Warning; + } + } + else + { + logger.Warn($"ShortcutItem/RefreshValidity: No capture devices detected by Capture Audio. That's fine though, so not logging as an error."); + } } else { - logger.Error($"ShortcutRepository/RefreshValidity: The capture device chipset is not supported by DisplayMagician!"); + logger.Error($"ShortcutItem/RefreshValidity: The capture device chipset is not supported by DisplayMagician!"); ShortcutError error = new ShortcutError(); - error.Name = "AudioChipsetNotSupported"; + error.Name = "CaptureChipsetNotSupported"; error.Validity = ShortcutValidity.Warning; - error.Message = $"The Audio chipset isn't supported by DisplayMagician. You need to edit the shortcut to not change the microphone input settings."; + error.Message = $"The Capture chipset isn't supported by DisplayMagician. You need to edit the shortcut to not change the microphone input settings."; _shortcutErrors.Add(error); if (worstError != ShortcutValidity.Error) worstError = ShortcutValidity.Warning; diff --git a/DisplayMagician/ShortcutRepository.cs b/DisplayMagician/ShortcutRepository.cs index b2d8c7b..76b93f9 100644 --- a/DisplayMagician/ShortcutRepository.cs +++ b/DisplayMagician/ShortcutRepository.cs @@ -482,11 +482,13 @@ namespace DisplayMagician { foreach (string jsonError in jsonErrors) { - logger.Error($"ShortcutRepository/LoadShortcuts: {jsonErrors}"); + logger.Error($"ShortcutRepository/LoadShortcuts: JSON.Net Error found while loading {_shortcutStorageJsonFileName}: {jsonErrors}"); } } - + logger.Trace($"ShortcutRepository/LoadShortcuts: Loaded {_allShortcuts.Count} shortcuts from {_shortcutStorageJsonFileName} Shortcut JSON file"); + + // Lookup all the Profile Names in the Saved Profiles // and link the profiles to the Shortcuts as we only // store the profile names to allow users to uodate profiles @@ -494,7 +496,7 @@ namespace DisplayMagician logger.Debug($"ShortcutRepository/LoadShortcuts: Connecting Shortcut profile names to the real profile objects"); foreach (ShortcutItem updatedShortcut in _allShortcuts) { - if (!String.IsNullOrWhiteSpace(updatedShortcut.ProfileUUID)) + if (String.IsNullOrWhiteSpace(updatedShortcut.ProfileUUID)) { logger.Error($"ShortcutRepository/LoadShortcuts: Shortcut '{updatedShortcut.Name}' profile UUID is null or whitespace! Skipping this processing this entry, and setting ProfileToUse to null."); updatedShortcut.ProfileToUse = null; @@ -528,10 +530,10 @@ namespace DisplayMagician updatedShortcut.ProfileToUse = null; } } - // Sort the shortcuts alphabetically + logger.Trace($"ShortcutRepository/LoadShortcuts: Sorting the Shortcuts alphabetically."); _allShortcuts.Sort(); } else @@ -543,10 +545,17 @@ namespace DisplayMagician { logger.Debug($"ShortcutRepository/LoadShortcuts: Couldn't find the {_shortcutStorageJsonFileName} shortcut JSON file that contains the Shortcuts"); } - _shortcutsLoaded = true; - - IsValidRefresh(); - return true; + logger.Trace($"ShortcutRepository/LoadShortcuts: Checking validity of the loaded shortcuts to make sure they're ok to use now"); + try + { + _shortcutsLoaded = true; + return true; + } + catch (Exception ex) + { + logger.Error(ex, $"ShortcutRepository/LoadShortcuts: Exception while checking the validity of the loaded shortcuts to make sure they're ok to use"); + return false; + } } public static bool SaveShortcuts() @@ -632,11 +641,13 @@ namespace DisplayMagician { // We need to refresh the cached answer // Get the list of connected devices - + logger.Trace($"ShortcutRepository/IsValidRefresh: IsValidRefresh starting."); foreach (ShortcutItem loadedShortcut in AllShortcuts) { + logger.Trace($"ShortcutRepository/IsValidRefresh: Running RefreshValidity on Shortcut {loadedShortcut.Name}"); loadedShortcut.RefreshValidity(); } + logger.Trace($"ShortcutRepository/IsValidRefresh: IsValidRefresh completed."); } private static ProcessPriorityClass TranslatePriorityClassToClass(ProcessPriority processPriority) diff --git a/DisplayMagician/UIForms/MainForm.cs b/DisplayMagician/UIForms/MainForm.cs index 0739a59..c3dc0c6 100644 --- a/DisplayMagician/UIForms/MainForm.cs +++ b/DisplayMagician/UIForms/MainForm.cs @@ -272,6 +272,7 @@ namespace DisplayMagician.UIForms private void btn_setup_display_profiles_Click(object sender, EventArgs e) { + logger.Trace($"MainForm/btn_setup_display_profiles_Click: User pressed the Display Profiles button (or selected the menu item)"); DisplayProfileForm displayProfileForm = null; if (Application.OpenForms.OfType().Any()) { @@ -295,6 +296,7 @@ namespace DisplayMagician.UIForms private void btn_setup_game_shortcuts_Click(object sender, EventArgs e) { + logger.Trace($"MainForm/btn_setup_game_shortcuts_Click: User pressed the Game Shortcuts button (or selected the menu item)"); ShortcutLibraryForm shortcutLibraryForm = null; if (Application.OpenForms.OfType().Any()) { diff --git a/DisplayMagician/UIForms/ShortcutForm.cs b/DisplayMagician/UIForms/ShortcutForm.cs index 24edc7d..a6f3eea 100644 --- a/DisplayMagician/UIForms/ShortcutForm.cs +++ b/DisplayMagician/UIForms/ShortcutForm.cs @@ -919,6 +919,39 @@ namespace DisplayMagician.UIForms private void ClearForm() { + // Reset all the tracking variables back to default + _editingExistingShortcut = false; + //_loadedProfiles = new List(); + _profileToUse = null; + _gameLauncher = ""; + //_gameToUse; + // _executableToUse; + _displayPermanence = ShortcutPermanence.Temporary; + _audioPermanence = ShortcutPermanence.Temporary; + _capturePermanence = ShortcutPermanence.Temporary; + _startPrograms = new List(); + _stopPrograms = new List(); + _audioDevice = ""; + _changeAudioDevice = false; + _setAudioVolume = false; + _audioVolume = -1; + _captureDevice = ""; + _changeCaptureDevice = false; + _setCaptureVolume = false; + _captureVolume = -1; + _shortcutToEdit = null; + _selectedGame = null; + _isUnsaved = true; + _loadedShortcut = false; + _autoName = true; + _gameId = "0"; + _uuid = ""; + audioDevices = null; + selectedAudioDevice = null; + captureDevices = null; + selectedCaptureDevice = null; + _hotkey = Keys.None; + // Clear the textboxes txt_alternative_executable.Text = ""; txt_alternative_game.Text = ""; @@ -1376,10 +1409,10 @@ namespace DisplayMagician.UIForms cb_wait_alternative_game.Checked = false; } - // Set the launcher items if we have them + // Show an error message if there isn't a game launcher selected if (_shortcutToEdit.GameLibrary.Equals(SupportedGameLibraryType.Unknown)) { - if (DisplayMagician.GameLibraries.GameLibrary.AllInstalledGamesInAllLibraries.Count <= 0) + if (GameLibraries.GameLibrary.AllInstalledGamesInAllLibraries.Count <= 0) { // Fill in the game library information to highlight there isn't one detected. _gameLauncher = "None detected"; @@ -1398,6 +1431,7 @@ namespace DisplayMagician.UIForms } else { + // Set the launcher items if we have them _gameLauncher = _shortcutToEdit.GameLibrary.ToString("G"); txt_game_name.Text = _shortcutToEdit.GameName; _gameId = _shortcutToEdit.GameAppId; diff --git a/DisplayMagician/UIForms/ShortcutLibraryForm.cs b/DisplayMagician/UIForms/ShortcutLibraryForm.cs index 8b69152..206217f 100644 --- a/DisplayMagician/UIForms/ShortcutLibraryForm.cs +++ b/DisplayMagician/UIForms/ShortcutLibraryForm.cs @@ -43,13 +43,14 @@ namespace DisplayMagician.UIForms // Refresh the profiles and the shortcut validity to start // The rest of the refreshing happens as the shortcuts are added // and deleted. + logger.Trace($"ShortcutLibraryForm/ShortcutLibraryForm_Load: Refreshing Possibilty."); ProfileRepository.IsPossibleRefresh(); + logger.Trace($"ShortcutLibraryForm/ShortcutLibraryForm_Load: Refreshing Validity."); ShortcutRepository.IsValidRefresh(); - + logger.Trace($"ShortcutLibraryForm/ShortcutLibraryForm_Load: Refreshing SHortutLibraryUI."); // Refresh the Shortcut Library UI RefreshShortcutLibraryUI(); - - + logger.Trace($"ShortcutLibraryForm/ShortcutLibraryForm_Load: Remove the UI warning if we do have some shortcuts to show the user."); RemoveWarningIfShortcuts(); } @@ -61,13 +62,18 @@ namespace DisplayMagician.UIForms return; // Temporarily stop updating the saved_profiles listview + logger.Trace($"ShortcutLibraryForm/RefreshShortcutLibraryUI: Suspending the imagelistview layout"); ilv_saved_shortcuts.SuspendLayout(); - ImageListViewItem newItem = null; + ImageListViewItem newItem = null; + logger.Trace($"ShortcutLibraryForm/RefreshShortcutLibraryUI: Emptying shortcut list"); ilv_saved_shortcuts.Items.Clear(); + foreach (ShortcutItem loadedShortcut in ShortcutRepository.AllShortcuts.OrderBy(s => s.Name)) { + logger.Trace($"ShortcutLibraryForm/RefreshShortcutLibraryUI: Adding shortcut {loadedShortcut.Name} into the list of shortcuts shown to the user "); + // Ignore any shortcuts with incompatible game libraries if (loadedShortcut.Category == ShortcutCategory.Game && (!Enum.IsDefined(typeof(SupportedGameLibraryType), loadedShortcut.GameLibrary) || loadedShortcut.GameLibrary == SupportedGameLibraryType.Unknown)) { @@ -81,26 +87,31 @@ namespace DisplayMagician.UIForms // Select it if its the selectedProfile if (_selectedShortcut is ShortcutItem && _selectedShortcut.Equals(loadedShortcut)) { + logger.Trace($"ShortcutLibraryForm/RefreshShortcutLibraryUI: This shortcut {loadedShortcut.Name} is the selected one so selecting it in the UI"); newItem.Selected = true; // Hide the run button if the shortcut isn't valid if (_selectedShortcut.IsValid == ShortcutValidity.Warning || _selectedShortcut.IsValid == ShortcutValidity.Error) { + logger.Trace($"ShortcutLibraryForm/RefreshShortcutLibraryUI: This shortcut {loadedShortcut.Name} is the selected one and is invalid ({_selectedShortcut.IsValid.ToString("G")}), so highlighting that in the UI"); btn_run.Visible = false; cms_shortcuts.Items[1].Enabled = false; } else { + logger.Trace($"ShortcutLibraryForm/RefreshShortcutLibraryUI: This shortcut {loadedShortcut.Name} is the selected one and is valid, so highlighting that in the UI"); btn_run.Visible = true; cms_shortcuts.Items[1].Enabled = true; } } //ilv_saved_profiles.Items.Add(newItem); + logger.Trace($"ShortcutLibraryForm/RefreshShortcutLibraryUI: Adding this shortcut {loadedShortcut.Name} to the imagelistview"); ilv_saved_shortcuts.Items.Add(newItem, _shortcutAdaptor); } - + logger.Trace($"ShortcutLibraryForm/RefreshShortcutLibraryUI: Resuming the imagelistview layout"); + // Restart updating the saved_profiles listview ilv_saved_shortcuts.ResumeLayout();