Implement file hash-based library matching and remove fuzzy ASIN matching

Adds file hash-based matching for Audiobookshelf library items to ensure 100% accurate ASIN assignment for RMAB-organized content. Removes fuzzy matching from library availability checks, making all matching ASIN-only to eliminate false positives and race conditions. Updates database schema, processors, and matcher utilities; adds new tests and documentation for the new matching strategy. Removes obsolete scripts, Dockerfile, and related tests; updates docker-compose for test environments.
This commit is contained in:
kikootwo
2026-01-28 10:32:14 -05:00
parent 497849f427
commit a97979358f
111 changed files with 6571 additions and 1426 deletions
+20 -8
View File
@@ -99,14 +99,26 @@ export default function AdminSettings() {
// Extract configured indexers (enabled ones)
const configured = (data.indexers || [])
.filter((idx: IndexerConfig) => idx.enabled)
.map((idx: IndexerConfig) => ({
id: idx.id,
name: idx.name,
priority: idx.priority,
seedingTimeMinutes: idx.seedingTimeMinutes,
rssEnabled: idx.rssEnabled,
categories: idx.categories || [3030],
}));
.map((idx: IndexerConfig) => {
const config: any = {
id: idx.id,
name: idx.name,
protocol: idx.protocol,
priority: idx.priority,
rssEnabled: idx.rssEnabled,
categories: idx.categories || [3030],
};
// Add protocol-specific fields
const isTorrent = idx.protocol?.toLowerCase() === 'torrent';
if (isTorrent) {
config.seedingTimeMinutes = idx.seedingTimeMinutes ?? 0;
} else {
config.removeAfterProcessing = idx.removeAfterProcessing ?? true;
}
return config;
});
setConfiguredIndexers(configured);
setOriginalConfiguredIndexers(JSON.parse(JSON.stringify(configured)));
} else {