Skip to content

Tags: crosspoint-reader/calibre-plugins

Tags

v0.2.5

Toggle v0.2.5's commit message
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.

v0.2.4

Toggle v0.2.4's commit message
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.

v0.2.3

Toggle v0.2.3's commit message
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>

v0.2.2

Toggle v0.2.2's commit message
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>

v0.2.1

Toggle v0.2.1's commit message
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>

v0.2.0

Toggle v0.2.0's commit message
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.

v0.1.4

Toggle v0.1.4's commit message
Bump driver version to 0.1.4

v0.1.3

Toggle v0.1.3's commit message
Bump driver version to 0.1.3

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

v0.1.2

Toggle v0.1.2's commit message
Bump driver version to 0.1.2

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

v0.1.1

Toggle v0.1.1's commit message
fix bump script