From 39f29c19aa3b6d5a5e118ccfe9a808f2b7406795 Mon Sep 17 00:00:00 2001 From: Joe Date: Wed, 27 May 2026 21:58:35 +0900 Subject: [PATCH] Adds XTC support --- README.md | 2 +- crosspoint_reader-v0.1.1.zip | Bin 9409 -> 0 bytes crosspoint_reader-v0.1.5.zip | Bin 0 -> 10209 bytes crosspoint_reader/README.md | 2 +- crosspoint_reader/driver.py | 10 +++++----- 5 files changed, 7 insertions(+), 7 deletions(-) delete mode 100644 crosspoint_reader-v0.1.1.zip create mode 100644 crosspoint_reader-v0.1.5.zip diff --git a/README.md b/README.md index 30dd68d..8df0a21 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ Calibre plugins for [CrossPoint Reader](https://github.com/crosspoint-reader). ### CrossPoint Reader -A wireless device plugin that uploads EPUB files to CrossPoint Reader over WebSocket. The plugin auto-discovers devices on the local network via UDP broadcast. +A wireless device plugin that uploads EPUB and XTC files to CrossPoint Reader over WebSocket. The plugin auto-discovers devices on the local network via UDP broadcast. See [crosspoint_reader/README.md](crosspoint_reader/README.md) for protocol details and configuration. diff --git a/crosspoint_reader-v0.1.1.zip b/crosspoint_reader-v0.1.1.zip deleted file mode 100644 index eafef8ef19c71353301e2ce180733ec9785a2938..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9409 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 diff --git a/crosspoint_reader-v0.1.5.zip b/crosspoint_reader-v0.1.5.zip new file mode 100644 index 0000000000000000000000000000000000000000..f864f358df63b5cd75bd9395bf59892a9ac62161 GIT binary patch literal 10209 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 literal 0 HcmV?d00001 diff --git a/crosspoint_reader/README.md b/crosspoint_reader/README.md index fa0b7dd..0653173 100644 --- a/crosspoint_reader/README.md +++ b/crosspoint_reader/README.md @@ -1,7 +1,7 @@ # CrossPoint Reader Calibre Plugin This plugin adds CrossPoint Reader as a wireless device in Calibre. It uploads -EPUB files over WebSocket to the CrossPoint web server. +EPUB and XTC files over WebSocket to the CrossPoint web server. Protocol: - Connect to ws://:/ diff --git a/crosspoint_reader/driver.py b/crosspoint_reader/driver.py index 8dc9f7e..557b5f3 100644 --- a/crosspoint_reader/driver.py +++ b/crosspoint_reader/driver.py @@ -21,15 +21,15 @@ class CrossPointDevice(DeviceConfig, DevicePlugin): description = 'CrossPoint Reader wireless device' supported_platforms = ['windows', 'osx', 'linux'] author = 'CrossPoint Reader' - version = (0, 1, 4) + version = (0, 1, 5) # Invalid USB vendor info to avoid USB scans matching. VENDOR_ID = [0xFFFF] PRODUCT_ID = [0xFFFF] BCD = [0xFFFF] - FORMATS = ['epub'] - ALL_FORMATS = ['epub'] + FORMATS = ['epub', 'xtc'] + ALL_FORMATS = ['epub', 'xtc'] SUPPORTS_SUB_DIRS = True MUST_READ_METADATA = False MANAGES_DEVICE_PRESENCE = True @@ -151,7 +151,7 @@ def save_settings(self, config_widget): config_widget.save() def _list_files_recursive(self, path='/'): - """Return a flat list of (lpath, size) for all EPUB files on device.""" + """Return a flat list of (lpath, size) for all EPUB and XTC files on device.""" results = [] try: entries = self._http_get_json('/api/files', params={'path': path}) @@ -168,7 +168,7 @@ def _list_files_recursive(self, path='/'): entry_path = path + '/' + name if entry.get('isDirectory'): results.extend(self._list_files_recursive(entry_path)) - elif entry.get('isEpub'): + elif entry.get('isEpub') or entry.get('isXTC'): results.append((entry_path, entry.get('size', 0))) return results