diff --git a/src/GameManagement/GameManagementPlugin.cs b/src/GameManagement/GameManagementPlugin.cs index af0ad27..de65a86 100644 --- a/src/GameManagement/GameManagementPlugin.cs +++ b/src/GameManagement/GameManagementPlugin.cs @@ -44,15 +44,37 @@ public override IEnumerable GetGameMenuItems(GetGameMenuItemsArgs Action = UninstallGameMenuAction, Description = "Uninstall" }; + + yield return new GameMenuItem + { + Action = UninstallAndRemoveGameMenuAction, + Description = "Uninstall and Remove" + }; } private void UninstallGameMenuAction(GameMenuItemActionArgs args) + { + UninstallGames(args); + } + + private void UninstallAndRemoveGameMenuAction(GameMenuItemActionArgs args) + { + var games = UninstallGames(args); + foreach (var game in games) + { + _playniteAPI.Database.Games.Remove(game); + } + } + + private List UninstallGames(GameMenuItemActionArgs args) { var games = args.Games; - if (games is null || !games.Any()) return; + if (games is null || !games.Any()) return new List(); _logger.LogInformation("Uninstalling {Count} games", games.Count.ToString()); + var actuallyUninstalledGames = new List(); + foreach (var game in games) { _logger.LogDebug("Uninstalling {Name}", game.Name); @@ -65,17 +87,13 @@ private void UninstallGameMenuAction(GameMenuItemActionArgs args) continue; } + actuallyUninstalledGames.Add(game); Directory.Delete(game.InstallDirectory, true); - _playniteAPI.Database.Games.Remove(game); - - // the internal uninstallation thing by Playnite is unreliable and is intended to remove the files but not - // the game from Playnite itself - // _playniteAPI.UninstallGame(game.Id); - _storageInfo.RemoveStorageInfo(game); } _storageInfo.SaveToFile(StoragePath); + return actuallyUninstalledGames; } private readonly CancellationTokenSource _source = new();