From 12befdd48ba64046947fbb741e43be29502d3ccd Mon Sep 17 00:00:00 2001 From: Antoine Date: Tue, 24 Feb 2026 18:01:36 -0800 Subject: [PATCH] Add "Send to root" option to bypass folder template When enabled, books are uploaded directly to the configured upload path instead of being placed in subdirectories based on Calibre's send template (e.g., /Author Name/Book Title.epub). This is useful for devices or workflows that prefer a flat file structure. Co-Authored-By: Claude Opus 4.5 --- crosspoint_reader/config.py | 5 +++++ crosspoint_reader/driver.py | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/crosspoint_reader/config.py b/crosspoint_reader/config.py index 6e3e241..e23a15a 100644 --- a/crosspoint_reader/config.py +++ b/crosspoint_reader/config.py @@ -23,6 +23,7 @@ PREFS.defaults['chunk_size'] = 2048 PREFS.defaults['debug'] = False PREFS.defaults['fetch_metadata'] = False +PREFS.defaults['send_to_root'] = False class CrossPointConfigWidget(QWidget): @@ -37,6 +38,7 @@ def __init__(self): self.chunk_size.setRange(512, 65536) self.debug = QCheckBox('Enable debug logging', self) self.fetch_metadata = QCheckBox('Fetch metadata (slower device list)', self) + self.send_to_root = QCheckBox('Send to root (ignore folder template)', self) self.host.setText(PREFS['host']) self.port.setValue(PREFS['port']) @@ -44,6 +46,7 @@ def __init__(self): self.chunk_size.setValue(PREFS['chunk_size']) self.debug.setChecked(PREFS['debug']) self.fetch_metadata.setChecked(PREFS['fetch_metadata']) + self.send_to_root.setChecked(PREFS['send_to_root']) layout.addRow('Host', self.host) layout.addRow('Port', self.port) @@ -51,6 +54,7 @@ def __init__(self): layout.addRow('Chunk size', self.chunk_size) layout.addRow('', self.debug) layout.addRow('', self.fetch_metadata) + layout.addRow('', self.send_to_root) self.log_view = QPlainTextEdit(self) self.log_view.setReadOnly(True) @@ -72,6 +76,7 @@ def save(self): PREFS['chunk_size'] = int(self.chunk_size.value()) PREFS['debug'] = bool(self.debug.isChecked()) PREFS['fetch_metadata'] = bool(self.fetch_metadata.isChecked()) + PREFS['send_to_root'] = bool(self.send_to_root.isChecked()) def _refresh_logs(self): self.log_view.setPlainText(get_log_text()) diff --git a/crosspoint_reader/driver.py b/crosspoint_reader/driver.py index 053a391..22b08d1 100644 --- a/crosspoint_reader/driver.py +++ b/crosspoint_reader/driver.py @@ -21,7 +21,7 @@ class CrossPointDevice(DeviceConfig, DevicePlugin): description = 'CrossPoint Reader wireless device' supported_platforms = ['windows', 'osx', 'linux'] author = 'CrossPoint Reader' - version = (0, 1, 1) + version = (0, 2, 0) # Invalid USB vendor info to avoid USB scans matching. VENDOR_ID = [0xFFFF] @@ -302,7 +302,7 @@ def upload_books(self, files, names, on_card=None, end_session=True, metadata=No filepath = infile filename = os.path.basename(name) subdirs = [] - if metadata and i < len(metadata): + if metadata and i < len(metadata) and not PREFS['send_to_root']: subdirs, filename = self._format_upload_path(metadata[i], filename) if subdirs: