* 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>
* 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>
* 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>
* 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>
* 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>
* 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>
- 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>
* 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>
* 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>
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.
* 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