Tags: crosspoint-reader/calibre-plugins
Tags
Mark on-device books by local library name match instead of downloading The previous approach read each unknown book's metadata by downloading it over HTTP. The device's web server streams whole files synchronously and can't serve a partial/early-aborted read, so streaming just the OPF stalled the single-threaded server and a connect with side-loaded books took minutes. Since a book can only be marked on-device if it exists in the library, match locally instead: index the current library by normalized title and resolve each device file by its file name, attaching the library book's uuid so Calibre marks it. Same-title collisions are disambiguated by an author appearing in the device path (order-independent, so author-sort folders match); ambiguous files are left unmarked rather than mismatched. No network transfer is involved. The download path is kept only as an opt-in last resort (Fetch metadata, off by default) for library books whose on-device name doesn't resemble the title. Also adds per-book progress during books() and removes the unused streaming reader.
Mark library books as on-device via a persistent metadata cache Calibre marks a library book on-device by matching the device book list, primarily by uuid. Until now books() returned only a filename-derived title (no uuid/authors) unless the slow Fetch-metadata option was on, so the on-device indicator only appeared right after sending. Add a small persistent per-device cache (lpath -> uuid/title/authors) populated when books are sent and read back on connect, so a book sent from this machine is recognized instantly — and marked on-device — without re-downloading the EPUB. Entries are pruned on delete and when files vanish from the device. Cache keys are normalized to the device's forward-slash path form for cross-platform consistency. Fetch-metadata still covers files never sent from this machine.
Fix deep-nested template upload by creating dirs level-by-level Templates that nest more than one folder deep (e.g. Fanfiction/Fandom/Series/title.epub) failed with 'ERROR:Failed to create file'. _ensure_dir sent the full nested path in a single /mkdir call and relied on the device building the whole tree recursively; for multi-level paths the directory tree was not reliably present, so the subsequent file open failed. Create each level with its own single-level mkdir instead (already-exists 400s are ignored), which is the reliable primitive. One-level templates are unaffected. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Fix device delete on Windows by normalizing path separators Calibre stores a just-sent book's device path using the local os.sep, so on Windows delete_books received backslash paths (e.g. /\Author\Title.epub) and sent them verbatim to the device, which only knows forward-slash paths -> 500 "not found". Add a shared _normalize_device_path helper (backslash -> '/', collapse '//', ensure leading '/') used by delete_books and remove_books_from_metadata. Bump to 0.2.2. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Fix optimizer docs and bump to 0.2.1 The optimizer dialog is live during transfer (streaming each step), not a post-transfer summary; update the README wording to match and clarify the multi-book behavior. Bump driver version to 0.2.1. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add EPUB optimizer for CrossPoint Reader devices Port the client-side EPUB optimizer from CrossPoint web server to Python. Implements device-specific image optimization (auto-crop, scaling, grayscale conversion, JPEG re-encoding) and EPUB container rewriting (SVG unwrapping, metadata fixes, proper ZIP structure). Supports X3 and X4 device profiles with configurable JPEG quality. Uses Qt's QImage and numpy for image processing with graceful degradation when numpy is unavailable.
PreviousNext