1454 Commits

Author SHA1 Message Date
9761c0e9b6 feat(OpdsFeedService): detect ZIP mime type for FB2 files when zipped (#2242)
Signed-off-by: Balázs Szücs <bszucs1209@gmail.com>
2026-01-12 17:01:22 -07:00
64f036fb71 fix(epub): strip formatting from ISBN values to ensure correct extraction (#2248)
Signed-off-by: Balázs Szücs <bszucs1209@gmail.com>
2026-01-12 17:00:52 -07:00
8dd9b28552 feat(deps): add JPEG2000 support in PDFBox with Jai ImageIO dependencies (#2250)
Signed-off-by: Balázs Szücs <bszucs1209@gmail.com>
2026-01-12 16:59:56 -07:00
06a75c42c8 fix(metadata): missing lubimyczytac fields and fetch retry (#2179)
* fix(metadata): fix LubimyczytacId and LubimyczytacRating not appearing with metadata refresh

* fix(metadata): remove searching by ISBN on lubimyczytac.pl (not supported)

* fix(metadata): add retries for lubimyczytac.pl

---------

Co-authored-by: ACX <8075870+acx10@users.noreply.github.com>
2026-01-12 16:59:28 -07:00
e51343950a Update Angular dependencies 2026-01-10 10:54:13 -07:00
ACX
4543381814 Stream CBZ contents directly from the archive instead of unzipping and caching files (#2229)
Co-authored-by: acx10 <acx10@users.noreply.github.com>
2026-01-10 10:41:34 -07:00
af07110f4c Correct Flyway migration file version 2026-01-10 10:24:18 -07:00
4f012746c5 RanobeDB Light Novel metadata provider (#2221)
* feat(metadata): added ranobedb metadata provider for light novels

* fix(metadata): remove ranobedb review count and fix merge conflicts

* test(metadata): added unit tests for RanobeDB parser

* fix(metadata): add ranobedb to updated metadata searcher

---------

Co-authored-by: ACX <8075870+acx10@users.noreply.github.com>
2026-01-10 10:21:39 -07:00
105f477c79 feat(archive): add ArchiveType via Magic Numbers detection and integrate into book processing (#2220)
* feat(archive): add ArchiveType detection and integrate into book processing

Signed-off-by: Balázs Szücs <bszucs1209@gmail.com>

* feat(cbx): enhance archive type detection for CBX files

Signed-off-by: Balázs Szücs <bszucs1209@gmail.com>

* refactor(tests): rename method for clarity in CbxMetadataWriterTest

Signed-off-by: Balázs Szücs <bszucs1209@gmail.com>

---------

Signed-off-by: Balázs Szücs <bszucs1209@gmail.com>
2026-01-10 10:04:50 -07:00
24fabc97de fix(epub): normalize text nodes in EPUB metadata content.opf (#2222)
Signed-off-by: Balázs Szücs <bszucs1209@gmail.com>
2026-01-10 10:02:06 -07:00
c184e32a67 Fix drafter 2026-01-09 15:10:42 -07:00
ACX
34e6b3ff46 Fix master pipeline (#2224)
Co-authored-by: acx10 <acx10@users.noreply.github.com>
2026-01-09 14:48:28 -07:00
9f019f0636 fix: Ignore access denied when doing library scan instead of failing (fixes #1342, #2122) (#2132) 2026-01-09 14:03:23 -07:00
a3cc878cb8 fix(ui): use view preference override for magic shelves (#2215) 2026-01-09 13:56:15 -07:00
38cd494763 Fix pipeline 2026-01-09 13:53:34 -07:00
810f3994d4 Cache epub fonts for faster page refresh 2026-01-09 09:33:25 -07:00
34ac70c251 feat(ui): add series number overlay for More in Series (#2208)
Co-authored-by: ACX <8075870+acx10@users.noreply.github.com>
2026-01-08 19:25:18 -07:00
ACX
15007143f9 Add per-user font management permission (#2210)
Co-authored-by: acx10 <acx10@users.noreply.github.com>
2026-01-08 19:19:14 -07:00
9877182b67 Remove tests 2026-01-08 16:40:10 -07:00
a3b7f3cc0d Update hardcover sync information text 2026-01-08 16:35:52 -07:00
77bb2904e3 Feature/koreader hardcover sync (#2204)
* feat(settings): add hardcover sync settings and integrate into device settings UI

* feat(hardcover): implement Hardcover sync settings API and UI integration

* test(hardcover): add unit tests for HardcoverSyncSettingsService and HardcoverSettingsComponent

* fix(hardcover-settings): correct API key copy function to handle null values properly

---------

Co-authored-by: akiraslingshot <akiraslingshot@gmail.com>
Co-authored-by: ACX <8075870+acx10@users.noreply.github.com>
2026-01-08 16:14:51 -07:00
20ed3e5b25 Revert changes 2026-01-08 15:56:01 -07:00
dde04d4cc1 FIx imports 2026-01-08 15:38:08 -07:00
6cf7848f44 Fix Kobo series handling for empty names and series number formatting (#2185) 2026-01-08 15:26:43 -07:00
07c3affcd5 refactor(frontend): resolve linting errors, and EPUB reader lifecycle errors (#2127)
* refactor(types): improve type safety by replacing 'any' with specific types in various components

Signed-off-by: Balázs Szücs <bszucs1209@gmail.com>

* fix(filters): handle undefined values in filter streams and update type for selected filters

Signed-off-by: Balázs Szücs <bszucs1209@gmail.com>

* refactor(epub-reader): improve rendition cleanup and enhance debug logging in helper functions

Signed-off-by: Balázs Szücs <bszucs1209@gmail.com>

* fix(epub-reader): handle errors during rendition and book destruction in ngOnDestroy

Signed-off-by: Balázs Szücs <bszucs1209@gmail.com>

---------

Signed-off-by: Balázs Szücs <bszucs1209@gmail.com>
2026-01-08 15:21:23 -07:00
14dcf552bd fix(cbx): "Archive too large" error for invalid/corrupt CBX files (#2205)
Signed-off-by: Balázs Szücs <bszucs1209@gmail.com>
2026-01-08 15:18:40 -07:00
ACX
15de049f3d Support individual “write to file” settings per book type, with configurable file size limits (#2206)
Co-authored-by: acx10 <acx10@users.noreply.github.com>
2026-01-08 15:18:20 -07:00
ACX
f75eb840c6 Configure reverse proxy to support streaming response (#2201)
Co-authored-by: acx10 <acx10@users.noreply.github.com>
2026-01-07 23:23:06 -07:00
b43e9ba08c feat(ComicVine): use structured search for ComicVine metadata fetching instead of generic /search (#2193)
* feat(comicvine): improve comic metadata handling with additional fields and improved search logic

Signed-off-by: Balázs Szücs <bszucs1209@gmail.com>

* feat(comicvine): enhance series and issue extraction with improved regex patterns and caching mechanism

Signed-off-by: Balázs Szücs <bszucs1209@gmail.com>

* feat(comicvine): enhance ComicvineBookParser with improved metadata extraction and logging

Signed-off-by: Balázs Szücs <bszucs1209@gmail.com>

* feat(comicvine): improve title formatting and author extraction in ComicvineBookParser

Signed-off-by: Balázs Szücs <bszucs1209@gmail.com>

---------

Signed-off-by: Balázs Szücs <bszucs1209@gmail.com>
2026-01-07 18:12:55 -07:00
f0444df6ee refactor(images): migrate to TwelveMonkeys ImageIO with graceful unsupported format handling (#2188)
Signed-off-by: Balázs Szücs <bszucs1209@gmail.com>
Co-authored-by: ACX <8075870+acx10@users.noreply.github.com>
2026-01-07 18:12:12 -07:00
ACX
c17fe58f4c Show a persistent loader while a large library is being created (#2200)
Co-authored-by: acx10 <acx10@users.noreply.github.com>
2026-01-07 18:10:53 -07:00
251fe65ec0 fix(parser): handle missing results table in GoodReads search and log a warning (#2187)
Signed-off-by: Balázs Szücs <bszucs1209@gmail.com>
2026-01-07 14:16:57 -07:00
13a617a9e9 feat(magic-shelf): add ISBN-10 and ISBN-13 metadata fields to book rules (#2196)
Signed-off-by: Balázs Szücs <bszucs1209@gmail.com>
2026-01-07 14:16:12 -07:00
ACX
c7afe6ec13 Implement memoization in the book card to reduce CPU usage during scrolling (#2198)
Co-authored-by: acx10 <acx10@users.noreply.github.com>
2026-01-07 14:13:42 -07:00
bd3df812b7 fix(lubimyczytac): Fix Lubimyczytac metadata lock persistence (#2194)
* feat(metadata): add support for Lubimyczytac ID and rating fields

Signed-off-by: Balázs Szücs <bszucs1209@gmail.com>

* feat(metadata): add Lubimyczytac ID and rating fields to metadata editor

Signed-off-by: Balázs Szücs <bszucs1209@gmail.com>

* feat(metadata): add Lubimyczytac ID and rating fields to MetadataRefreshOptions

Signed-off-by: Balázs Szücs <bszucs1209@gmail.com>

---------

Signed-off-by: Balázs Szücs <bszucs1209@gmail.com>
2026-01-07 11:27:12 -07:00
ACX
fa3005369f Revamp metadata search UI to display live results (#2195)
Co-authored-by: acx10 <acx10@users.noreply.github.com>
2026-01-07 11:26:41 -07:00
f63a8641d8 Add frontend unit tests (Part 2) 2026-01-06 15:16:26 -07:00
81442a1e5c feat(metadata): enhance XML parsing with secure processing and improved error handling (#2163)
Signed-off-by: Balázs Szücs <bszucs1209@gmail.com>
2026-01-06 10:12:29 -07:00
6a7b75d042 feat(series-page): implement multi-select functionality for book selection and add footer actions (#2167)
Signed-off-by: Balázs Szücs <bszucs1209@gmail.com>
2026-01-06 10:11:02 -07:00
34851ef35c Add frontend unit tests (Part 1) 2026-01-05 17:10:40 -07:00
e283b61e2e chore(deps): bump qs and body-parser in /booklore-ui (#2088)
Bumps [qs](https://github.com/ljharb/qs) and [body-parser](https://github.com/expressjs/body-parser). These dependencies needed to be updated together.

Updates `qs` from 6.14.0 to 6.14.1
- [Changelog](https://github.com/ljharb/qs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ljharb/qs/compare/v6.14.0...v6.14.1)

Updates `body-parser` from 1.20.3 to 1.20.4
- [Release notes](https://github.com/expressjs/body-parser/releases)
- [Changelog](https://github.com/expressjs/body-parser/blob/master/HISTORY.md)
- [Commits](https://github.com/expressjs/body-parser/compare/1.20.3...1.20.4)

---
updated-dependencies:
- dependency-name: qs
  dependency-version: 6.14.1
  dependency-type: indirect
- dependency-name: body-parser
  dependency-version: 1.20.4
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-05 15:28:54 -07:00
ACX
24862ed62b Move custom fonts management to Reader tab (#2161)
Co-authored-by: acx10 <acx10@users.noreply.github.com>
2026-01-05 15:25:48 -07:00
926b87872e feat: Add custom font support for EPUB reader (#2120)
* feat: Add custom font support for EPUB reader

This commit introduces the ability to manage and use custom fonts in the EPUB reader. Key changes include:

**Backend:**
- Added `CustomFontService` for handling custom font operations.
- Introduced `CustomFontController` for API endpoints.
- Created `CustomFontEntity` and `CustomFontRepository` for database interactions.
- Added `CustomFontMapper` and `CustomFontDto` for data transformation.
- Updated `SecurityConfig` to include JWT filter for custom fonts.
- Enhanced `GlobalExceptionHandler` to handle custom font-related exceptions.
- Added database migrations:
  - `V83__Create_Custom_Font_Table.sql` for creating the custom font table.
  - `V84__Add_Custom_Font_To_Epub_Preferences.sql` for integrating custom fonts with EPUB preferences.

**Frontend:**
- Added `CustomFontsComponent` and `FontUploadDialogComponent` for managing custom fonts in the settings UI.
- Updated `EpubReaderPreferencesComponent` to include custom font options.
- Introduced `CustomFontService` and `CustomFontModel` for frontend logic and data handling.
- Enhanced `SettingsComponent` to integrate custom font management.

**Other Changes:**
- Updated `EpubViewerPreferences` and `EpubViewerPreferencesEntity` to support custom fonts.
- Modified existing components and services to accommodate the new feature.

This feature enhances the user experience by allowing personalized font choices for EPUB reading.

* fix: custom font does not apply after page layout changed

* fix: duplicate API call when change EPUB global settings

* fix: some code review items, extract shared filter logic and improve UX

- Extract AbstractQueryParameterJwtFilter base class to reduce code duplication
  between CoverJwtFilter and CustomFontJwtFilter
- Remove cssIdentifier and fontUrl fields from CustomFont model (no longer needed)
- Add font name sanitization to prevent XSS and ensure data integrity
- Improve error handling in CustomFontService with proper APIException usage
- Replace RuntimeException handler with specific IllegalStateException and
  UnsupportedOperationException handlers in GlobalExceptionHandler
- Add skeleton loading states for font previews and font dropdowns
- Improve font loading state management in epub-reader component
- Create shared custom-font.util.ts for dropdown population logic
- Use reactive font$ subscription for real-time font updates in preferences
- Make DB migrations idempotent with IF NOT EXISTS clauses
- Optimize font file validation to read only header bytes instead of entire file

* chore: re-version migration scripts

* Fix: Kobo sync missing book covers (v1.16.4) (#2147)

Co-authored-by: acx10 <acx10@users.noreply.github.com>

* Fix: correctly update book cover hash on metadata refresh (#2149)

Co-authored-by: acx10 <acx10@users.noreply.github.com>

* Introduce Vitest as the frontend Angular testing framework for Booklore (#2150)

Co-authored-by: acx10 <acx10@users.noreply.github.com>

* Add Vitest frontend tests to CI with JUnit reporting and coverage (#2151)

Co-authored-by: acx10 <acx10@users.noreply.github.com>

* Update PR template to capture frontend test details

* Add instructions for running Angular frontend tests

---------

Co-authored-by: ACX <8075870+acx10@users.noreply.github.com>
Co-authored-by: acx10 <acx10@users.noreply.github.com>
2026-01-05 14:45:29 -07:00
9861e23333 feat(magic-shelf): add genre filter support and improve category labeling in rule fields (#2075)
Signed-off-by: Balázs Szücs <bszucs1209@gmail.com>
2026-01-05 14:28:24 -07:00
9a498da2ba feat(cover-generator): enhance cover resolution and redesign layout for improved aesthetics (#2125)
Signed-off-by: Balázs Szücs <bszucs1209@gmail.com>
2026-01-05 14:27:26 -07:00
34bbe8a14e fix(api): kobo proxy server unit tests (#2136)
* fix: resolve issue with kobo proxy failing to reencode encoded query params

* fix: add additional tests for kobo server proxy
2026-01-05 14:26:41 -07:00
a103e3eaa0 fix(docs): update issue report links to use specific templates (#2156)
Signed-off-by: Balázs Szücs <bszucs1209@gmail.com>
2026-01-05 14:26:10 -07:00
e346b83860 Add instructions for running Angular frontend tests 2026-01-04 23:08:32 -07:00
f8d4090738 Update PR template to capture frontend test details 2026-01-04 23:02:55 -07:00
ACX
cee7e96c63 Add Vitest frontend tests to CI with JUnit reporting and coverage (#2151)
Co-authored-by: acx10 <acx10@users.noreply.github.com>
2026-01-04 22:55:13 -07:00