Fix: Tote Mega-Debrid-Links (frz. "Fichier supprimé") vergiften nicht mehr die ganze Queue
Mega-Debrid liefert bei geloeschten Hoster-Dateien franzoesische Fehlertexte
("Fichier supprime chez l'hebergeur"). Diese wurden weder in classifyAccountFailure
(debrid.ts) noch in isPermanentLinkError (download-manager.ts) erkannt und landeten
im generischen "temporaer"-Zweig: 30s Account-Cooldown + (bei retryLimit 0) endlose
Wiederholung. Mit nur einem Account (als API UND Web) blockierte ein einziger toter
Link ueber den Cooldown auch alle gesunden Links (SKIP_COOLDOWN) -- die Queue stand.
Beleg aus dem Support-Bundle: 479 von 983 Zeilen im Rotations-Log waren dieser Fehler.
- shared/dead-link.ts: zentrale Tot-Link-Erkennung (frz./dt./engl.), eine Quelle fuer
beide Schichten, damit die Muster nicht auseinanderdriften.
- classifyAccountFailure: toter Link -> fatal/skip, KEIN Account-Cooldown (Account ist
gesund, nur die Datei ist weg).
- isPermanentLinkError: toter Link -> Item sofort als gescheitert markiert, kein
Endlos-Retry. Greift auch im aggregierten Provider-Ketten-Fehlerstring.
- Provider-Kette + interner Web-Fallback: toter Link -> kein Fallback auf weitere
Provider/Modi (spart den 60s-Web-Timeout; saubere Meldung erreicht isPermanentLinkError
unveraendert).
- Anzeige: deutsche Klartext-Meldung "Link tot - Datei beim Hoster geloescht" statt frz.
- Account-Liste: Hinweis, dass Mega-Debrid API + Web derselbe Account in zwei Modi sind.
Tests: tests/dead-link.test.ts (inkl. aggregierter Provider-Ketten-String + akzentfreie
Variante). Volle Suite 823/823 gruen.
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
export function isDeadLinkErrorText(errorText: string): boolean {
|
||||
const text = String(errorText || "").toLowerCase();
|
||||
return /supprim/.test(text)
|
||||
|| text.includes("introuvable")
|
||||
|| text.includes("n'existe plus")
|
||||
|| text.includes("n existe plus")
|
||||
|| text.includes("fichier inexistant")
|
||||
|| /file.?not.?found/.test(text)
|
||||
|| /file.?unavailable/.test(text)
|
||||
|| /link.?is.?dead/.test(text)
|
||||
|| text.includes("file has been removed")
|
||||
|| text.includes("file has been deleted")
|
||||
|| text.includes("file is no longer available")
|
||||
|| text.includes("file was removed")
|
||||
|| text.includes("file was deleted")
|
||||
|| text.includes("datei wurde gelöscht")
|
||||
|| text.includes("datei geloescht")
|
||||
|| text.includes("datei gelöscht");
|
||||
}
|
||||
|
||||
export function germanDeadLinkReason(errorText: string): string {
|
||||
const text = String(errorText || "").toLowerCase();
|
||||
if (/supprim/.test(text) && /h[eé]bergeur/.test(text)) {
|
||||
return "Datei beim Hoster gelöscht";
|
||||
}
|
||||
if (/supprim/.test(text)) {
|
||||
return "Datei gelöscht";
|
||||
}
|
||||
if (text.includes("introuvable") || text.includes("fichier inexistant")) {
|
||||
return "Datei beim Hoster nicht gefunden";
|
||||
}
|
||||
if (text.includes("n'existe plus") || text.includes("n existe plus")) {
|
||||
return "Datei existiert nicht mehr";
|
||||
}
|
||||
return "Datei nicht mehr verfügbar";
|
||||
}
|
||||
Reference in New Issue
Block a user