Minor release adding dual-format support — a single book entry can now track an ebook and an audiobook independently.
Added
- Dual-format books (closes #23) — each book can now hold an ebook and an audiobook simultaneously. The book detail page shows two collapsible format panels (Ebook / Audiobook), each with its own status badge, file path, and grab button. Grabbing one format does not affect the other. The Wanted page lists each missing format as a separate row so you can grab them individually. The WantedAll action queues both formats for books that are missing both.
- Per-format file paths —
ebook_file_pathandaudiobook_file_pathare stored separately in the database, so a file imported as an epub is never accidentally associated with the audiobook slot and vice versa. - Format-aware scanner — the library scanner now detects the format of each file (by extension:
.epub/.mobi/.azw3→ ebook;.m4b/.mp3→ audiobook) and writes it into the correct slot rather than the legacyfile_pathcolumn. - Format-aware scheduler — the 12 h background grab sweep and per-book auto-grab both handle formats independently. A book with an existing ebook will not re-queue the ebook but will still search for a missing audiobook, and vice versa.
Upgrade notes
- Schema: migration
012_dual_format.sqladdsebook_file_path,audiobook_file_path, andmedia_typecolumns to thebookstable and copies existingfile_pathdata intoebook_file_path. The migration is non-destructive;file_pathis left in place for one release as a fallback. - Existing single-format downloads are automatically visible in the correct format slot after the migration runs on startup — no manual action needed.