fix: xREL Sonderzeichen im Titel entfernen, leere Ergebnisse nur 30min cachen, Cache-Clear Endpoint
This commit is contained in:
@@ -118,14 +118,30 @@ function enrichMovie(movie, genreMap, fsk, rank) {
|
||||
// Jeder Eintrag hat ext_info.title für exakten Match + main_lang für German-Filter
|
||||
// Das spart den ext_info_id Lookup komplett
|
||||
|
||||
// Sonderzeichen aus Suchtitel entfernen die xREL verwirren
|
||||
function cleanTitle(t) {
|
||||
return (t || '').replace(/[*#@!?]/g, '').replace(/\s+/g, ' ').trim();
|
||||
}
|
||||
|
||||
async function xrelSearchGerman(title, originalTitle) {
|
||||
const cacheKey = `xrel:${originalTitle || title}`.toLowerCase();
|
||||
const cleanOrig = cleanTitle(originalTitle);
|
||||
const cleanTitle_ = cleanTitle(title);
|
||||
const cacheKey = `xrel:${cleanOrig || cleanTitle_}`.toLowerCase();
|
||||
const cached = dbCacheGet(cacheKey);
|
||||
if (cached !== undefined) return cached;
|
||||
|
||||
const queries = [originalTitle, title].filter(Boolean)
|
||||
// Queries: original ohne Sonderzeichen, dann deutsch, dann ohne Artikel
|
||||
const rawQueries = [cleanOrig, cleanTitle_]
|
||||
.filter(Boolean)
|
||||
.filter((v, i, a) => a.indexOf(v) === i);
|
||||
|
||||
// Zusätzlich: deutschen Artikel entfernen (Der/Die/Das am Anfang)
|
||||
const extraQueries = rawQueries
|
||||
.map(q => q.replace(/^(Der|Die|Das|Ein|Eine)\s+/i, '').trim())
|
||||
.filter(q => q && !rawQueries.includes(q));
|
||||
|
||||
const queries = [...rawQueries, ...extraQueries];
|
||||
|
||||
const results = [];
|
||||
const seen = new Set();
|
||||
|
||||
@@ -182,7 +198,13 @@ async function xrelSearchGerman(title, originalTitle) {
|
||||
}
|
||||
|
||||
results.sort((a, b) => (b.date || '').localeCompare(a.date || ''));
|
||||
// Leere Ergebnisse nur kurz cachen (30 Min) damit xREL später nochmal gefragt wird
|
||||
if (results.length > 0) {
|
||||
dbCacheSet(cacheKey, results);
|
||||
} else {
|
||||
db.prepare('INSERT OR REPLACE INTO xrel_cache (cache_key, value, expires_at) VALUES (?,?,?)')
|
||||
.run(cacheKey, '[]', Date.now() + 30 * 60 * 1000);
|
||||
}
|
||||
return results;
|
||||
}
|
||||
|
||||
@@ -301,4 +323,10 @@ router.put('/settings', authenticate, requireAdmin, (req, res) => {
|
||||
res.json({ ok: true });
|
||||
});
|
||||
|
||||
// DELETE /api/tools/media/xrel-cache – Cache leeren (Admin)
|
||||
router.delete('/xrel-cache', authenticate, requireAdmin, (req, res) => {
|
||||
const info = db.prepare('DELETE FROM xrel_cache').run();
|
||||
res.json({ deleted: info.changes });
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
|
||||
Reference in New Issue
Block a user