Add Discord-hosted preview caching (C11)
This commit is contained in:
@@ -114,6 +114,7 @@ export interface MediaRow {
|
||||
preview_bytes: number | null;
|
||||
file_path: string | null;
|
||||
download_error: string | null;
|
||||
preview_error: string | null;
|
||||
created_at: string;
|
||||
}
|
||||
|
||||
@@ -145,6 +146,7 @@ CREATE TABLE IF NOT EXISTS media (
|
||||
preview_bytes INTEGER,
|
||||
file_path TEXT,
|
||||
download_error TEXT,
|
||||
preview_error TEXT,
|
||||
created_at TEXT NOT NULL
|
||||
);
|
||||
|
||||
@@ -178,6 +180,7 @@ export class ScrapeStore {
|
||||
if (!names.has("source")) this.db.exec("ALTER TABLE media ADD COLUMN source TEXT");
|
||||
if (!names.has("file_path")) this.db.exec("ALTER TABLE media ADD COLUMN file_path TEXT");
|
||||
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");
|
||||
}
|
||||
|
||||
close(): void {
|
||||
@@ -291,6 +294,25 @@ export class ScrapeStore {
|
||||
this.db.prepare("UPDATE media SET download_error = ? WHERE id = ?").run(error.slice(0, 200), id);
|
||||
}
|
||||
|
||||
/** Image and GIF rows that still need a cached preview. */
|
||||
pendingPreviews(limit = 5000): MediaRow[] {
|
||||
return this.db
|
||||
.prepare(
|
||||
"SELECT * FROM media WHERE (kind = 'image' OR kind = 'gif') AND preview_hash IS NULL AND preview_error IS NULL ORDER BY id LIMIT ?"
|
||||
)
|
||||
.all(limit) as unknown as MediaRow[];
|
||||
}
|
||||
|
||||
markPreview(id: number, preview: { hash: string; bytes: number }): void {
|
||||
this.db
|
||||
.prepare("UPDATE media SET preview_hash = ?, preview_bytes = ?, preview_error = NULL WHERE id = ?")
|
||||
.run(preview.hash, preview.bytes, id);
|
||||
}
|
||||
|
||||
markPreviewError(id: number, error: string): void {
|
||||
this.db.prepare("UPDATE media SET preview_error = ? WHERE id = ?").run(error.slice(0, 200), id);
|
||||
}
|
||||
|
||||
getMedia(id: number): MediaRow | null {
|
||||
const row = this.db.prepare("SELECT * FROM media WHERE id = ?").get(id) as unknown as
|
||||
| MediaRow
|
||||
|
||||
Reference in New Issue
Block a user