Mod Director Resolver

This commit is contained in:
Canon
2026-02-04 13:39:06 +08:00
parent 824c4315b8
commit 93e3ba8175
3 changed files with 60 additions and 62 deletions
+1 -32
View File
@@ -14,7 +14,7 @@ public class ScanCommand : AsyncCommand<ModPathSettings>
try
{
// Resolve mods directory
var modsDirectory = ResolveModsDirectory(settings);
var modsDirectory = ModsDirectoryResolver.Resolve(settings.ModDirectory?.FullName, interactive: true);
if (modsDirectory == null)
{
return 1;
@@ -50,35 +50,4 @@ public class ScanCommand : AsyncCommand<ModPathSettings>
return 1;
}
}
private static string? ResolveModsDirectory(ModPathSettings settings)
{
if (settings.ModDirectory != null)
{
return settings.ModDirectory.FullName;
}
// Auto-discover
var pathDiscovery = new PathDiscoveryService();
var paths = pathDiscovery.DiscoverModPaths();
if (paths.Count == 0)
{
AnsiConsole.MarkupLine("[red]Error: Could not find RimWorld Mods folder.[/]");
AnsiConsole.MarkupLine("[grey]Please specify the path using --directory[/]");
return null;
}
if (paths.Count == 1)
{
return paths[0];
}
// Multiple paths found - let user choose
return AnsiConsole.Prompt(
new SelectionPrompt<string>()
.Title("[bold]Multiple RimWorld installations found. Select one:[/]")
.PageSize(10)
.AddChoices(paths));
}
}
+1 -30
View File
@@ -17,7 +17,7 @@ public class UpdateCommand : AsyncCommand<ModPathSettings>
try
{
// Resolve mods directory
var modsDirectory = ResolveModsDirectory(settings);
var modsDirectory = ModsDirectoryResolver.Resolve(settings.ModDirectory?.FullName, interactive: false);
if (modsDirectory == null)
{
return 1;
@@ -90,33 +90,4 @@ public class UpdateCommand : AsyncCommand<ModPathSettings>
return 1;
}
}
private static string? ResolveModsDirectory(ModPathSettings settings)
{
if (settings.ModDirectory != null)
{
return settings.ModDirectory.FullName;
}
// Auto-discover
var pathDiscovery = new PathDiscoveryService();
var paths = pathDiscovery.DiscoverModPaths();
if (paths.Count == 0)
{
AnsiConsole.MarkupLine("[red]Error: Could not find RimWorld Mods folder.[/]");
AnsiConsole.MarkupLine("[grey]Please specify the path using --directory[/]");
return null;
}
if (paths.Count == 1)
{
return paths[0];
}
// Multiple paths found - use first one for non-interactive mode
AnsiConsole.MarkupLine($"[yellow]Multiple installations found, using: {paths[0]}[/]");
AnsiConsole.MarkupLine("[grey]Use --directory to specify a different path[/]");
return paths[0];
}
}