Skip to content

Commit 0829008

Browse files
committed
Uninstall ROMs when install flat is enabled
1 parent 19c0335 commit 0829008

3 files changed

Lines changed: 43 additions & 7 deletions

File tree

Games/RomMGameInfo.Plugin.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public EmulatorMapping Mapping
2626

2727
public InstallController GetInstallController(Game game, RomM romm, GameInstallInfo GameData) => new RomMInstallController(game, romm, GameData);
2828

29-
public UninstallController GetUninstallController(Game game, RomM romm) => new RomMUninstallController(game, romm);
29+
public UninstallController GetUninstallController(Game game, RomM romm, EmulatorMapping mapping) => new RomMUninstallController(game, romm, mapping);
3030

3131
protected IEnumerable<string> GetDescriptionLines()
3232
{

Games/RomMUninstallController.cs

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using Playnite.SDK.Models;
22
using Playnite.SDK.Plugins;
3+
using RomM.Settings;
34
using System.IO;
45
using System.Windows;
56

@@ -8,24 +9,38 @@ namespace RomM.Games
89
internal class RomMUninstallController : UninstallController
910
{
1011
private readonly IRomM _romM;
12+
private EmulatorMapping _mapping;
1113

12-
internal RomMUninstallController(Game game, IRomM romM) : base(game)
14+
internal RomMUninstallController(Game game, IRomM romM, EmulatorMapping mapping) : base(game)
1315
{
1416
Name = "Uninstall";
1517
_romM = romM;
18+
_mapping = mapping;
1619
}
1720

1821
public override void Uninstall(UninstallActionArgs args)
1922
{
20-
if (new DirectoryInfo(Game.InstallDirectory).Exists)
23+
if(_mapping.InstallFlat)
2124
{
22-
Directory.Delete(Game.InstallDirectory, true);
25+
foreach (var RomFile in Game.Roms)
26+
{
27+
if(File.Exists(RomFile.Path))
28+
File.Delete(RomFile.Path);
29+
}
2330
}
2431
else
2532
{
26-
_romM.Playnite.Dialogs.ShowMessage($"\"{Game.Name}\" folder could not be found. Marking as uninstalled.", "Game not found", MessageBoxButton.OK);
33+
if (new DirectoryInfo(Game.InstallDirectory).Exists)
34+
{
35+
Directory.Delete(Game.InstallDirectory, true);
36+
}
37+
else
38+
{
39+
_romM.Playnite.Dialogs.ShowMessage($"\"{Game.Name}\" folder could not be found. Marking as uninstalled.", "Game not found", MessageBoxButton.OK);
40+
}
2741
}
28-
Game.Roms.Clear();
42+
43+
Game.Roms.Clear();
2944
InvokeOnUninstalled(new GameUninstalledEventArgs());
3045
}
3146
}

RomM.cs

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -490,7 +490,28 @@ public override IEnumerable<UninstallController> GetUninstallActions(GetUninstal
490490
{
491491
if (args.Game.PluginId == Id)
492492
{
493-
yield return new RomMUninstallController(args.Game, this);
493+
EmulatorMapping mapping = null;
494+
495+
try
496+
{
497+
var splitID = args.Game.GameId.Split(':');
498+
string sidecarPath = $"{ROMDataPath}{splitID[1]}.json";
499+
if (File.Exists(sidecarPath))
500+
{
501+
var existingJson = File.ReadAllText(sidecarPath);
502+
var localROM = JsonConvert.DeserializeObject<RomMRomLocal>(existingJson);
503+
mapping = Settings.Mappings.FirstOrDefault(x => x.MappingId == localROM.MappingID);
504+
}
505+
}
506+
catch (Exception)
507+
{
508+
Logger.Error($"{args.Game.Name} GameID is malformed or json file is corrupted!");
509+
}
510+
511+
if (mapping == null)
512+
yield return null;
513+
514+
yield return new RomMUninstallController(args.Game, this, mapping);
494515
}
495516
}
496517
public override void OnGameInstalled(OnGameInstalledEventArgs args)

0 commit comments

Comments
 (0)