worldhopper/lib/database/tables/downloaded_chapters_table.dart
Felipe M. d2497f8aed
All checks were successful
ci/woodpecker/tag/release Pipeline was successful
feat: add background download service with error handling improvements
Add Android foreground service support for downloads to prevent OS
process killing during long operations. Fix multiple error handling
issues: foreground service leak on exceptions, polling stuck forever
on failure, double-counting chapters on retry, silent retry failures
without user feedback, and app crash if background service init fails.
Replace inaccurate failed chapter count heuristic with actual data.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-21 11:44:37 +01:00

53 lines
1.7 KiB
Dart

/// SQL schema for the downloaded_chapters table
class DownloadedChaptersTable {
DownloadedChaptersTable._();
static const String tableName = 'downloaded_chapters';
/// SQL statement to create the downloaded_chapters table
static const String createTable = '''
CREATE TABLE $tableName (
id TEXT PRIMARY KEY,
series_id TEXT NOT NULL,
server_id TEXT NOT NULL,
entry_id TEXT NOT NULL,
title TEXT NOT NULL,
content_type TEXT NOT NULL,
status TEXT NOT NULL DEFAULT 'pending',
file_path TEXT,
total_pages INTEGER NOT NULL DEFAULT 0,
downloaded_pages INTEGER NOT NULL DEFAULT 0,
entry_json TEXT NOT NULL,
cover_url TEXT,
cover_path TEXT,
sort_order INTEGER NOT NULL DEFAULT 0,
error_message TEXT,
downloaded_at INTEGER,
updated_at INTEGER NOT NULL,
FOREIGN KEY (series_id) REFERENCES downloaded_series(id) ON DELETE CASCADE,
FOREIGN KEY (server_id) REFERENCES servers(id) ON DELETE CASCADE,
UNIQUE(series_id, entry_id)
)
''';
/// SQL statement to drop the downloaded_chapters table
static const String dropTable = 'DROP TABLE IF EXISTS $tableName';
/// Create index on series_id for faster lookups
static const String createSeriesIndex = '''
CREATE INDEX idx_downloaded_chapters_series_id
ON $tableName(series_id)
''';
/// Create index on server_id for cascade cleanup
static const String createServerIndex = '''
CREATE INDEX idx_downloaded_chapters_server_id
ON $tableName(server_id)
''';
/// Create index on status for filtering
static const String createStatusIndex = '''
CREATE INDEX idx_downloaded_chapters_status
ON $tableName(status)
''';
}