mirror of https://github.com/koreader/koreader
master
v2024.04
v2024.03.1
v2024.03
v2024.01
v2023.10
v2023.08
v2023.06.1
v2023.06
v2023.05.1
v2023.05
v2023.04
v2023.03
v2023.01
v2022.11
v2022.10
v2022.08
v2022.07
v2022.06
v2022.05.1
v2022.05
v2022.03.1
v2022.03
v2022.02
v2022.01
v2021.12.1
v2021.12
v2021.11
v2021.10.1
v2021.10
v2021.09
v2021.08
v2021.07
v2021.06
v2021.05
v2021.04
v2021.03
v2021.02
v2021.01
v2021.01.1
v2020.12
v2020.11
v2020.10.1
v2020.10
v2020.09
v2020.08.1
v2020.08
v2020.07.1
v2020.07
v2020.06
v2020.05
v2020.04.1
v2020.04
v2020.03.2
v2020.03.1
v2020.03
v2020.02
v2020.01
v2019.12
v2019.11
v2019.10
v2019.09.3
v2019.09.2
v2019.09.1
v2019.09
v2019.08
v2019.07
v2019.06
v2019.05
v2019.04
v2019.03.1
v2019.03
v2019.02
v2019.01.1
v2019.01
v2018.12
v2018.11.1
v2018.11
v2015.11
v2015.11-stable
v2014.11
v2014.04
v2013.03
v2013.1
v2012.11
v2012.10
v2012.09
v2012.04.2
v2012.04.1
v2012.04
v2012.03
koreader-nightly-20150516
v2012.05
v2014.03.11-nightly
v2014.03.13-nightly
v2014.03.18-nightly
v2014.03.24-nightly
v2014.03.27-nightly
v2014.03.31-nightly
v2014.04-stable
v2014.04.03-nightly
v2014.04.05-nightly
v2014.04.08-nightly
v2014.04.10-nightly
v2014.04.18-nightly
v2014.04.24-nightly
v2014.04.25-nightly
v2014.05.02-nightly
v2014.05.06-nightly
v2014.05.09-nightly
v2014.05.16-nightly
v2014.05.17-nightly
v2014.05.18-nightly
v2014.05.19-nightly
v2014.05.20-nightly
v2014.05.24-nightly
v2014.06.01-nightly
v2014.06.02-nightly
v2014.06.03-nightly
v2014.06.04-nightly
v2014.06.05-nightly
v2014.06.06-nightly
v2014.06.08-nightly
v2014.06.09-nightly
v2014.06.11-nightly
v2014.06.12-nightly
v2014.06.18-nightly
v2014.06.23-nightly
v2014.06.27-nightly
v2014.06.29-nightly
v2014.07.02-nightly
v2014.07.03-nightly
v2014.07.04-nightly
v2014.07.14-nightly
v2014.07.15-nightly
v2014.07.16-nightly
v2014.07.17-nightly
v2014.07.19-nightly
v2014.07.20-nightly
v2014.07.24-nightly
v2014.07.27-nightly
v2014.07.28-nightly
v2014.08.02-nightly
v2014.08.04-nightly
v2014.08.06-nightly
v2014.08.07-nightly
v2014.08.11-nightly
v2014.08.12-nightly
v2014.08.13-nightly
v2014.08.20-nightly
v2014.08.21-nightly
v2014.08.23-nightly
v2014.08.24-nightly
v2014.08.27-nightly
v2014.08.28-nightly
v2014.08.29-nightly
v2014.09.11-nightly
v2014.09.14-nightly
v2014.09.29-nightly
v2014.10.03-nightly
v2014.10.05-nightly
v2014.10.08-nightly
v2014.10.14-nightly
v2014.10.15-nightly
v2014.10.20-nightly
v2014.10.22-nightly
v2014.10.24-nightly
v2014.10.28-nightly
v2014.10.29-nightly
v2014.10.30-nightly
v2014.10.31-nightly
v2014.11-stable
v2014.11.07-nightly
v2014.11.10-nightly
v2014.11.11-nightly
v2014.11.12-nightly
v2014.11.13-nightly
v2014.11.14-nightly
v2014.11.17-nightly
v2014.11.18-nightly
v2014.11.21-nightly
v2014.11.24-nightly
v2014.11.25-nightly
v2014.11.26-nightly
v2014.11.27-nightly
v2014.11.28-nightly
v2014.11.29-nightly
v2014.12.01-nightly
v2014.12.03-nightly
v2014.12.06-nightly
v2014.12.07-nightly
v2014.12.22-nightly
v2014.12.29-nightly
v2015.01.15-preview
v2015.01.19-nightly
v2015.01.28-pb-test
v2015.01.31-nightly
v2015.02.02-nightly
v2015.02.07-nightly
v2015.02.09-nightly
v2015.02.12-nightly
v2015.03.06-nightly
v2015.03.16-nightly
v2015.03.17-nightly
v2015.03.18-nightly
v2015.03.20-nightly
v2015.03.22-nightly
v2015.03.24-nightly
v2015.04.01-nightly
v2015.04.07-nightly
v2015.04.14-nightly
v2015.04.15-nightly
v2015.04.16-nightly
v2015.04.24-nightly
v2015.04.27-nightly
v2015.04.30-nightly
v2015.05.17-nightly
v2015.06.04-nightly
v2015.06.08-nightly
v2015.06.16-nightly
v2015.06.25-nightly
v2015.07.17-nightly
v2015.08.08-nightly
v2015.09.11-nightly
v2015.09.17-nightly
v2015.10.06-nightly
v2015.10.08-nightly
v2015.10.24-nightly
v2015.10.27-nightly
v2015.12.13-nightly
v2016.02.14-nightly
v2016.02.16-nightly
v2016.02.27-nightly
v2016.03.15-nightly
v2016.03.23-nightly
v2016.04.13-nightly
v2016.04.27-nightly
v2016.05.13-nightly
v2016.05.29-nightly
v2016.06.02-nightly
v2016.06.20-nightly
v2016.06.24-nightly
v2016.07.02-nightly
v2016.07.14-nightly
v2016.08.14-nightly
v2016.08.23-nightly
v2016.11.20-nightly
v2017-10-23-nightly
v2017.02.09-nightly
v2017.03.08-nightly
v2017.04.30-nightly
v2017.06.12-nightly
v2017.08.21-nightly
v2017.10.04-nightly
v2018.01.10-nightly
v2018.02.12-nightly
v2018.03.14-beta
v2018.04.10-beta
v2018.04.12-beta
v2018.06.02-beta
v2018.07.29-beta
v2018.10.07-beta
${ noResults }
13 Commits (e7acec15261927eb5380813d85786b7b3108fc12)
Author | SHA1 | Message | Date |
---|---|---|---|
NiLuJe | e7acec1526 |
ReaderUI: Saner FM/RD lifecycle
* Ensure that going from one to the other tears down the former and its plugins before instantiating the latter and its plugins. UIManager: Unify Event sending & broadcasting * Make the two behave the same way (walk the widget stack from top to bottom), and properly handle the window stack shrinking shrinking *and* growing. Previously, broadcasting happened bottom-to-top and didn't really handle the list shrinking/growing, while sending only handled the list shrinking by a single element, and hopefully that element being the one the event was just sent to. These two items combined allowed us to optimize suboptimal refresh behavior with Menu and other Menu classes when opening/closing a document. e.g., the "opening document" Notification is now properly regional, and the "open last doc" option no longer flashes like a crazy person anymore. Plugins: Allow optimizing Menu refresh with custom menus, too. Requires moving Menu's close_callback *after* onMenuSelect, which, eh, probably makes sense, and is probably harmless in the grand scheme of things. |
3 years ago |
NiLuJe | 97b81a7eb6 |
Menu: Don't share the `dimen` object across Menu instances (!)
The object was never re-assigned, so closing a smaller menu (e.g., Calibre metadata search) made the underlying one (e.g., CoverBrowser's ListMenu) inherit the smaller dimensions... Instead of creating the object in the Class constructor, create it in the instance constructor (i.e., :init). Similar cleanups in other Menu* related classes. |
3 years ago |
NiLuJe |
ea3fa5c2c7
|
Calibre: More QoL tweaks (#7545)
* Wireless: Optimize memory usage in StreamMessageQueue (use an array of string ropes, that we only concatenate once). Allowed to relax the throttling, making transfers that much faster. * Persist: Add a "zstd" codec, that uses the "luajit" codec, but compressed via zstd. Since both of those are very fast, it pretty much trounces everything in terms of speed and size ;). * Persist: Implemented a "writes_to_file" framework, much like the existing "reads_from_file" one. And use it in the zstd codec to avoid useless temporary string interning. * Metadata: Switch to the zstd codec. |
3 years ago |
NiLuJe |
47c59e0e5a
|
Persist: Add the new native LuaJIT serializer to the list of supported codecs (#7543)
And swap the Calibre metadata cache to it. |
3 years ago |
NiLuJe |
b8d0cc4c35
|
Calibre: Minor QoL fixes (#7528)
* CalibreMetadata: Get rid of the now useless NULL-hunt: here, this was basically looking for `rapidjson.null` to replace them with... `rapidjson.null` :?. IIRC, that's a remnant of a quirk of the previous JSON parser (possibly even the previous, *previous* JSON parser ^^). * CalibreSearch: Update the actually relevant NULL-hunt to make it explicit: replace JSON NULLs with Lua nils, instead of relying on an implementation detail of Lua-RapidJSON, because that detail just changed data type ;). * UIManager: Make sure tasks scheduled during the final ZMQ callback are honored. e.g., the Calibre "Disconnect" handler. This happened to mostly work purely by chance before the event loop rework. * Calibre: Restore a proper receiveCallback handler after receiving a book, in order not to break the "Disconnect" handler's state (and, well, get a working Disconnect handler, period ^^). * Calibre: Unbreak metadata cache when it's initialized by a search (regression since #7159). * Calibre: Handle UTC <-> local time conversions when checking the cache's timestamp against the Calibre metadata timestamp. * Bump base (Unbreak CRe on Android, update RapidJSON) |
3 years ago |
hius07 |
052e19ead5
|
Standardize search/find to search (#7398)
* Change 'Find a file' to 'File search' for consistency There is 'File search' in the Gesture manager already. There is 'Fulltext search' in the readermenu. Some help text added. |
3 years ago |
NiLuJe |
6d53f83286
|
The great Input/GestureDetector/TimeVal spring cleanup (a.k.a., a saner main loop) (#7415)
* ReaderDictionary: Port delay computations to TimeVal * ReaderHighlight: Port delay computations to TimeVal * ReaderView: Port delay computations to TimeVal * Android: Reset gesture detection state on APP_CMD_TERM_WINDOW. This prevents potentially being stuck in bogus gesture states when switching apps. * GestureDetector: * Port delay computations to TimeVal * Fixed delay computations to handle time warps (large and negative deltas). * Simplified timed callback handling to invalidate timers much earlier, preventing accumulating useless timers that no longer have any chance of ever detecting a gesture. * Fixed state clearing to handle the actual effective slots, instead of hard-coding slot 0 & slot 1. * Simplified timed callback handling in general, and added support for a timerfd backend for better performance and accuracy. * The improved timed callback handling allows us to detect and honor (as much as possible) the three possible clock sources usable by Linux evdev events. The only case where synthetic timestamps are used (and that only to handle timed callbacks) is limited to non-timerfd platforms where input events use a clock source that is *NOT* MONOTONIC. AFAICT, that's pretty much... PocketBook, and that's it? * Input: * Use the <linux/input.h> FFI module instead of re-declaring every constant * Fixed (verbose) debug logging of input events to actually translate said constants properly. * Completely reset gesture detection state on suspend. This should prevent bogus gesture detection on resume. * Refactored the waitEvent loop to make it easier to comprehend (hopefully) and much more efficient. Of specific note, it no longer does a crazy select spam every 100µs, instead computing and relying on sane timeouts, as afforded by switching the UI event/input loop to the MONOTONIC time base, and the refactored timed callbacks in GestureDetector. * reMarkable: Stopped enforcing synthetic timestamps on input events, as it should no longer be necessary. * TimeVal: * Refactored and simplified, especially as far as metamethods are concerned (based on <bsd/sys/time.h>). * Added a host of new methods to query the various POSIX clock sources, and made :now default to MONOTONIC. * Removed the debug guard in __sub, as time going backwards can be a perfectly normal occurrence. * New methods: * Clock sources: :realtime, :monotonic, :monotonic_coarse, :realtime_coarse, :boottime * Utility: :tonumber, :tousecs, :tomsecs, :fromnumber, :isPositive, :isZero * UIManager: * Ported event loop & scheduling to TimeVal, and switched to the MONOTONIC time base. This ensures reliable and consistent scheduling, as time is ensured never to go backwards. * Added a :getTime() method, that returns a cached TimeVal:now(), updated at the top of every UI frame. It's used throughout the codebase to cadge a syscall in circumstances where we are guaranteed that a syscall would return a mostly identical value, because very few time has passed. The only code left that does live syscalls does it because it's actually necessary for accuracy, and the only code left that does that in a REALTIME time base is code that *actually* deals with calendar time (e.g., Statistics). * DictQuickLookup: Port delay computations to TimeVal * FootNoteWidget: Port delay computations to TimeVal * HTMLBoxWidget: Port delay computations to TimeVal * Notification: Port delay computations to TimeVal * TextBoxWidget: Port delay computations to TimeVal * AutoSuspend: Port to TimeVal * AutoTurn: * Fix it so that settings are actually honored. * Port to TimeVal * BackgroundRunner: Port to TimeVal * Calibre: Port benchmarking code to TimeVal * BookInfoManager: Removed unnecessary yield in the metadata extraction subprocess now that subprocesses get scheduled properly. * All in all, these changes reduced the CPU cost of a single tap by a factor of ten (!), and got rid of an insane amount of weird poll/wakeup cycles that must have been hell on CPU schedulers and batteries.. |
3 years ago |
NiLuJe |
bf6c0cdd6c
|
LuaSettings: Add a method to initialize a setting properly (#7371)
* LuaSettings/DocSettings: Updated readSetting API to allow proper initialization to default. Use it to initialize tables, e.g., fixing corner-cases in readerFooter that could prevent settings from being saved. (Fixes an issue reported on Gitter). * LuaSettings/DocSettings: Add simpler API than the the flip* ones to toggle boolean settings. * Update LuaSettings/DocSettigns usage throughout the codebase to use the dedicated boolean methods wher appropriate, and clean up some of the more mind-bending uses. * FileChooser: Implement an extended default exclusion list (fix #2360) * ScreenSaver: Refactor to avoid the pile of kludges this was threatening to become. Code should be easier to follow and use, and fallbacks now behave as expected (fix #4418). |
3 years ago |
NiLuJe |
525b1957b9
|
[RFC] Pagination UI shenanigans (#7335)
* Menu/KeyValuePage/ReaderGoTo: Unify the dialogs. (Generally, "Enter page number" as title, and "Go to page" as OK button). * Allow *tapping* on pagination buttons, too. Added spacers around the text to accommodate for that. * Disable input handlers when <= 1 pages, while still printing the label in black. * Always display both the label and the chevrons, even on single page content. (Menu being an exception, because it can handle showing no content at all, in which case we hide the chevrons). * KVP: Tweak the pagination buttons layout in order to have consistent centering, regardless of whether the return arrow is enabled or not. (Also, match Menu's layout, more or less). * Menu: Minor layout tweaks to follow the KVP tweaks above. Fixes, among possibly other things, buttons in (non-FM) "List" menus overlapping the final entry (e.g., OPDS), and popout menus with a border being misaligned (e.g., Calibre, Find a file). * CalendarView: Minor layout tweaks to follow the KVP tweaks. Ensures the pagination buttons are laid out in the same way as everywhere else (they used to be a wee bit higher). |
3 years ago |
Martín Fernández |
a5768c7411
|
calibre plugin: handle huge metadata files (#7159)
metadata files > 30MB will be parsed manually to prevent OOM |
3 years ago |
Martín Fdez | b27cf0d168 | migrate calibre plugin to persist | 3 years ago |
Martín Fernández |
a90038e4eb
|
Calibre plugin fixes for android (#6996)
* calibre plugin: scan on sdcard too * calibre plugin: force inbox chooser in android's primary partition * downloadMgr: override dir |
3 years ago |
Martín Fernández |
83cde64bcc
|
unified calibre plugin (#6177)
joins calibre metadata search and calibre wireless connections into a single plugin search metadata changes: - search directly into calibre metadata files. - search can be performed on more than one library (configurable from a menu) - device scans now find all calibre libraries under a given root - search options can be configured from a menu. (case sensitive, find by title, author and path) - removed legacy global variables. - *option* to search from the reader - *option* to generate a cache of books for faster searches. calibre wireless connection changes: - keep track of books in a library (includes prunning books from calibre metadata if the file was deleted locally) - remove files on device from calibre - support password protected connections - FM integration: if we're in the inbox dir it will be updated each time a book is added or deleted. - disconnect when requested by calibre, available on newer calibre versions (+4.17) - remove unused opcodes. - better report of client name, version and device id - free disk space checks for all calibre versions - bump supported extensions to match what KOReader can handle. Users can override this with their own list of extensions (or from calibre, by configuring the wireless device). |
4 years ago |