CVR Manager 1.0.0
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user