Added booklist_caching, caching size limit in config dialog. Added code in Marvin_verlays:_snapshot_booklist() to consult limits before writing cache to device. Added informative to _log_metrics() explaining that no identifying information is captured, as the device_udid is encrypted before logging.
Tweaks to config dialog, fixed problems with booklist.db after adding or deleting books.
Move existence test for remote booklist.db cache to optimize load time.
Only show caching controls in config dialog when preferred reader app supports caching.
Added some VACUUM commands, diagnostics.
Added VACUUM statements to Kindle, GoodReader in books(), delete_books()
Changed allocated device cache size from 1-20% of available space, refactored caching logic, added load_time to metrics, general polishing.
Added user-installed plugins to diagnostics. Added live display of device booklist cache allocation in config dialog. Refactored Marvin upload_books() to process in batches (default: 100), also influencing wait_for_command_complete() progress reporting. Updated README with JSON switches.
Added GoodReader4 initial support, with icon. Updated Config dialog, adding Help section with buttons to access MR forum and create Diagnostics dump.
Improved Config diagnostics (added all prefs). Fixed GoodReader and Kindle eject/reconnect logic
Properly handle diagnostics for no user-installed plugins
Fixed multiple authors handling for GoodReader. Note that Kindle uses semi-colon to demark multiple authors, Marvin uses commas, GoodReader uses ampersand.
Added Delete caches button to Marvin options, removed from MXD. Moved content_hashes.db to be part of MXD caches in diagnostics.
Added timestamp to Diagnostic report. Updated Marvin options help to mention Reset caches function. Added confirmation dialog before resetting caches.
Diagnostic report tweaks.
Changed to 'GoodReader 4', tweaks to diagnostics to match MXD.
Added test to disable device diagnostics if preferred reader app is Marvin but calibre connector not running
Diagnostic message tweaks.
Change to cur.fetchone() when loading from Books, should be more efficient.
Update version to 1.4.0. Require calibre 1.37.