Mark recovery-exhausted rows unavailable

This commit is contained in:
Fisto
2026-09-18 12:54:11 +02:00
parent faacedd8f5
commit 46e4fc23c0
2 changed files with 22 additions and 5 deletions
+14 -2
View File
@@ -582,7 +582,8 @@ export class ScrapeStore {
`SELECT * FROM media
WHERE preview_hash IS NULL
AND lower(COALESCE(url, '') || ' ' || COALESCE(play_url, '')) LIKE '%discordapp%'
AND (preview_error IS NOT NULL
AND ((preview_error IS NOT NULL
AND preview_error NOT LIKE 'unavailable after recovery%')
OR (preview_suspect IS NOT NULL
AND (preview_retry_at IS NULL OR preview_retry_at <= ?)))
ORDER BY id LIMIT ?`
@@ -594,13 +595,24 @@ export class ScrapeStore {
this.db.prepare("UPDATE media SET preview_error = NULL WHERE id = ?").run(id);
}
/** The recovery task refreshed and retried this row; it is genuinely unavailable now. */
markUnavailableAfterRecovery(id: number): void {
this.db
.prepare(
"UPDATE media SET preview_error = 'unavailable after recovery', preview_suspect = NULL, preview_retry_at = NULL WHERE id = ?"
)
.run(id);
}
discordPreviewFailureCount(): number {
const row = this.db
.prepare(
`SELECT COUNT(*) AS count FROM media
WHERE preview_hash IS NULL
AND lower(COALESCE(url, '') || ' ' || COALESCE(play_url, '')) LIKE '%discordapp%'
AND (preview_error IS NOT NULL OR preview_suspect IS NOT NULL)`
AND ((preview_error IS NOT NULL
AND preview_error NOT LIKE 'unavailable after recovery%')
OR preview_suspect IS NOT NULL)`
)
.get() as { count: number | null } | undefined;
return row?.count ?? 0;