Skip to content

feat(hardcover): Improve Hardcover metadata accuracy and rate limiting#2303

Merged
acx10 merged 4 commits intobooklore-app:developfrom
balazs-szucs:hardcover-api-improvements
Jan 19, 2026
Merged

feat(hardcover): Improve Hardcover metadata accuracy and rate limiting#2303
acx10 merged 4 commits intobooklore-app:developfrom
balazs-szucs:hardcover-api-improvements

Conversation

@balazs-szucs
Copy link
Collaborator

@balazs-szucs balazs-szucs commented Jan 17, 2026

🚀 Pull Request

📝 Description

Closes: #2244

This update improves how the application fetches book data from the Hardcover API. It focuses on better search results, accurate mood tags, and stable API usage.

🛠️ Changes Implemented

Search Improvements

  • Added combined title+author search for better match accuracy
  • Implemented automatic fallback to title-only search when combined search fails
  • Improved author name matching using fuzzy string comparison

Mood and Tag Filtering

  • Added vote-based filtering to remove low-quality mood tags
  • Implemented HardcoverMoodFilter with configurable thresholds (minimum 3 votes, 15% of max)
  • Fetch detailed book metadata for top result to get accurate mood counts
  • Fall back to basic filtering when detailed fetch fails

API Rate Limiting

  • Added adaptive rate limiting with exponential backoff
  • Initial delay of 1200ms between requests, doubles on throttle errors
  • Automatically reduces delay after successful requests
  • Handles HTTP 429 throttle responses properly

Code Quality

  • Split large method into smaller focused methods
  • Added unit tests
  • Better error handling for invalid dates and book IDs
  • Improved null safety throughout

🧪 Testing Strategy

📸 Visual Changes (if applicable)


⚠️ Required Pre-Submission Checklist

Please Read - This Checklist is Mandatory

Important Notice: We've experienced several production bugs recently due to incomplete pre-submission checks. To maintain code quality and prevent issues from reaching production, we're enforcing stricter adherence to this checklist.

All checkboxes below must be completed before requesting review. PRs that haven't completed these requirements will be sent back for completion.

Mandatory Requirements (please check ALL boxes):

  • Code adheres to project style guidelines and conventions
  • Branch synchronized with latest develop branch (please resolve any merge conflicts)
  • 🚨 CRITICAL: Automated unit tests added/updated to cover changes (MANDATORY for ALL Spring Boot backend and Angular frontend changes - this is non-negotiable)
  • 🚨 CRITICAL: All tests pass locally (run ./gradlew test for Spring Boot backend, and ng test for Angular frontend - NO EXCEPTIONS)
  • 🚨 CRITICAL: Manual testing completed in local development environment (verify your changes work AND no existing functionality is broken - test related features thoroughly)
  • Flyway migration versioning follows correct sequence (if database schema was modified)
  • Documentation PR submitted to booklore-docs (required for features or enhancements that introduce user-facing or visual changes)

Why This Matters:

Recent production incidents have been traced back to:

  • Incomplete testing coverage (especially backend)
  • Merge conflicts not resolved before merge
  • Missing documentation for new features

Backend changes without tests will not be accepted. By completing this checklist thoroughly, you're helping maintain the quality and stability of Booklore for all users.

Note to Reviewers: Please verify the checklist is complete before beginning your review. If items are unchecked, kindly ask the contributor to complete them first.


💬 Additional Context (optional)

@acx10 acx10 added the enhancement Improvement to an existing feature label Jan 19, 2026
@acx10 acx10 merged commit a0f4c8e into booklore-app:develop Jan 19, 2026
5 checks passed
@acx10 acx10 mentioned this pull request Jan 22, 2026
alexlebens pushed a commit to alexlebens/infrastructure that referenced this pull request Jan 22, 2026
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [ghcr.io/booklore-app/booklore](https://github.com/booklore-app/booklore) | minor | `v1.17.0` → `v1.18.2` |

---

> ⚠️ **Warning**
>
> Some dependencies could not be looked up. Check the Dependency Dashboard for more information.

---

### Release Notes

<details>
<summary>booklore-app/booklore (ghcr.io/booklore-app/booklore)</summary>

### [`v1.18.2`](https://github.com/booklore-app/booklore/releases/tag/v1.18.2)

[Compare Source](booklore-app/booklore@v1.18.0...v1.18.2)

#### 🌟 What's New in v1.18.2

This release introduces some of the largest and most impactful features Booklore has seen so far:

- **New Ebook Reader**: Introducing a responsive, clean, and intuitive reader based on Foliate.js. Supports EPUB, AZW3, MOBI, and FB2 formats, with highlights, notes, and bookmarks for seamless reading.
- **Bi-Directional Reading Progress Sync**: Reading progress now syncs automatically between Booklore and KoReader, with Kobo support coming in upcoming releases.
- **Streaming Ebook Reading (Beta)**: Large ebooks, such as multi-hundred-page cookbooks or textbooks, can now be read page by page, minimizing memory and storage usage.
- **Optimized PDF & CBZ Streaming**: PDF and CBX files no longer need to be fully extracted for reading; pages are streamed directly, improving performance for large files.
- **Enhanced Charts**: All charts have been redesigned for clarity and visual appeal. Three new chart types have been added: Taste Ratings, Reading Backlog, and Series Progress.
- **Komga-Compatible API**: Connect your Komga apps, such as Mihon or Komelia, directly to Booklore for unified library management.
- **Progressive Web App Support**: Booklore can now be installed as a PWA, allowing access without browser UI limitations for a cleaner reading experience.

#### 🐛 Bug Fixes (v1.18.2 + v1.18.1)

- fix(db): remove unused CBX/PDF cache cleanup cron entries ([#&#8203;2402](booklore-app/booklore#2402))
- Fix showstopper bugs in v1.18.0 ([#&#8203;2399](booklore-app/booklore#2399)) by [@&#8203;acx10](https://github.com/acx10)
- fix(reading sessions): Split sessions, re-calculate times in book overview ([#&#8203;2393](booklore-app/booklore#2393)) by [@&#8203;WorldTeacher](https://github.com/WorldTeacher)

#### 🚀 New Features (v1.18.0)

- Introduced additional library charts to surface meaningful insights ([#&#8203;2390](booklore-app/booklore#2390)) by [@&#8203;acx10](https://github.com/acx10)
- Introduce three new analytical charts: Taste Ratings, Reading Backlog, and Series Progress ([#&#8203;2383](booklore-app/booklore#2383)) by [@&#8203;acx10](https://github.com/acx10)
- Initialize progress web app ([#&#8203;2351](booklore-app/booklore#2351)) by [@&#8203;acx10](https://github.com/acx10)
- feat(custom-covers): add functionality to generate custom covers for selected books ([#&#8203;2355](booklore-app/booklore#2355)) by [@&#8203;balazs-szucs](https://github.com/balazs-szucs)
- Implement streaming EPUB reader with on-demand loading ([#&#8203;2350](booklore-app/booklore#2350)) by [@&#8203;acx10](https://github.com/acx10)
- Feat/komga api ([#&#8203;2071](booklore-app/booklore#2071)) by [@&#8203;farfromrefug](https://github.com/farfromrefug)
- Revamp streaming PDF reader to render pages on demand ([#&#8203;2332](booklore-app/booklore#2332)) by [@&#8203;acx10](https://github.com/acx10)
- Revamp the CBX reader layout for improved structure and usability ([#&#8203;2330](booklore-app/booklore#2330)) by [@&#8203;acx10](https://github.com/acx10)
- Add support for annotations and book notes in the new ebook reader ([#&#8203;2313](booklore-app/booklore#2313)) by [@&#8203;acx10](https://github.com/acx10)
- Bidirectional progress sync between koreader and booklore reader ([#&#8203;2312](booklore-app/booklore#2312)) by [@&#8203;acx10](https://github.com/acx10)
- feat(metadata): add configurable enabled fields for metadata editor a… ([#&#8203;2299](booklore-app/booklore#2299)) by [@&#8203;acx10](https://github.com/acx10)
- Implement Public Shelves ([#&#8203;1969](booklore-app/booklore#1969)) by [@&#8203;cjd](https://github.com/cjd)
- Introduce a new eBook reader with support for EPUB, MOBI, AZW3, and FB2 formats ([#&#8203;2258](booklore-app/booklore#2258)) by [@&#8203;acx10](https://github.com/acx10)
- feat(metadata): add auto-save metadata feature in editor settings ([#&#8203;2274](booklore-app/booklore#2274)) by [@&#8203;balazs-szucs](https://github.com/balazs-szucs)
- RanobeDB Light Novel metadata provider ([#&#8203;2221](booklore-app/booklore#2221)) by [@&#8203;Nedra1998](https://github.com/Nedra1998)

#### ✨ Enhancements (v1.18.0)

- feat(metadata): add 'Replace When Provided' option to metadata replacement modes ([#&#8203;2379](booklore-app/booklore#2379)) by [@&#8203;balazs-szucs](https://github.com/balazs-szucs)
- feat(google-parser): improve Google Books API integration with improved metadata handling and series extraction ([#&#8203;2375](booklore-app/booklore#2375)) by [@&#8203;balazs-szucs](https://github.com/balazs-szucs)
- feat(metadata): add replace mode option for metadata fetching ([#&#8203;2356](booklore-app/booklore#2356)) by [@&#8203;balazs-szucs](https://github.com/balazs-szucs)
- feat(comicVine): improve comic metadata structure with additional credits and fields ([#&#8203;2358](booklore-app/booklore#2358)) by [@&#8203;balazs-szucs](https://github.com/balazs-szucs)
- feat(library): add validation for library path accessibility during rescan ([#&#8203;2347](booklore-app/booklore#2347)) by [@&#8203;balazs-szucs](https://github.com/balazs-szucs)
- feat(ui): add password confirmations ([#&#8203;2291](booklore-app/booklore#2291)) by [@&#8203;arjunsrinivasan1997](https://github.com/arjunsrinivasan1997)
- feat(sort): Add sort by author surname and first name ([#&#8203;2292](booklore-app/booklore#2292)) by [@&#8203;balazs-szucs](https://github.com/balazs-szucs)
- feat(directory-picker): add selection actions for folders, add buttons for select all, deselect all, and select current folder ([#&#8203;2293](booklore-app/booklore#2293)) by [@&#8203;balazs-szucs](https://github.com/balazs-szucs)
- feat(hardcover): Improve Hardcover metadata accuracy and rate limiting ([#&#8203;2303](booklore-app/booklore#2303)) by [@&#8203;balazs-szucs](https://github.com/balazs-szucs)
- feat(shelf): add shelf filtering options and integrate into book processing ([#&#8203;2268](booklore-app/booklore#2268)) by [@&#8203;balazs-szucs](https://github.com/balazs-szucs)
- Stream CBX contents directly from the archive instead of unzipping and caching files ([#&#8203;2229](booklore-app/booklore#2229)) by [@&#8203;acx10](https://github.com/acx10)

#### 🎨 UI Tweaks (v1.18.0)

- Polish view and metadata settings page UI ([#&#8203;2362](booklore-app/booklore#2362)) by [@&#8203;acx10](https://github.com/acx10)
- Optimize metadata picker for mobile layout ([#&#8203;2361](booklore-app/booklore#2361)) by [@&#8203;acx10](https://github.com/acx10)

#### 🐛 Bug Fixes (v1.18.0)

- Fix touch issues with ebook reader ([#&#8203;2395](booklore-app/booklore#2395)) by [@&#8203;acx10](https://github.com/acx10)
- Fix failing book cover search due to HTTP 403 ([#&#8203;2392](booklore-app/booklore#2392)) by [@&#8203;acx10](https://github.com/acx10)
- fix: Refactor HardcoverSyncService to improve edition and page count ([#&#8203;2389](booklore-app/booklore#2389)) by [@&#8203;boludo00](https://github.com/boludo00)
- fix(kobo): Update KoboResources file to match Calibre web to fix issues with Overdrive ([#&#8203;2367](booklore-app/booklore#2367)) by [@&#8203;cra21k](https://github.com/cra21k)
- fix(comic-metadata):  fix series grouping bug with external ComicInfo.xml metadata ([#&#8203;2385](booklore-app/booklore#2385)) by [@&#8203;balazs-szucs](https://github.com/balazs-szucs)
- fix(PathPatternResolver): remove leading slash from resolved pattern if first component is empty ([#&#8203;2339](booklore-app/booklore#2339)) by [@&#8203;balazs-szucs](https://github.com/balazs-szucs)
- fix(ui): map comic book extensions to CBX filter in book details ([#&#8203;2338](booklore-app/booklore#2338)) by [@&#8203;balazs-szucs](https://github.com/balazs-szucs)
- fix: Reading stats UI ([#&#8203;2322](booklore-app/booklore#2322)) by [@&#8203;WorldTeacher](https://github.com/WorldTeacher)
- fix: split reading sessions based on the date ([#&#8203;2316](booklore-app/booklore#2316)) by [@&#8203;WorldTeacher](https://github.com/WorldTeacher)
- fix(chart-ui): resolve glitches in chart rendering ([#&#8203;2290](booklore-app/booklore#2290)) by [@&#8203;acx10](https://github.com/acx10)
- fix(comicvine): fix metadata search failing for titles containing '#<number>' ([#&#8203;2273](booklore-app/booklore#2273)) by [@&#8203;balazs-szucs](https://github.com/balazs-szucs)
- fix(reading statistics ui): small fixes ([#&#8203;2276](booklore-app/booklore#2276)) by [@&#8203;WorldTeacher](https://github.com/WorldTeacher)
- fix(metadata-picker): handle null and empty values in fetched metadata processing ([#&#8203;2269](booklore-app/booklore#2269)) by [@&#8203;balazs-szucs](https://github.com/balazs-szucs)
- fix(OpdsFeedService): detect ZIP mime type for FB2 files when zipped ([#&#8203;2242](booklore-app/booklore#2242)) by [@&#8203;balazs-szucs](https://github.com/balazs-szucs)
- fix(epub): strip formatting from ISBN values to ensure correct extraction ([#&#8203;2248](booklore-app/booklore#2248)) by [@&#8203;balazs-szucs](https://github.com/balazs-szucs)
- feat(deps): add JPEG2000 support in PDFBox with Jai ImageIO dependencies ([#&#8203;2250](booklore-app/booklore#2250)) by [@&#8203;balazs-szucs](https://github.com/balazs-szucs)
- fix(metadata): missing lubimyczytac fields and fetch retry ([#&#8203;2179](booklore-app/booklore#2179)) by [@&#8203;Spynacz](https://github.com/Spynacz)

#### 🛠️ Refactoring & Maintenance (v1.18.0)

- Refactor: Enhance healthcheck response with version info and DTO ([#&#8203;2378](booklore-app/booklore#2378)) by [@&#8203;hyun4965](https://github.com/hyun4965)
- perf(regex): introduce regex patterns for improved string handling invarious services ([#&#8203;2386](booklore-app/booklore#2386)) by [@&#8203;balazs-szucs](https://github.com/balazs-szucs)
- Fix: Yes/No buttons on bookdrop import have reversed colors/icons ([#&#8203;2363](booklore-app/booklore#2363)) by [@&#8203;acx10](https://github.com/acx10)
- Normalize book progress percentage rounding ([#&#8203;2359](booklore-app/booklore#2359)) by [@&#8203;acx10](https://github.com/acx10)
- chore(metadata-warning): add warnings about metadata quality for file naming and moving features ([#&#8203;2340](booklore-app/booklore#2340)) by [@&#8203;balazs-szucs](https://github.com/balazs-szucs)
- fix(api,epub): add cover extraction fallback using meta cover attribute for URL-encoded cover image hrefs ([#&#8203;2310](booklore-app/booklore#2310)) by [@&#8203;ajbanck](https://github.com/ajbanck)
- fix(amazon-parser): handle Amazon error responses and improve error logging ([#&#8203;2294](booklore-app/booklore#2294)) by [@&#8203;balazs-szucs](https://github.com/balazs-szucs)
- fix(metadata): ensure authors/genres are replaced, not merged, during metadata update by defaulting mergeCategories to false ([#&#8203;2304](booklore-app/booklore#2304)) by [@&#8203;balazs-szucs](https://github.com/balazs-szucs)
- chore(docs): update copyright year in README ([#&#8203;2323](booklore-app/booklore#2323)) by [@&#8203;balazs-szucs](https://github.com/balazs-szucs)
- Refactor metadata picker and parsers for Amazon, Goodreads, and Google ([#&#8203;2327](booklore-app/booklore#2327)) by [@&#8203;acx10](https://github.com/acx10)
- Refactor dialogs for a consistent look and feel ([#&#8203;2321](booklore-app/booklore#2321)) by [@&#8203;acx10](https://github.com/acx10)
- Refactor common dialog header and footer components ([#&#8203;2318](booklore-app/booklore#2318)) by [@&#8203;acx10](https://github.com/acx10)
- Refactor the Book Browser to simplify and streamline the implementation ([#&#8203;2317](booklore-app/booklore#2317)) by [@&#8203;acx10](https://github.com/acx10)
- Centralize book tag color definitions ([#&#8203;2314](booklore-app/booklore#2314)) by [@&#8203;acx10](https://github.com/acx10)
- Remove support for the legacy ePub reader ([#&#8203;2287](booklore-app/booklore#2287)) by [@&#8203;acx10](https://github.com/acx10)
- fix(parsers): increase request interval to prevent rate limiting issues ([#&#8203;2282](booklore-app/booklore#2282)) by [@&#8203;balazs-szucs](https://github.com/balazs-szucs)
- (Refactor) Extract file-specific information from book ([#&#8203;1734](booklore-app/booklore#1734)) by [@&#8203;piffio](https://github.com/piffio)
- Update query to use startTime instead of createdAt ([#&#8203;2272](booklore-app/booklore#2272)) by [@&#8203;WorldTeacher](https://github.com/WorldTeacher)
- feat(archive): add ArchiveType via Magic Numbers detection and integrate into book processing ([#&#8203;2220](booklore-app/booklore#2220)) by [@&#8203;balazs-szucs](https://github.com/balazs-szucs)
- fix(epub): normalize text nodes in EPUB metadata content.opf ([#&#8203;2222](booklore-app/booklore#2222)) by [@&#8203;balazs-szucs](https://github.com/balazs-szucs)

#### 📦 Dependencies (v1.18.0)

- chore(deps): bump tar from 7.5.2 to 7.5.6 in /booklore-ui ([#&#8203;2387](booklore-app/booklore#2387)) by @&#8203;[dependabot\[bot\]](https://github.com/apps/dependabot)
- chore(deps): bump lodash-es from 4.17.21 to 4.17.23 in /booklore-ui ([#&#8203;2388](booklore-app/booklore#2388)) by @&#8203;[dependabot\[bot\]](https://github.com/apps/dependabot)
- chore: update Angular dependencies to latest minor/patch versions ([#&#8203;2285](booklore-app/booklore#2285)) by [@&#8203;acx10](https://github.com/acx10)

#### 🐳 Docker Images

- **Docker Hub:** `booklore/booklore:v1.18.2`
- **GitHub Container Registry:** `ghcr.io/booklore-app/booklore:v1.18.2`

**Full Changelog**: <booklore-app/booklore@v1.17.0...v1.18.2>

#### 📸 Screenshots

<img width="750" height="471" alt="Screenshot 2026-01-22 at 12 10 47 PM" src="https://github.com/user-attachments/assets/d5118bbf-771c-495d-b2a3-a695027a6bcd" />
<img width="750" height="451" alt="Screenshot 2026-01-22 at 12 06 23 PM" src="https://github.com/user-attachments/assets/13456e8f-e3bb-4373-b6c8-b4871c5b5504" />
<img width="750" height="452" alt="Screenshot 2026-01-22 at 12 02 35 PM" src="https://github.com/user-attachments/assets/d2f8a2d6-6ea8-43d2-b990-7a058ca45e29" />
<img width="750" height="452" alt="Screenshot 2026-01-22 at 12 01 46 PM" src="https://github.com/user-attachments/assets/0aff60b3-238f-4f6e-a2b5-c962f844e7ba" />
<img width="632" height="710" alt="Screenshot 2026-01-22 at 12 04 22 PM" src="https://github.com/user-attachments/assets/fd4fcc98-3d95-4662-ac61-a93d534f3ed3" />
<img width="632" height="710" alt="Screenshot 2026-01-22 at 12 04 27 PM" src="https://github.com/user-attachments/assets/5464a3d4-a6f7-4e8d-acfc-1ca7fb14e9ec" />
<img width="632" height="710" alt="Screenshot 2026-01-22 at 12 04 33 PM" src="https://github.com/user-attachments/assets/c7722037-ba00-4bea-a166-150b6557caf3" />
<img width="632" height="710" alt="Screenshot 2026-01-22 at 12 05 47 PM" src="https://github.com/user-attachments/assets/6011c4ee-efa2-4471-a9b0-9fd2b2d09712" />
<img width="750" height="471" alt="Screenshot 2026-01-22 at 12 13 56 PM" src="https://github.com/user-attachments/assets/820465a6-59d7-44d7-9eef-56f69451ab85" />
<img width="750" height="402" alt="Screenshot 2026-01-22 at 1 17 59 AM" src="https://github.com/user-attachments/assets/08aa7a57-aa54-4672-ab1c-b35551e88b51" />
<img width="750" height="369" alt="Screenshot 2026-01-22 at 1 17 41 AM" src="https://github.com/user-attachments/assets/2f08f94f-59e4-40f1-932b-07b028620875" />
<img width="750" height="317" alt="Screenshot 2026-01-22 at 1 18 11 AM" src="https://github.com/user-attachments/assets/947c96cc-ab9a-481d-adb0-2a1472393ee8" />
<img width="750" height="471" alt="Screenshot 2026-01-22 at 12 09 34 PM" src="https://github.com/user-attachments/assets/3bfc4666-7aa5-45db-a2b5-f16f0a3a8b5c" />
<img width="750" height="471" alt="Screenshot 2026-01-22 at 12 09 28 PM" src="https://github.com/user-attachments/assets/1c3cc89f-1cd6-4dd3-b0f2-26b9ad56aa66" />
<img width="750" height="451" alt="Screenshot 2026-01-22 at 12 07 03 PM" src="https://github.com/user-attachments/assets/8b9577c0-db09-4bf1-8903-f9ceca7b9964" />

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0Mi42OS4yIiwidXBkYXRlZEluVmVyIjoiNDIuNjkuMiIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiaW1hZ2UiXX0=-->

Reviewed-on: https://gitea.alexlebens.dev/alexlebens/infrastructure/pulls/3369
Co-authored-by: Renovate Bot <renovate-bot@alexlebens.net>
Co-committed-by: Renovate Bot <renovate-bot@alexlebens.net>
WorldTeacher pushed a commit to WorldTeacher/booklore that referenced this pull request Feb 19, 2026
# [1.18.0](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/compare/v1.17.0...1.18.0) (2026-02-12)

### Bug Fixes

* **additional-file-uploader:** add file size validation with UI feedback ([booklore-app#2516](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2516)) ([74ac2d2](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/74ac2d25d19937274bb24a76a6bf68041b382b4a))
* **amazon-parser:** handle Amazon error responses and improve error logging ([booklore-app#2294](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2294)) ([f1f16a9](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/f1f16a98d872f6fd829c8e51c96b65301fedcc13))
* **api:** Select correct Hardcover.app ISBN from lookup results ([booklore-app#2530](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2530)) ([09d4a30](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/09d4a3025a6ce1829b5d996851b7a8e0574b86e1))
* **audiobook-reader:** use preload=none for immediate streaming playback ([booklore-app#2518](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2518)) ([872bf5a](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/872bf5a3f765fca67453d24791ed1d408afdf0b5))
* **audiobook-reader:** use preload=none with explicit load() for faster streaming ([booklore-app#2520](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2520)) ([67269ff](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/67269ffe4ced2eeb1b337f2be37704e335fa95de))
* **auth:** resolve DST-related login failure for refresh tokens ([booklore-app#2624](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2624)) ([555cd13](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/555cd13f8a0d9977f24597544ab4cd43f676f6a8))
* **book-browser:** correct mobile grid card size calculation and reduce gap ([596bfc5](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/596bfc5798d5af0c6d48738c9d8d75e5933e6fb5))
* **book-browser:** resolve footer menu not hiding after navigation back ([booklore-app#2626](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2626)) ([f34b18f](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/f34b18f2b87f7575c96b5e08d019b142774f6c32))
* **book-rule-evaluator:** fix file type handling and add mapping for specific formats to fix magic shelve based on filetype ([booklore-app#2480](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2480)) ([df52e99](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/df52e9924e5e8354a30efffb56dc69e218ade14d))
* **cbx-reader:** prevent touch drag on mobile and fix header title overflow ([booklore-app#2441](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2441)) ([308d5bf](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/308d5bf87d7d5f1a9efe6dbfd8d6fb9c9ef00bb6))
* **chart-ui:** resolve glitches in chart rendering ([booklore-app#2290](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2290)) ([3a41e25](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/3a41e25aeb55f54a0ad5f9dd6721e0ef7cbb4644))
* **comicvine:** add fallback to issue detail endpoint for missing creator credits ([booklore-app#2694](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2694)) ([e8530fa](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/e8530fa0b70ca23d03ad3448b0a59fcd20ac95f9))
* **comicvine:** fix metadata search failing for titles containing '#<number>' ([booklore-app#2273](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2273)) ([99c8c13](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/99c8c131f6c3a0c9039e6760363b7b415ab6a0ff))
* **db:** remove unused CBX/PDF cache cleanup cron entries ([booklore-app#2402](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2402)) ([2cd2e7b](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/2cd2e7bd16a8cbb14ae0531c0a08da10e94430d7))
* **docker:** add build and gradle directories to volumes in docker-compose ([booklore-app#2459](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2459)) ([d36ffaf](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/d36ffaf3e4706f76725022fb2cdcca140e23c9c7))
* **epub-cover-extract:** improve cover image extraction with fallback handling ([booklore-app#2585](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2585)) ([cb5f703](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/cb5f703c7ef76ddf487343bc218317a00aea3b75))
* **epub-metadata:** enhance cover extraction with heuristic fallbacks for manifest and ZIP entries ([booklore-app#2636](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2636)) ([45dba44](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/45dba44833882cdf4055f9fe999134a775e98853))
* **epub:** add cover extraction fallback using meta cover attribute ([booklore-app#2310](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2310)) ([c7fa64c](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/c7fa64c045a4b0142a69351cd41244f92cc7b551))
* **epub:** normalize text nodes in EPUB metadata content.opf ([booklore-app#2222](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2222)) ([24fabc9](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/24fabc97de24de9bba1f8547ffe00493f3c24649))
* **epub:** strip formatting from ISBN values to ensure correct extraction ([booklore-app#2248](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2248)) ([64f036f](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/64f036fb715338e24d212a67fcdc9b0f8ff14977))
* **file naming:** follow documentation... ([booklore-app#2642](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2642)) ([d93f1b8](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/d93f1b8dfb7279171fa5ca8016b0d579342a6789))
* **file-move:** implement transaction management for file moves and rollback on failure ([booklore-app#2588](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2588)) ([c7dd23e](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/c7dd23ed850eddbeb9d667af95cb3f669ed90507))
* **file-move:** implement transaction management for file moves and rollback on failure ([booklore-app#2592](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2592)) ([cd428c6](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/cd428c6fe3ef99fde515085c86d8de939b31b199))
* **file-move:** update empty directory cleanup to handle multiple library paths ([booklore-app#2634](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2634)) ([f5326ce](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/f5326ce4352cb8c2533ab2ed2bc4fa6aae87f490))
* **hardcover-sync:** Don't send repeated read status to Hardcover.app ([booklore-app#2609](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2609)) ([a941ef5](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/a941ef51b5fc18b5a12a744ea6d6e9a1d3c5d7bf))
* **i18n:** align translation keys in metadata viewer, searcher, sidecar, and tabs components (EN/ES) ([92a86bf](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/92a86bf23ac45e9b1399c78309527f785a3d5148))
* **i18n:** dynamic sidebar translations and UI font normalization ([booklore-app#2683](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2683)) ([53403c1](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/53403c168de991a5458f340cd4a943801741efda))
* **library-processing:** re-fetch library entity after clearing entity manager during rescan ([booklore-app#2507](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2507)) ([878bc44](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/878bc44138315a819b30a789ec8b76d439484558))
* **library-service:** prevent concurrent library scans with a tracking set ([booklore-app#2637](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2637)) ([37f6417](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/37f6417e3dfa4e576a51db19de66ab2baf8441aa))
* **metadata-match:** include cover image in match score calculation and correct weight aggregation ([booklore-app#2513](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2513)) ([6c4934b](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/6c4934b8bafe44372e5efc2b8bf6607817cce3b1))
* **metadata-parsers:** improve ISBN search logic and fallback strategies for metadata fetching ([booklore-app#2502](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2502)) ([257c016](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/257c016f3f1a9cb88ecb389b5b07e175530d9d05))
* **metadata-picker:** handle null and empty values in fetched metadata processing ([booklore-app#2269](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2269)) ([1f62e4c](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/1f62e4cd268cc8f2d877f6e280dfca165cda6bc2))
* **metadata-refresh:** correct provider priority order and enhance REPLACE_ALL handling ([booklore-app#2503](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2503)) ([58bfe22](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/58bfe2293a3f402a4cc0076591f0faeb28bbe676))
* **metadata-refresh:** filter book shelves by authenticated user ([booklore-app#2481](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2481)) ([bbea391](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/bbea391c9c7fae8a40ed8fdc334a0467d6099bf9))
* **metadata-update:** ensure per-book transaction isolation in bulk updates to prevent race conditions ([booklore-app#2536](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2536)) ([3a4de95](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/3a4de95c8c652df52522336da68c5fa271121896))
* **metadata-viewer:** update file type handling to filter comic book formats as CBX ([booklore-app#2338](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2338)) ([dfd757f](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/dfd757fe364c67a0dc82f3e8b85383683e672ec8))
* **metadata:** ensure authors/genres are replaced, not merged, during metadata update by defaulting mergeCategories to [secure] ([booklore-app#2304](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2304)) ([0a3c6d7](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/0a3c6d72fade3187d40a5d47bde2d93a2d7ef6a3))
* **metadata:** improve cover errors, reduce metadata fetch count, and hide attach option ([booklore-app#2690](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2690)) ([6da6e8e](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/6da6e8e373ca63f92f83207e928a8f573fd37dc9))
* **metadata:** missing lubimyczytac fields and fetch retry ([booklore-app#2179](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2179)) ([06a75c4](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/06a75c42c88f980206e302b3a1fe98c5d60f7c91))
* **migration:** add idempotent guards to V114-V117 migrations ([855b215](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/855b215ee5a02952e8459189665fd325d409ebb7))
* **migration:** move comic metadata triggers to separate migration ([7f3680d](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/7f3680dd21ca200c713f01ded104be09cec809a2))
* **opds:** fix regression with browsing shelves ([booklore-app#2423](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2423)) ([bb0ee83](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/bb0ee8373e2fae8c6e1684e6236d0352ba547c78)), closes [booklore-app#2147](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2147)
* **os_x-conversion:** ignore __MACOSX directory for conversions ([booklore-app#2479](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2479)) ([fab7c14](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/fab7c140309c5a3b318a2923daf1f5dfd5a1e474))
* **parsers:** increase request interval to prevent rate limiting issues ([booklore-app#2282](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2282)) ([709f90d](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/709f90dc6804c41913fbbda92cc0a70a71c06e7c))
* **PathPatternResolver:** remove leading slash from resolved pattern if first component is empty ([booklore-app#2339](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2339)) ([da83a70](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/da83a702816fde3dab8feb84a58c538774703e55))
* **reader:** add overflow menu to ebook reader mobile header ([a9faf7d](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/a9faf7d1eaa18f7052eea2e042bac2d7efa8b92d))
* **reader:** disable tap-to-turn-page on mobile devices ([574bfdb](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/574bfdbe7a4918dc54885058095425a6f9c8f2ea))
* **reader:** enable text copy in ebook reader ([booklore-app#2700](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2700)) ([booklore-app#2702](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2702)) ([c1e0c72](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/c1e0c721f77d9bfc3d508c7c383c6e4fb428059a))
* **reading sessions:** Split sessions, re-calculate times in book overview ([booklore-app#2393](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2393)) ([d137055](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/d137055b83d3f369910023794a26c2647472aeef))
* Reading stats UI ([booklore-app#2322](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2322)) ([6338ed1](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/6338ed13fc95fe45bb42f5abf42c91ed36e1ee7b))
* **reading-stats,ui:** update heatmap to use local time formatting, fix tooltip css in reading-stats page ([booklore-app#2587](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2587)) ([7124578](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/7124578831293ddd33847e5b230262c3f4b45084))
* Refactor HardcoverSyncService to improve edition and page count ([booklore-app#2389](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2389)) ([67c1222](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/67c12223ea5dab8ba0d72f32c93496e057bac2d4))
* **scan-library:** prevent NPE during rescan for books with missing file associations ([booklore-app#2429](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2429)) ([21076d4](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/21076d4f5d4898b7bfe4d896fef6d6a554dda6d7))
* **series-page:** add missing overlay preference service to book card component ([booklore-app#2466](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2466)) ([496a67a](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/496a67a784c061a1eed45c4b9088226d4a5bb2a3))
* **settings:** use boxed Integer for ScrollerConfig.maxItems to allow null ([booklore-app#2684](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2684)) ([78a8bb4](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/78a8bb4feab8e64d007f085d09f0d9be2363c3ee))
* split reading sessions based on the date ([booklore-app#2316](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2316)) ([acca38a](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/acca38a40487691bf26b3be6e534f45b4d9bcd08))
* **stats:** fix inconsistent stat card styling and add median/session stats to completion race ([120334e](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/120334eb28bb0b9961021f75ab2ea5f06f410dfb))
* **stats:** show tooltip for single bubble and allow overflow in author universe chart ([booklore-app#2443](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2443)) ([8278f47](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/8278f47c6afd2630059aaf47b67205948ae2f1e9))
* top bar layout issues ([b616ef8](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/b616ef872389f3f1444799450d6f36949ec28d2c))
* **ui:** clean cached properties ([booklore-app#2499](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2499)) ([be16c7e](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/be16c7ef3c284fec28a73eeb2feb8bf8f5c54d27)), closes [booklore-app#2472](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2472)
* **ui:** correctly format lubimyczytac external rating link ([booklore-app#2491](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2491)) ([0a7b67b](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/0a7b67b8294705164e25b2de95b36f6b3b592529))
* **ui:** rename bg.png to topbar.png and fix asset path ([d6fa1bd](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/d6fa1bd9b83983e5d09ed46bd585e0612c6571c6))
* **ui:** use local asset for page background ([booklore-app#2445](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2445)) ([ffae8df](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/ffae8dfce35dc4e75dd133d63c9c6202591dc0e1))

### Features

* **api, build:** Upgrade to Java 25, Gradle 9, and Spring Boot 4, Jackson 3 ([booklore-app#2597](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2597)) ([108d94c](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/108d94c0f710b0be860d3b819f8aa66b715d51ea))
* **archive:** add ArchiveType via Magic Numbers detection and integrate into book processing ([booklore-app#2220](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2220)) ([105f477](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/105f477c7935deb4208f18a55a522778e389c1a3))
* **book-browser:** add responsive grid columns for mobile view ([booklore-app#2446](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2446)) ([330c31a](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/330c31a70a60cd9c203df5e241aa991f6738aca2))
* **book-browser:** preserve scroll position when navigating back from book details ([booklore-app#2449](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2449)) ([a45a50b](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/a45a50b383bc0664291e133b0cadffee7e55268a))
* **book-uploader:** Improved UX of drag&drop when adding books. ([booklore-app#2410](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2410)) ([5d1a295](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/5d1a295d4925a65de5f9aa2018409b2a53fd88ef))
* **cbx-reader:** add fullscreen, slideshow, RTL, long strip mode and keyboard shortcuts ([booklore-app#2632](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2632)) ([5183b0d](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/5183b0ddfc7d01756f8187b471127e1212139b20))
* **cbx-reader:** enhance ZIP archive handling with Unicode support and fallback mechanisms ([booklore-app#2593](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2593)) ([9444a54](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/9444a544f979a97bf02c8e1bb5697676de0b6475))
* comic metadata picker, lazy-load providers, and UI improvements ([booklore-app#2679](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2679)) ([ffd4615](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/ffd4615b87d95b4f4ad20d2e03c5858257adbd03))
* **comic-metadata:** add extended comic metadata support ([booklore-app#2654](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2654)) ([c1c72ea](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/c1c72ea7baab58a89581daecf4d519636552687c))
* **comicVine:** improve comic metadata structure with additional credits and fields ([booklore-app#2358](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2358)) ([66dee6d](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/66dee6d7e07ed8e281ee5d8f4a07db70b69d2be6))
* **content-restrictions:** add age rating and content rating support ([booklore-app#2619](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2619)) ([9f9c762](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/9f9c762180ea2bcf1821f5c7b0f5dc9357a9f05d))
* **custom-covers:** add functionality to generate custom covers for selected books ([booklore-app#2355](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2355)) ([691845a](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/691845adb8b532ec7628de9da599029539572b2a))
* **dashboard-settings:** update sort field options for Surname, and Personal Rating ([booklore-app#2456](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2456)) ([c23e38b](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/c23e38b5a588a283884baf126ea7a56d33bb7be3))
* **deps:** add JPEG2000 support in PDFBox with Jai ImageIO dependencies ([booklore-app#2250](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2250)) ([8dd9b28](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/8dd9b285523c70cc59c4f61062a053811327b25f))
* **directory-picker:** add selection actions for folders, add buttons for select all, deselect all, and select current folder ([booklore-app#2293](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2293)) ([3b56294](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/3b56294d1ce961f7ed5b608469b3da8c6ef12d7d))
* **email:** add format selection to email book dialog ([booklore-app#2650](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2650)) ([b2a4aa7](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/b2a4aa7960dc6aed1802424f9cfe89c1dacf8ba3))
* **filter:** add audiobook narrator filter and sort option ([20e73bd](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/20e73bd1080c0f05b48ad2b6ea5c7f5dcbec9d5e))
* **filters:** add customizable visible filters setting ([booklore-app#2625](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2625)) ([f71966a](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/f71966a9b61f5191553ad1b94ddf0df627e15feb))
* **filters:** implement cascading sidebar filters ([booklore-app#2616](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2616)) ([89b4319](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/89b43199706828dbc79d5f04f7fca09433530b6b))
* **google-books:** add optional API key configuration ([booklore-app#2629](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2629)) ([37ea0b1](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/37ea0b156ff1cf665e96befdc245d16a7654b20d))
* **google-parser:** improve Google Books API integration with improved metadata handling and series extraction ([booklore-app#2375](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2375)) ([193c949](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/193c9495a1d164a45a9cde5a456aa4bfdc84f1ed))
* **hardcover:** implement book details response and search service enhancements ([booklore-app#2303](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2303)) ([a0f4c8e](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/a0f4c8e43e05288badcc2bac1c7b53064188f7eb))
* **i18n:** add Transloco translation framework with EN/ES and 7 language scaffolds ([booklore-app#2681](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2681)) ([0f60faa](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/0f60faa124ef1b060a4c8649d69f8f7a367169ce))
* **i18n:** translate dashboard scroller titles dynamically (EN/ES) ([d133a87](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/d133a8767e587a2d27d667da3606607b4a80b4f6))
* **icons:** Made icons for libraries and shelves optional with no default icons. ([booklore-app#2599](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2599)) ([1423629](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/14236299f2412f8e393a250d15a3e708bc4fba69))
* **kobo-sync:** add user scoped 2 way kobo sync ([booklore-app#2452](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2452)) ([a77cecd](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/a77cecdf21dd2600845e57501a33da2e6d42537c))
* **kobo-sync:** Sync Shelves and Magic Shelves to Kobo Tags ([booklore-app#2236](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2236)) ([539734a](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/539734a3cfbc024a58121d3b9dd21f82d00651c2))
* **library:** add validation for library path accessibility during rescan ([booklore-app#2347](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2347)) ([4e27b8a](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/4e27b8afab877518bbe5875a08cdc56ef1610027))
* **metadata:** add 'Replace When Provided' option to metadata replacement modes ([booklore-app#2379](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2379)) ([14fa7b0](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/14fa7b058b48c7b469ddf625196733e68bc64a01))
* **metadata:** add auto-save metadata feature in editor settings ([booklore-app#2274](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2274)) ([869bea9](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/869bea9ca51a641e62208214fac2161e79c6b23a))
* **metadata:** add configurable enabled fields for metadata editor and picker + UI tweaks ([booklore-app#2299](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2299)) ([4dc5c00](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/4dc5c0008c75062ad2ffc3f440815f9ed2535142))
* **metadata:** add custom metadata write to file support for moods, tags, ratings, and external IDs in PDF, and CBZ ([booklore-app#2552](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2552)) ([697de90](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/697de9052f206c7642a52e98b9fd062af697576d)), closes [TaskCreateRequest#getOptions](https://gitlab.theprivateserver.de/TaskCreateRequest/issues/getOptions)
* **metadata:** add replace mode option for metadata fetching ([booklore-app#2356](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2356)) ([5451bb4](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/5451bb470a84a33206793f6eff3c629614bd7e65))
* **metadata:** return full metadata from fetchMetadata instead of previews ([booklore-app#2689](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2689)) ([ff11ec5](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/ff11ec57b8f0794a4de287fc2cc3721d26b2232f))
* **metadata:** simplify series name extraction by removing volume suffix ([booklore-app#2385](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2385)) ([b2eb303](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/b2eb30396419f0fa90f1933d8df3c67295d3e56f))
* **mobile-api:** add updatedAt to progress DTOs for conflict detection ([2b6cc4b](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/2b6cc4be7cf7d8b1f451febf97ff64f1890dae8f))
* **OpdsFeedService:** detect ZIP mime type for FB2 files when zipped ([booklore-app#2242](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2242)) ([9761c0e](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/9761c0e9b654b343749a69287967508fec3497cb))
* **pwa:** add offline handling and fallback support ([booklore-app#2444](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2444)) ([27c764f](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/27c764f0f1bd842f42ed855b5b15585c9baf2537))
* **pwa:** Enable fullscreen mode for Android immersive reading ([booklore-app#2649](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2649)) ([9392caa](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/9392caa991b742994b5c3f96361a9313620f0513)), closes [booklore-app#2648](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2648)
* **reader:** add dark/light mode toggle and improved close button to PDF reader ([booklore-app#2699](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2699)) ([16de2d0](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/16de2d006f4aacb2743d455e720e23bf4353a6ed))
* **reader:** add fullscreen, keyboard shortcuts help, search cancel, and go-to-percentage to ebook reader ([booklore-app#2698](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2698)) ([672b716](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/672b7163f169045da17ac0e9a3d136a2a39f65f2))
* **reader:** add PDF annotations, Range streaming, and optimized chunk loading ([booklore-app#2701](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2701)) ([9ed6a3f](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/9ed6a3fe726003dd7c2601174ed73d97183bb807))
* **reader:** improve cbx reader mobile header and slideshow indicator ([aac8246](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/aac8246bcfe5f06d67130ee9aab004566159914b))
* **shelf:** add shelf filtering options and integrate into book processing ([booklore-app#2268](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2268)) ([775887b](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/775887b55f0d644ce5bef60755ea70630ccad930))
* **sidecar:** add sidecar JSON metadata file support ([booklore-app#2657](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2657)) ([e462b6c](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/e462b6c197b7e0711565ae1b36d42c20ca88b715))
* **sort:** Add sort by author surname and first name ([booklore-app#2292](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2292)) ([d4cd6f5](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/d4cd6f52f425be1f04fb2b3f8c9074c25f3c539e))
* **sorting:** add multi-field sorting support ([booklore-app#2628](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2628)) ([e0c3d8b](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/e0c3d8b50df5f74e2c93676197363b616624f5e5))
* **sort:** replace compound sort options with atomic fields and multi-sort support ([booklore-app#2686](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2686)) ([0fa84e3](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/0fa84e34242626c5a825a8328df4cfbb122b0af2))
* **stats:** add 5 new user statistics charts ([booklore-app#2703](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2703)) ([8128269](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/812826931056c696e9eb2ac6903ad05a90404bdd))
* **themes:** add AMOLED theme with distinct light and dark color schemes ([booklore-app#2457](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2457)) ([a1ff5ee](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/a1ff5ee5195206f3e17d35933e80b74dbe2880c9))
* **ui:** add password confirmations ([booklore-app#2291](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2291)) ([4253322](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/4253322d2cd71f94a85a39d710eeb1bbe6a99814))
* **ui:** provide hyperlinks for books as book cards in grid view ([booklore-app#2500](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2500)) ([54eb3e0](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/54eb3e0ee0a2c82fb1b0d942dd6f28c4898d8320))
* **upload:** add upload progress tracking with progress bar and stats ([booklore-app#2640](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2640)) ([f540e75](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/f540e759941694f8b88fab2761b9b9a07e8a4447))
* **user-stats:** add monthly heatmap endpoint ([0c56b7b](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/0c56b7b720f6cbf08ff9dd77fd0937b80493be20))

### Performance Improvements

* lazy-load accordion content in library metadata settings ([booklore-app#2442](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2442)) ([1aea55f](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/1aea55faea562dd33365779be2e1fd32c64eb088))
* **regex:** introduce regex patterns for improved string handling in various services ([booklore-app#2386](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/issues/2386)) ([c42f62c](https://gitlab.theprivateserver.de/WorldTeacher/wt-booklore/commit/c42f62c338a2c417c11177a875d4c17d7cf3a84a))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement Improvement to an existing feature

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug] Hardcover Metadata Search Not Returning Results with Title/Author search in some cases

2 participants