using CVRManager.Models; namespace CVRManager.Services; public static class InstallFolders { public static string UniqueFolder(IEnumerable 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 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); } }