namespace VFXReviewWorker; /// /// Translates canonical UNC paths from manifests to this machine's local /// drive mappings (ยง7.8 pathMappings). Comparison is case-insensitive and /// slash-direction tolerant; the first matching mapping wins. /// public sealed class PathMapper { private readonly List<(string From, string To)> _mappings; public PathMapper(IEnumerable mappings) { _mappings = mappings .Where(m => !string.IsNullOrWhiteSpace(m.From)) .Select(m => (Normalize(m.From), m.To)) .ToList(); } private static string Normalize(string p) => p.Replace('\\', '/'); public string Map(string path) { if (string.IsNullOrEmpty(path)) return path; var normalized = Normalize(path); foreach (var (from, to) in _mappings) { if (normalized.StartsWith(from, StringComparison.OrdinalIgnoreCase)) { var mapped = to + normalized[from.Length..]; return mapped.Replace('/', Path.DirectorySeparatorChar); } } return path.Replace('/', Path.DirectorySeparatorChar); } }