Add daemon restart, preview diagnostics, browse caching, and rate-limit pauses
This commit is contained in:
@@ -135,6 +135,7 @@ export interface MediaRow {
|
||||
file_hash: string | null;
|
||||
preview_hash: string | null;
|
||||
preview_ext: string | null;
|
||||
anim_hash: string | null;
|
||||
file_bytes: number | null;
|
||||
preview_bytes: number | null;
|
||||
file_path: string | null;
|
||||
@@ -173,6 +174,7 @@ CREATE TABLE IF NOT EXISTS media (
|
||||
file_hash TEXT,
|
||||
preview_hash TEXT,
|
||||
preview_ext TEXT,
|
||||
anim_hash TEXT,
|
||||
file_bytes INTEGER,
|
||||
preview_bytes INTEGER,
|
||||
file_path TEXT,
|
||||
@@ -217,6 +219,7 @@ export class ScrapeStore {
|
||||
if (!names.has("download_error")) this.db.exec("ALTER TABLE media ADD COLUMN download_error TEXT");
|
||||
if (!names.has("preview_error")) this.db.exec("ALTER TABLE media ADD COLUMN preview_error TEXT");
|
||||
if (!names.has("preview_ext")) this.db.exec("ALTER TABLE media ADD COLUMN preview_ext TEXT");
|
||||
if (!names.has("anim_hash")) this.db.exec("ALTER TABLE media ADD COLUMN anim_hash TEXT");
|
||||
if (!names.has("play_url")) this.db.exec("ALTER TABLE media ADD COLUMN play_url TEXT");
|
||||
if (!names.has("aspect_ratio")) this.db.exec("ALTER TABLE media ADD COLUMN aspect_ratio REAL");
|
||||
}
|
||||
@@ -355,7 +358,16 @@ export class ScrapeStore {
|
||||
.all(limit) as unknown as MediaRow[];
|
||||
}
|
||||
|
||||
markPreview(id: number, preview: { hash: string; bytes: number; ext?: string }): void {
|
||||
markPreview(id: number, preview: { hash: string; bytes: number; ext?: string; animHash?: string }): void {
|
||||
if (preview.animHash) {
|
||||
this.db
|
||||
.prepare(
|
||||
"UPDATE media SET preview_hash = ?, preview_bytes = ?, preview_ext = ?, anim_hash = ?, preview_error = NULL WHERE id = ?"
|
||||
)
|
||||
.run(preview.hash, preview.bytes, preview.ext ?? "webp", preview.animHash, id);
|
||||
return;
|
||||
}
|
||||
|
||||
this.db
|
||||
.prepare(
|
||||
"UPDATE media SET preview_hash = ?, preview_bytes = ?, preview_ext = ?, preview_error = NULL WHERE id = ?"
|
||||
@@ -385,6 +397,31 @@ export class ScrapeStore {
|
||||
this.db.prepare(`UPDATE media SET ${sets.join(", ")} WHERE id = ?`).run(...values, id);
|
||||
}
|
||||
|
||||
/** Rows whose preview failed, with the reason, newest first. */
|
||||
previewFailures(
|
||||
limit = 50
|
||||
): Array<{ id: number; kind: MediaKind; provider: string | null; url: string; error: string }> {
|
||||
const rows = this.db
|
||||
.prepare(
|
||||
"SELECT id, kind, provider, url, preview_error FROM media WHERE preview_error IS NOT NULL ORDER BY id DESC LIMIT ?"
|
||||
)
|
||||
.all(limit) as unknown as Array<{
|
||||
id: number;
|
||||
kind: MediaKind;
|
||||
provider: string | null;
|
||||
url: string;
|
||||
preview_error: string;
|
||||
}>;
|
||||
|
||||
return rows.map(row => ({
|
||||
id: row.id,
|
||||
kind: row.kind,
|
||||
provider: row.provider,
|
||||
url: row.url,
|
||||
error: row.preview_error
|
||||
}));
|
||||
}
|
||||
|
||||
/** The message a media row came from, for URL refreshes. */
|
||||
sourceMessageId(mediaId: number): string | null {
|
||||
const row = this.db
|
||||
|
||||
Reference in New Issue
Block a user