9bb4f85802
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
36 lines
1.3 KiB
C#
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);
|
|
}
|
|
}
|