1429 Commits

Author SHA1 Message Date
Balázs Szücs
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
Balázs Szücs
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
Balázs Szücs
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
Balázs Szücs
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
Balázs Szücs
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
Balázs Szücs
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
acx10
f63a8641d8 Add frontend unit tests (Part 2) 2026-01-06 15:16:26 -07:00
Balázs Szücs
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
Balázs Szücs
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
acx10
34851ef35c Add frontend unit tests (Part 1) 2026-01-05 17:10:40 -07:00
dependabot[bot]
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
Darkraise
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
Balázs Szücs
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
Balázs Szücs
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
CounterClops
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
Balázs Szücs
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
acx10
e346b83860 Add instructions for running Angular frontend tests 2026-01-04 23:08:32 -07:00
acx10
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
ACX
e8de8adf6f
Introduce Vitest as the frontend Angular testing framework for Booklore (#2150)
Co-authored-by: acx10 <acx10@users.noreply.github.com>
2026-01-04 21:56:20 -07:00
ACX
92dc156459
Fix: correctly update book cover hash on metadata refresh (#2149)
Co-authored-by: acx10 <acx10@users.noreply.github.com>
2026-01-04 20:52:05 -07:00
ACX
c3af19a804
Fix: Kobo sync missing book covers (v1.16.4) (#2147)
Co-authored-by: acx10 <acx10@users.noreply.github.com>
2026-01-04 19:01:54 -07:00
ACX
2a89b19706
Update pull request, feature request, and bug report templates (#2145)
Co-authored-by: acx10 <acx10@users.noreply.github.com>
2026-01-04 18:13:57 -07:00
ACX
0fe883c925
Fix: User update fails when libraries are assigned (#2144)
Co-authored-by: acx10 <acx10@users.noreply.github.com>
2026-01-04 17:39:25 -07:00
acx10
8d9c7e5e99 Add PikaPods as a project sponsor 2026-01-04 14:17:48 -07:00
Balázs Szücs
cbe7fa09a9
fix(ui): reorder metadata provider columns to 1st → 4th priority (#2139)
Signed-off-by: Balázs Szücs <bszucs1209@gmail.com>
2026-01-04 10:58:10 -07:00
Balázs Szücs
d169a26eb3
fix(recommendations): improve error handling for JSON conversion and return empty set on failure (#2137)
Signed-off-by: Balázs Szücs <bszucs1209@gmail.com>
2026-01-04 10:57:47 -07:00
ACX
1ea9cbde3e
Ensure Booklore metadata changes are reflected on Kobo books (#2140)
Co-authored-by: acx10 <acx10@users.noreply.github.com>
2026-01-04 10:55:44 -07:00
ACX
3b3656c29b
Improve robustness of book uploader error handling (#2130)
Co-authored-by: acx10 <acx10@users.noreply.github.com>
2026-01-03 16:47:59 -07:00
Gavin Mogan
d3a0e9ddc9
Fix: Ignore access denied when doing library scan instead of failing (fixes #1342) (#2122) 2026-01-03 14:06:53 -07:00
Balázs Szücs
e0b324689e
fix(metadata): add unit tests for task execution layer + fix permission validation logic (#2123)
Signed-off-by: Balázs Szücs <bszucs1209@gmail.com>
2026-01-03 14:06:24 -07:00
Doug Coffin
ae30b3434e
Fix kobo auto add on bookdrop. (#2116) 2026-01-03 14:02:41 -07:00
Balázs Szücs
ab96eee5bc
refactor(types): replace most usages of 'any' with 'unknown' and improve type safety across services and components (#2050)
* refactor(types): replace most usages of 'any' with 'unknown' and improve type safety across services and components

- Update method signatures, variables, and interfaces to use 'unknown' instead of 'any'
- Refine event and observable typings for better type inference
- Add or adjust explicit types for function parameters and return values
- Update Chart.js tooltip and context typings for chart services
- Improve type safety in Book, BookState, and related models
- Adjust template bindings and method calls to match stricter typings
- Add SecureSrcDirective for secure image loading with fallback and error handling

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

* chore(angular): remove proxy configuration from development build settings

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

* refactor(book-browser): streamline entity and book state management with reactive streams

- Refactor entity type and entity fetching logic to use observables and combine route params
- Simplify book state handling by consolidating filtering and fetching into a single reactive pipeline
- Remove redundant applySortOption logic and related subscriptions
- Fix book card index binding in template for improved rendering performance
- Ensure proper cleanup of epub rendition in epub-reader component

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

* fix(book-browser, book-uploader): improve permission checks and enhance file upload handling

- Use optional chaining for user permission checks in book-browser.component.html to prevent runtime errors when user data is undefined
- Refactor book-uploader.component.ts to pass destination and IDs explicitly to uploadBatch, reconstruct files for strict type handling, and ensure proper upload flow and UI feedback

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

* refactor(charts, services): improve type safety for book state validation and update form field checks

- Refactor isValidBookState methods across chart components and services to use type predicates and stricter type checks for BookState
- Update metadata-picker.component to simplify array field checks for authors, categories, moods, and tags
- Adjust magic-shelf-utils to remove unnecessary fallback in object spread
- Update notification-event.service to use correct timeout type for highlightTimeout

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

* fix(theme): ensure safe merging of theme properties and improve type definition for themesMap

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

* refactor(epub-reader): streamline book and rendition initialization logic

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

---------

Signed-off-by: Balázs Szücs <bszucs1209@gmail.com>
2026-01-02 18:22:54 -07:00
Balázs Szücs
998b07d243
fix(filemove): improve handling of library monitoring during file moves and add tests for operation order (#2104)
Signed-off-by: Balázs Szücs <bszucs1209@gmail.com>
2026-01-02 10:49:34 -07:00
Balázs Szücs
486781b9cd
feat(metadata): add endpoint and service for generating custom book covers for PDFs and CBX (#2108)
Signed-off-by: Balázs Szücs <bszucs1209@gmail.com>
2026-01-02 10:47:26 -07:00
ACX
5d7c67cb5f
Assign newly created library to the creating user (#2110)
Co-authored-by: acx10 <acx10@users.noreply.github.com>
2026-01-02 10:42:58 -07:00
Balázs Szücs
b3ac58207a
refactor(api): modernize codebase with Java 21 idioms and improve null safety (#2106)
* fix(controller): handle null filename in getBackgroundImage method

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

* refactor(tests): replace hardcoded replace mode with variable in BookMetadataUpdaterCategoryTest

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

---------

Signed-off-by: Balázs Szücs <bszucs1209@gmail.com>
2026-01-02 10:16:01 -07:00
ACX
5a251d182a
Fix inconsistent spacing and label display in reading heatmap chart (#2099)
Co-authored-by: acx10 <acx10@users.noreply.github.com>
2026-01-01 20:06:07 -07:00
Charlie Le
c8e10b5499
feat: Append volume to comic series when extracting cbx metadata (#2072)
* Append volume to comic series when extracting cbx metadata

* Add testing for extracting metadata with and without the volume tag
2026-01-01 17:36:05 -07:00
ACX
6394d1ef04
Fix date inconsistencies in Favorite Days and Reading Session Timeline charts (#2096)
Co-authored-by: acx10 <acx10@users.noreply.github.com>
2026-01-01 17:34:33 -07:00
ACX
c7cfe266d4
Fix: Deselect items when they are removed from current view in book browser (#2093)
Co-authored-by: acx10 <acx10@users.noreply.github.com>
2026-01-01 13:48:39 -07:00
ACX
78344d1d0e
Enhance EPUB reader navigation by adding tap zones for easier page control (#2092)
Co-authored-by: acx10 <acx10@users.noreply.github.com>
2026-01-01 13:26:46 -07:00
ACX
e0dec6f2f6
Add extended permissions for bulk metadata, reading progress, and read status actions (#2091)
Co-authored-by: acx10 <acx10@users.noreply.github.com>
2026-01-01 11:41:22 -07:00
Doug Coffin
60524ee8a6
Fix/kobo library snapshot (#2051)
* Fix Kobo snapshot ownership and clean existing rows

* Add Kobo snapshot ownership and clean existing rows test.
2026-01-01 01:00:29 -07:00