Skip to content

Commit a21d4a3

Browse files
committed
feat: load external *.signatures.json files from DataPaths.Cleaners alongside embedded DB
1 parent 2a765fc commit a21d4a3

1 file changed

Lines changed: 41 additions & 9 deletions

File tree

src/DeepPurge.Core/Data/LeftoverSignatureDb.cs

Lines changed: 41 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System.Reflection;
22
using System.Text.Json;
3+
using DeepPurge.Core.App;
34
using DeepPurge.Core.Diagnostics;
45

56
namespace DeepPurge.Core.Data;
@@ -62,22 +63,53 @@ public static class LeftoverSignatureDb
6263

6364
private static List<LeftoverSignature> Load()
6465
{
66+
var all = new List<LeftoverSignature>();
67+
6568
try
6669
{
6770
var asm = Assembly.GetExecutingAssembly();
6871
var resourceName = asm.GetManifestResourceNames()
6972
.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+
}
7682
}
77-
catch (Exception ex)
83+
catch (Exception ex) { Log.Warn($"Failed to load embedded signatures: {ex.Message}"); }
84+
85+
try
7886
{
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+
}
81110
}
111+
catch (Exception ex) { Log.Warn($"Failed to scan external signatures: {ex.Message}"); }
112+
113+
return all;
82114
}
83115
}

0 commit comments

Comments
 (0)