feat: implement RSS subscriptions, downloader routing and local media checks

This commit is contained in:
junior
2026-10-17 22:49:11 +08:00
parent 645ea6fe2d
commit 68c972dadd
28 changed files with 9226 additions and 43 deletions
+37
View File
@@ -0,0 +1,37 @@
CREATE TABLE media_destinations (
id TEXT PRIMARY KEY,
name TEXT NOT NULL,
kind TEXT NOT NULL CHECK (kind = 'local'),
root_path TEXT NOT NULL
);
CREATE TABLE destination_selection (
singleton INTEGER PRIMARY KEY CHECK (singleton = 1),
destination_id TEXT REFERENCES media_destinations(id)
);
INSERT INTO destination_selection(singleton) VALUES (1);
CREATE TABLE destination_mappings (
id TEXT PRIMARY KEY,
destination_id TEXT NOT NULL REFERENCES media_destinations(id),
downloader_id TEXT NOT NULL REFERENCES downloader_instances(id),
version INTEGER NOT NULL,
download_root TEXT NOT NULL,
UNIQUE(destination_id, downloader_id, version)
);
ALTER TABLE download_jobs ADD COLUMN destination_id TEXT REFERENCES media_destinations(id);
ALTER TABLE download_jobs ADD COLUMN mapping_id TEXT REFERENCES destination_mappings(id);
ALTER TABLE download_jobs ADD COLUMN download_save_path TEXT;
ALTER TABLE download_jobs ADD COLUMN file_status TEXT NOT NULL DEFAULT 'unchecked'
CHECK (file_status IN ('unchecked', 'present', 'absent', 'unavailable'));
ALTER TABLE download_jobs ADD COLUMN file_checked_at INTEGER;
ALTER TABLE download_jobs ADD COLUMN file_last_success_at INTEGER;
ALTER TABLE download_jobs ADD COLUMN file_error TEXT;
CREATE TABLE media_files (
job_id TEXT NOT NULL REFERENCES download_jobs(id),
relative_path TEXT NOT NULL,
expected_size INTEGER NOT NULL,
observed_size INTEGER,
status TEXT NOT NULL DEFAULT 'unchecked'
CHECK (status IN ('unchecked', 'present', 'absent', 'unavailable')),
error TEXT,
PRIMARY KEY(job_id, relative_path)
);