605 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
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
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
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
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
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
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
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
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
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
Balázs Szücs
52329e659c
fix(metadata): improve ComicInfo.xml detection and normalize fallback titles (#2080)
Signed-off-by: Balázs Szücs <bszucs1209@gmail.com>
2026-01-01 00:51:39 -07:00
Balázs Szücs
f3299915f5
refactor(pdf): update PDFBox usage for improved 3.x compatibility (#2079)
* refactor(pdf): update PDFBox usage for 3.x compatibility and improve file handling

- Use RandomAccessReadBufferedFile and RandomAccessStreamCache for loading PDFs
- Update methods to use new PDFBox 3.x APIs for reading and writing
- Add pdfbox-io dependency to build.gradle
- Add comments regarding compressed mode in PDFBox 3.x

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

* test(pdf): remove outdated comments about PDFBox 3.x default compression in save operations

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

* test(pdf): remove outdated comments about PDFBox 3.x default compression in save operations

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

---------

Signed-off-by: Balázs Szücs <bszucs1209@gmail.com>
2026-01-01 00:50:46 -07:00
Balázs Szücs
03311b76ee
feat(library): improve detection of new files by using unique key and add tests for subpath handling (#2078)
Signed-off-by: Balázs Szücs <bszucs1209@gmail.com>
2026-01-01 00:49:31 -07:00
Balázs Szücs
b31012c986
fix(opds): update mime type support for FB2 and CBX formats based on file extension (#2077)
* fix(opds): add mime type support for FB2 and CBX formats based on file extension

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

* fix(opds): return correct MIME types for all supported book formats in feed links

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

* fix(opds): remove incorrect MIME type mapping for DJVU and default fallback

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

* test(opds): add unit tests for correct MIME type mapping in catalog feed generation

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

---------

Signed-off-by: Balázs Szücs <bszucs1209@gmail.com>
2026-01-01 00:48:38 -07:00
Balázs Szücs
200212799c
fix(comicvine): handle API rate limiting by skipping requests and logging warning when limit is reached (#2076)
* fix(comicvine): handle API rate limiting by skipping requests and logging warning when limit is reached

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

* fix(comicvine): improve rate limit handling by supporting Retry-After header and 429 status code

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

---------

Signed-off-by: Balázs Szücs <bszucs1209@gmail.com>
2026-01-01 00:48:11 -07:00
Balázs Szücs
a72f6e285c
feat(viewer): add context-aware series collapse functionality (#2073)
- Introduced support for context-specific series collapse preferences for libraries, shelves, and magic shelves.
- Improved backward compatibility with legacy preference structures.
- Added JSON aliasing for `seriesCollapse` to maintain API compatibility.
- Extended entity selection in view preferences to include magic shelves.
- Enhanced error handling in app settings service to filter null values.
- Optimized series collapse preference management, ensuring local and global overrides persist accurately.

Signed-off-by: Balázs Szücs <bszucs1209@gmail.com>
2026-01-01 00:38:46 -07:00
Balázs Szücs
ded5da9ef2
fix(file-move): ensure library monitoring is restored after file move and update tests (#2057)
Signed-off-by: Balázs Szücs <bszucs1209@gmail.com>
2026-01-01 00:26:47 -07:00
Balázs Szücs
47efb6593d
fix(upload): truncate long filenames to safe length while preserving extension for bookdrop and additional files (#2059)
Signed-off-by: Balázs Szücs <bszucs1209@gmail.com>
2025-12-30 16:56:05 -07:00
Balázs Szücs
4f372615cf
fix(cbz): exclude macOS metadata and hidden files from image extraction (#2056)
* fix(cbz): exclude macOS metadata and hidden files from image extraction

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

* refactor(cbz): restrict isContentEntry method visibility to private in CbxReaderService

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

* test(cbz): add unit tests for macOS metadata file exclusion in CbxReaderService

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

---------

Signed-off-by: Balázs Szücs <bszucs1209@gmail.com>
2025-12-30 14:51:44 -07:00
Balázs Szücs
939299f93c
fix(upload): preserve original filename as title when metadata extraction returns temp file name (#2053)
* fix(upload): preserve original filename as title when metadata extraction returns temp file name

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

* fix(upload): set original filename as title directly when extracted title is temp name

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

---------

Signed-off-by: Balázs Szücs <bszucs1209@gmail.com>
2025-12-30 12:12:42 -07:00
CounterClops
161eb05965
fix(ui): update tasks last run time to include timezone information (#2047)
* fix: update tasks last run time to include timezone information

* fix: use system default timezone instead of assuming UTC
2025-12-30 11:55:27 -07:00
David Long
8580670b6e
feat(api): add healthcheck endpoint for monitoring health from Docker/Podman (#2024) 2025-12-30 11:54:30 -07:00
Balázs Szücs
27b366aa3a
fix(metadata): add null handling for MetadataRefreshService and improve default initialization in MetadataRefreshOptions (#2034)
Signed-off-by: Balázs Szücs <bszucs1209@gmail.com>
2025-12-30 11:50:37 -07:00
MightyHalfGinger
bfb77ecee0
fix(metadata): cover no longer fails to extract with invalid zip files (#2012)
Previously if any file in the epub was invalid-ly packed into the zip
container, the covers will fail to fetch due to the EpubReader trying to
load everything in the file into memory.

This patch fixes this by making the EpubReader lazy-load all of the
files in the epub so we only actually try to read the strictly-necesasry
files to find the cover. This should also improve loading times ever so
slightly by not needing to read everything in for no reason.
2025-12-30 11:49:50 -07:00
ACX
11e64904a5
- Remove library name from payload (#2054)
- Add basic installation ping to track number of active instances

Co-authored-by: acx10 <acx10@users.noreply.github.com>
2025-12-30 11:49:28 -07:00
ACX
5bd26b9aa7
Change the official domain from booklore.dev to booklore.org (#2046)
Co-authored-by: acx10 <acx10@users.noreply.github.com>
2025-12-29 19:42:10 -07:00
CounterClops
91f0e86b00
fix(bookdrop): improve pattern extractor date extraction (#2032)
* fix: add support for yyyy-MM formats and add tests for new edge case

* fix: add support for MM-yyyy formats
2025-12-29 05:29:55 -07:00
Balázs Szücs
76b2979f37
chore: remove unused imports and minor code cleanup across services, controllers, and tests (#2036)
Signed-off-by: Balázs Szücs <bszucs1209@gmail.com>
2025-12-29 05:28:07 -07:00
Marcin Gajewski
dfcd9db368
Feat/lubimyczytac metadata provider (#2019)
* feat: add LubimyCzytac metadata provider

- Add LubimyCzytac parser with web scraping for lubimyczytac.pl
- Extract book metadata including title, authors, description, ratings
- Parse JSON-LD structured data for reliable metadata extraction
- Add database migration with columns and JSON property name updates
- Add comprehensive test coverage for parser

* feat: add LubimyCzytac UI integration

- Add LC ID and LC Rating fields to metadata picker
- Update settings page with Lubimyczytac provider toggle
- Add LubimyCzytac to metadata searcher provider list
- Display Lubimyczytac in all metadata viewer sections
- Add Lubimyczytac to advanced fetch options
- Update TypeScript models to match backend serialization
2025-12-28 19:50:53 -07:00