namespace ModpackUpdater.Manager; public static class Extensions { public static bool IsSide(this Side @this, Side side) { return @this.HasFlag(side); } public static void CopyDirectory(string sourceDir, string destinationDir, bool recursive) { // Get information about the source directory var dir = new DirectoryInfo(sourceDir); // Check if the source directory exists if (!dir.Exists) throw new DirectoryNotFoundException($"Source directory not found: {dir.FullName}"); // Cache directories before we start copying DirectoryInfo[] dirs = dir.GetDirectories(); // Create the destination directory Directory.CreateDirectory(destinationDir); // Get the files in the source directory and copy to the destination directory foreach (FileInfo @file in dir.GetFiles()) { string targetFilePath = Path.Combine(destinationDir, @file.Name); @file.CopyTo(targetFilePath, true); } // If recursive and copying subdirectories, recursively call this method if (recursive) { foreach (DirectoryInfo subDir in dirs) { string newDestinationDir = Path.Combine(destinationDir, subDir.Name); CopyDirectory(subDir.FullName, newDestinationDir, true); } } } public static string GetSourceUrl(this InstallAction @this, Version version, string? overwriteVersion = null) { if (!string.IsNullOrWhiteSpace(overwriteVersion)) return @this.SourceUrl?.Replace("{version}", overwriteVersion); if (version is not null) return @this.SourceUrl?.Replace("{version}", version.ToString(3)); return @this.SourceUrl; } public static string GetInstallUrl(this ModpackConfig @this, string? overwriteRefTag = null) { if (!string.IsNullOrWhiteSpace(overwriteRefTag)) return @this.InstallUrl?.Replace("{ref}", overwriteRefTag); if (!string.IsNullOrWhiteSpace(@this.RefTag)) return @this.InstallUrl?.Replace("{ref}", @this.RefTag); return @this.InstallUrl; } public static string GetUpdateUrl(this ModpackConfig @this, string? overwriteRefTag = null) { if (!string.IsNullOrWhiteSpace(overwriteRefTag)) return @this.UpdateUrl?.Replace("{ref}", overwriteRefTag); if (!string.IsNullOrWhiteSpace(@this.RefTag)) return @this.UpdateUrl?.Replace("{ref}", @this.RefTag); return @this.UpdateUrl; } }