using MareSynchronos.API.Data; using System.Text.RegularExpressions; namespace MareSynchronos.PlayerData.Data; public partial class FileReplacement { public FileReplacement(string[] gamePaths, string filePath) { GamePaths = gamePaths.Select(g => g.Replace('\\', '/').ToLowerInvariant()).ToHashSet(StringComparer.Ordinal); ResolvedPath = filePath.Replace('\\', '/'); } public HashSet GamePaths { get; init; } public bool HasFileReplacement => GamePaths.Count >= 1 && GamePaths.Any(p => !string.Equals(p, ResolvedPath, StringComparison.Ordinal)); public string Hash { get; set; } = string.Empty; public bool IsFileSwap => !LocalPathRegex().IsMatch(ResolvedPath) && GamePaths.All(p => !LocalPathRegex().IsMatch(p)); public string ResolvedPath { get; init; } public FileReplacementData ToFileReplacementDto() { return new FileReplacementData { GamePaths = [.. GamePaths], Hash = Hash, FileSwapPath = IsFileSwap ? ResolvedPath : string.Empty, }; } public override string ToString() { return $"HasReplacement:{HasFileReplacement},IsFileSwap:{IsFileSwap} - {string.Join(",", GamePaths)} => {ResolvedPath}"; } #pragma warning disable MA0009 [GeneratedRegex(@"^[a-zA-Z]:(/|\\)", RegexOptions.ECMAScript)] private static partial Regex LocalPathRegex(); #pragma warning restore MA0009 }