diff --git a/MareSynchronosAPI/CharacterCacheDto.cs b/MareSynchronosAPI/CharacterCacheDto.cs index 30905f3..61c6618 100644 --- a/MareSynchronosAPI/CharacterCacheDto.cs +++ b/MareSynchronosAPI/CharacterCacheDto.cs @@ -1,12 +1,50 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; +using System.Linq; namespace MareSynchronos.API { - public record CharacterCacheDto + public class CharacterCacheDto { public Dictionary> FileReplacements { get; set; } = new(); public Dictionary GlamourerData { get; set; } = new(); public string ManipulationData { get; set; } = string.Empty; - public string Hash { get; set; } = string.Empty; + public override string ToString() + { + return GetHashCode() + Environment.NewLine + "Manip:" + ManipulationData + Environment.NewLine + + string.Join(Environment.NewLine, GlamourerData.Select(g => g.Key + ":" + g.Value)) + Environment.NewLine + + string.Join(Environment.NewLine, FileReplacements.Select(g => g.Key + Environment.NewLine + string.Join(Environment.NewLine, g.Value))); + } + + public static int GetOrderIndependentHashCode(IEnumerable source) + { + int hash = 0; + foreach (T element in source) + { + hash = unchecked(hash + + EqualityComparer.Default.GetHashCode(element)); + } + return hash; + } + + public override int GetHashCode() + { + int fileReplacementsHash = 0; + foreach (var item in FileReplacements) + { + foreach (var values in item.Value) + { + fileReplacementsHash = unchecked(fileReplacementsHash + values.GetHashCode()); + } + } + + int glamourerHash = 0; + foreach (var item in GlamourerData) + { + glamourerHash = unchecked(glamourerHash + item.Value.GetHashCode()); + } + + return HashCode.Combine(fileReplacementsHash, glamourerHash, ManipulationData); + } } } diff --git a/MareSynchronosAPI/FileReplacementDto.cs b/MareSynchronosAPI/FileReplacementDto.cs index 9156856..c6ae7bc 100644 --- a/MareSynchronosAPI/FileReplacementDto.cs +++ b/MareSynchronosAPI/FileReplacementDto.cs @@ -1,13 +1,20 @@ using System; using System.Collections.Generic; +using System.Linq; namespace MareSynchronos.API { - public record FileReplacementDto + public class FileReplacementDto { public string[] GamePaths { get; set; } = Array.Empty(); public string Hash { get; set; } + public override bool Equals(object? otherObj) + { + if (otherObj == null || otherObj is not FileReplacementDto other) return false; + return Hash == other.Hash && Enumerable.SequenceEqual(GamePaths, other.GamePaths); + } + public override int GetHashCode() { return HashCode.Combine(GetOrderIndependentHashCode(GamePaths), Hash); @@ -23,5 +30,10 @@ namespace MareSynchronos.API } return hash; } + + public override string ToString() + { + return Hash + ":" + string.Join(",", GamePaths); + } } } \ No newline at end of file