Files
Exterrata 9bb4f85802 CVR Manager 1.0.0
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-25 02:46:35 -04:00

36 lines
1.3 KiB
C#

using CVRManager.Models;
namespace CVRManager.Services;
public static class InstallFolders
{
public static string UniqueFolder(IEnumerable<InstallInfo> all, InstallInfo self, string name)
{
var stem = $"{Paths.SafeFolderName(name)}-{self.Id[..4]}";
var candidate = stem;
for (var n = 2; Taken(all, self, candidate); n++) candidate = $"{stem}-{n}";
return candidate;
}
static bool Taken(IEnumerable<InstallInfo> all, InstallInfo self, string candidate)
{
if (all.Any(i => !ReferenceEquals(i, self) && i.Folder.Equals(candidate, StringComparison.OrdinalIgnoreCase))) return true;
if (candidate.Equals(self.Folder, StringComparison.OrdinalIgnoreCase)) return false;
return Directory.Exists(Path.Combine(Paths.InstallsRoot, candidate));
}
public static void Rename(InstallInfo info, string desiredFolder)
{
var oldDir = Paths.InstallDir(info);
var newDir = Path.Combine(Paths.InstallsRoot, desiredFolder);
if (oldDir.Equals(newDir, StringComparison.Ordinal)) return;
if (oldDir.Equals(newDir, StringComparison.OrdinalIgnoreCase))
{
var temp = oldDir + ".renaming";
Directory.Move(oldDir, temp);
Directory.Move(temp, newDir);
}
else Directory.Move(oldDir, newDir);
}
}