|
1 | 1 | using System.Reflection; |
2 | 2 | using System.Text.Json; |
| 3 | +using DeepPurge.Core.App; |
3 | 4 | using DeepPurge.Core.Diagnostics; |
4 | 5 |
|
5 | 6 | namespace DeepPurge.Core.Data; |
@@ -62,22 +63,53 @@ public static class LeftoverSignatureDb |
62 | 63 |
|
63 | 64 | private static List<LeftoverSignature> Load() |
64 | 65 | { |
| 66 | + var all = new List<LeftoverSignature>(); |
| 67 | + |
65 | 68 | try |
66 | 69 | { |
67 | 70 | var asm = Assembly.GetExecutingAssembly(); |
68 | 71 | var resourceName = asm.GetManifestResourceNames() |
69 | 72 | .FirstOrDefault(n => n.EndsWith("leftover-signatures.json", StringComparison.OrdinalIgnoreCase)); |
70 | | - if (resourceName == null) return new(); |
71 | | - |
72 | | - using var stream = asm.GetManifestResourceStream(resourceName); |
73 | | - if (stream == null) return new(); |
74 | | - |
75 | | - return JsonSerializer.Deserialize<List<LeftoverSignature>>(stream) ?? new(); |
| 73 | + if (resourceName != null) |
| 74 | + { |
| 75 | + using var stream = asm.GetManifestResourceStream(resourceName); |
| 76 | + if (stream != null) |
| 77 | + { |
| 78 | + var embedded = JsonSerializer.Deserialize<List<LeftoverSignature>>(stream); |
| 79 | + if (embedded != null) all.AddRange(embedded); |
| 80 | + } |
| 81 | + } |
76 | 82 | } |
77 | | - catch (Exception ex) |
| 83 | + catch (Exception ex) { Log.Warn($"Failed to load embedded signatures: {ex.Message}"); } |
| 84 | + |
| 85 | + try |
78 | 86 | { |
79 | | - Log.Warn($"Failed to load leftover signatures: {ex.Message}"); |
80 | | - return new(); |
| 87 | + var cleanersDir = DataPaths.Cleaners; |
| 88 | + if (Directory.Exists(cleanersDir)) |
| 89 | + { |
| 90 | + foreach (var file in Directory.GetFiles(cleanersDir, "*.signatures.json")) |
| 91 | + { |
| 92 | + try |
| 93 | + { |
| 94 | + var json = File.ReadAllText(file); |
| 95 | + var external = JsonSerializer.Deserialize<List<LeftoverSignature>>(json); |
| 96 | + if (external == null) continue; |
| 97 | + foreach (var ext in external) |
| 98 | + { |
| 99 | + var existing = all.FindIndex(s => |
| 100 | + s.Name.Equals(ext.Name, StringComparison.OrdinalIgnoreCase)); |
| 101 | + if (existing >= 0) |
| 102 | + all[existing] = ext; |
| 103 | + else |
| 104 | + all.Add(ext); |
| 105 | + } |
| 106 | + } |
| 107 | + catch (Exception ex) { Log.Warn($"Failed to load {file}: {ex.Message}"); } |
| 108 | + } |
| 109 | + } |
81 | 110 | } |
| 111 | + catch (Exception ex) { Log.Warn($"Failed to scan external signatures: {ex.Message}"); } |
| 112 | + |
| 113 | + return all; |
82 | 114 | } |
83 | 115 | } |
0 commit comments