Commit Graph

53264 Commits

Author SHA1 Message Date
Kovid Goyal 1d02709af2 pep8 2026-03-29 21:58:43 +05:30
Kovid Goyal 65cc790bf7 Content server: Implement full offline mode
Needs HTTPS to work because browsers are gods own pieces off ass.
Fixes #3065 (E-book viewer: Service Worker offline caching)
2026-03-29 21:33:19 +05:30
Kovid Goyal 7ecc18e7eb ... 2026-03-29 21:22:04 +05:30
Kovid Goyal 8a7d833704 Merge branch 'master' of https://github.com/unkn0w7n/calibre 2026-03-29 20:26:44 +05:30
unkn0w7n e977d5860b update FT & Mint 2026-03-29 20:24:41 +05:30
Kovid Goyal 72f13096ac Update macOS minver requirement in bundle to 14.0, which is the actual minver needed for calibre 9. Fixes #2146691 [application bundle for v9.6.0 has wrong macOS requirement](https://bugs.launchpad.net/calibre/+bug/2146691) 2026-03-29 15:28:55 +05:30
Kovid Goyal 564d83535c ... 2026-03-29 13:34:25 +05:30
Kovid Goyal ca6fa6bccf Make building index-generated.html deterministic 2026-03-29 10:56:59 +05:30
Kovid Goyal 94d93c2165 Conversion: Ignore page break CSS properties using the value "never"
This is invalid, but there apparently exist some books in the wild that
use it. Sigh. See #2146609 (*LOTS* of undesired splits on EPUB to AZW3 conversion)
2026-03-29 07:46:19 +05:30
Kovid Goyal a078326413 Bump dependency for CVE 2026-03-28 14:10:39 +05:30
Kovid Goyal af489dc784 Fix #2146596 [Bug in FTS mark_books: AttributeError: 'ResultsPanel' object has no attribute 'results_view' (v9.6)](https://bugs.launchpad.net/calibre/+bug/2146596) 2026-03-28 06:14:09 +05:30
Kovid Goyal 4906fbe3fb ... 2026-03-27 14:44:36 +05:30
Kovid Goyal d022762b46 Turn off POT upload as Transifex is currently down and I need to make a release v9.6.0 2026-03-27 09:24:12 +05:30
Kovid Goyal 2c81c5d437 Cleanup previous PR 2026-03-27 08:45:37 +05:30
Kovid Goyal ea4ba2e86c Merge branch 'master' of https://github.com/fabsch225/calibre 2026-03-27 08:42:47 +05:30
Kovid Goyal f8cf906be4 version 9.6.0 2026-03-27 08:38:17 +05:30
Fabian Schuller d072d16819 Cleanup 2026-03-26 22:23:12 +01:00
Fabian Schuller efb764110f Cleanup 2026-03-26 22:19:12 +01:00
Fabian Schuller 7b4840f54e Update recipe for My Zeit EPUB subscription 2026-03-26 22:18:38 +01:00
Kovid Goyal bf047369aa string changes 2026-03-26 19:23:20 +05:30
Kovid Goyal 2694316480 ... 2026-03-26 19:22:54 +05:30
Kovid Goyal a0b8337305 Cleanup previous PR 2026-03-26 16:42:01 +05:30
Kovid Goyal a282b84522 Merge branch 'completion-extra_word_break_chars' of https://github.com/un-pogaz/calibre 2026-03-26 16:39:28 +05:30
un-pogaz 56544fd826 add tweak extra_word_break_chars to completion mode 2026-03-26 09:58:51 +01:00
Kovid Goyal ce7a4bb490 Cleanup previous PR
Fixes #2146404 [Changing lookup name clears all custom notes](https://bugs.launchpad.net/calibre/+bug/2146404)
2026-03-26 08:30:26 +05:30
Kovid Goyal b5f6a9ae7e Merge branch 'copilot/fix-column-lookup-name-bug' of https://github.com/kovidgoyal/calibre 2026-03-26 08:28:43 +05:30
copilot-swe-agent[bot] fcd1a00660 Handle column deletion notes cleanup and add rename/delete tests
Co-authored-by: kovidgoyal <1308621+kovidgoyal@users.noreply.github.com>
Agent-Logs-Url: https://github.com/kovidgoyal/calibre/sessions/5be45f66-584e-4aa4-9598-3ef2020d7fef
2026-03-26 02:50:43 +00:00
copilot-swe-agent[bot] 58275cb151 Fix notes loss when changing custom column lookup name
Co-authored-by: kovidgoyal <1308621+kovidgoyal@users.noreply.github.com>
Agent-Logs-Url: https://github.com/kovidgoyal/calibre/sessions/9a307edd-abb8-421b-a419-6d8f435a0148
2026-03-26 02:28:16 +00:00
Kovid Goyal ff1d6ba2cd When completing in word-prefix mode treat hierarchy separators as word delimiters 2026-03-26 06:14:19 +05:30
Kovid Goyal 026906075c Added another test 2026-03-26 05:58:02 +05:30
copilot-swe-agent[bot] 0695b719fa Disable hyphen-joining when hyphen is an extra break char
- Add hyphen_is_extra_break flag to icu_BreakIterator struct
- Set flag at creation time by checking if any extra break char is
  a hyphen (0x2d or 0x2010) via IS_HYPHEN_CHAR
- Move IS_HYPHEN_CHAR macro before struct definition so it's usable
  in the constructor
- Guard all hyphen-joining logic (leading_hyphen, trailing_hyphen,
  is_hyphen_sep) and sub-segment trailing-hyphen detection behind
  !bi->hyphen_is_extra_break check
- Add test: BreakIterator with '-' extra break splits 'out-of-the-box'
  into ['out', 'of', 'the', 'box']

Co-authored-by: kovidgoyal <1308621+kovidgoyal@users.noreply.github.com>
Agent-Logs-Url: https://github.com/kovidgoyal/calibre/sessions/b439270b-8a40-4b51-96f2-8f869de7983d
2026-03-26 05:56:33 +05:30
copilot-swe-agent[bot] 95fa8f2ada Modify ICU break iterator API to support extra word-break characters
- Add optional extra_word_break_chars field (sorted UChar32[]) to
  icu_BreakIterator struct, stored as a sorted array for efficient lookup
- icu_BreakIterator_new accepts optional 3rd argument (Python str) that is
  parsed into a sorted UChar32[] via insertion sort; only applies to UBRK_WORD
- icu_BreakIterator_dealloc frees the extra chars array
- New find_extra_word_break() inline helper scans a UTF-16 segment for the
  first matching extra-break codepoint using U16_NEXT + linear search
- BreakIterState gains extra_break_active/seg_start/seg_end sub-segmentation
  state fields (zero-initialized by memset in break_iter_state_init)
- break_iter_state_next refactored from while loop to for(;;) to drain
  sub-segments before fetching more ICU data; extra break within an ICU word
  segment causes the piece before it to flow through normal hyphen-joining
  logic while the tail is deferred; trailing-hyphen detection on sub-segments
  enables hyphen-joining with subsequent ICU segments
- Fast path: num_extra_word_break_chars == 0 → single comparison, zero overhead
- Tests added covering: letter extra break char, count_words/split2, adjacent
  breaks, multiple chars, None arg, surrogate-pair extra break char

Co-authored-by: kovidgoyal <1308621+kovidgoyal@users.noreply.github.com>
Agent-Logs-Url: https://github.com/kovidgoyal/calibre/sessions/c003ae42-1e56-4dbb-9ef2-9f1645b76c70
2026-03-26 05:56:33 +05:30
Kovid Goyal 9fc0ea9121 Initial definition automate browser class 2026-03-26 05:29:04 +05:30
Kovid Goyal 2070699dfb Ignore inapplicable CVE in python 2026-03-25 20:21:50 +05:30
Kovid Goyal bc6c818a18 Update bundled rapydscript 2026-03-24 21:30:17 +05:30
Kovid Goyal c97e98e60b Move some function definitions out of branches 2026-03-24 21:26:02 +05:30
Kovid Goyal 404ee855f1 Cleanup previous PR 2026-03-24 21:22:30 +05:30
Kovid Goyal 1424c17944 Merge branch 'businessline-recipe-update' of https://github.com/typhoons01/calibre 2026-03-24 21:20:14 +05:30
typhoons01 61c7aff889 cover image addition 2026-03-24 21:00:41 +05:30
typhoons01 aa564ddce8 Updated recipe for BusinessLine 2026-03-24 20:54:53 +05:30
Kovid Goyal bf70e6fc34 String changes
Fixes #2145828 [Calibre Manual Typo](https://bugs.launchpad.net/calibre/+bug/2145828)
2026-03-24 18:58:35 +05:30
Kovid Goyal bb286f660f Tweak book: File list: Allow using ctrl+Left/Right to move an item to top/bottom of the list 2026-03-24 08:42:32 +05:30
Kovid Goyal a1bba6a788 Merge branch 'feat/app-kill-state-management' of https://github.com/Victor239/calibre 2026-03-23 08:35:29 +05:30
Victor239 ba5555303e E-book viewer: track pending annotation uploads per-book in IDB
Previously a single 'pending-annot-upload' IDB key was used, so only
the last-annotated book's pending upload survived an app kill. With
multiple books annotated offline (or across multiple tabs), earlier
books' uploads were silently dropped from the queue. A related bug
caused stale in-memory state from a previous book to be used on Sync
after navigating between books in the same tab, potentially sending the
wrong annotations to the wrong book endpoint.

Changes:
- IDB key is now 'pending-annot-upload:{library_id}/{book_id}/{fmt}',
  one entry per book, so all books' pending uploads survive independently
- New get_all_pending_annot_uploads() uses an IDB cursor range query to
  retrieve every pending entry
- clear_pending_annot_upload() now takes book identity params and a
  completion callback so the next upload starts only after the IDB
  delete has committed
- _make_annot_upload_done() returns a per-book closure used as the ajax
  callback, replacing the single _annot_upload_done method
- After each successful upload, _upload_next_from_idb() fetches and
  uploads the next pending entry, draining the queue sequentially
- _on_network_restored() no longer requires a book to be open, so
  pending uploads from other books are flushed even from the homepage
- load_book() clears unsynced_amap and the indicator timer/state so
  stale in-memory state from the previous book is never used
2026-03-22 14:15:42 +00:00
Victor239 215caf3525 E-book viewer: use Web Locks to prevent duplicate storage.persist() prompts
When multiple tabs open simultaneously, coordinate with navigator.locks
using ifAvailable so only the first tab calls persist(). Tabs that lose
the lock skip the call entirely, preventing the browser from showing
redundant permission prompts. Falls back to the persisted() check for
browsers without Web Locks support.
2026-03-22 12:24:43 +00:00
Victor239 466e357975 E-book viewer: skip storage.persist() if persistence already granted
Check navigator.storage.persisted() before calling persist(), so tabs
opened after permission was already granted do not trigger a redundant
browser prompt.
2026-03-22 12:13:37 +00:00
Victor239 9826040725 E-book viewer: use builtin highlight yellow for unsynced sync button tint
Replace hardcoded #d4a017 with builtin_color('yellow', is_dark_theme()),
which resolves to #ffeb6b (light theme) or #906e00 (dark theme) — the
same values used for yellow text highlights. Single source of truth in
calibre/constants.py.
2026-03-22 11:24:12 +00:00
Victor239 f5197fc6c0 Revert: remove resend on auth failure 2026-03-22 11:12:38 +00:00
Kovid Goyal 16edb6a5d2 Cleanup previous PR 2026-03-22 08:20:51 +05:30
copilot-swe-agent[bot] 246933bd6a Bookshelves: Add option to have the height of books be constant per group
Fixes #3059
2026-03-22 08:02:37 +05:30