542 Commits

Author SHA1 Message Date
Muppetteer
36d5f9e6e0 fix: Don't log stack trace when fetching latest version fails (#1959) 2025-12-23 08:36:10 -07:00
ACX
b8fb843b7a Introduce more granular permission controls and update the user management UI (#1965)
Co-authored-by: acx10 <acx10@users.noreply.github.com>
2025-12-22 11:24:54 -07:00
ACX
b5ada2fff0 Introduce reading session tracking with visual insights (#1957)
* Introduce reading session tracking with visual insights (#1957)

---------

Co-authored-by: acx10 <acx10@users.noreply.github.com>
2025-12-21 21:14:42 -07:00
acx10
b12fc82414 Merge flyway v78 into v77 2025-12-20 22:24:14 -07:00
Balázs Szücs
645234e66f feat(bookmark): improve bookmark feature by adding rename, note, color, priority functionalities (#1946)
* feat(bookmark): add bookmark editing, priority, color, notes, and improved sorting

- Add UpdateBookMarkRequest DTO and bookmark editing dialog/component in frontend
- Extend BookMark model/entity with color, notes, priority, updatedAt fields
- Implement bookmark update API and service logic with validation
- Sort bookmarks by priority and creation date
- Add Flyway migrations for new columns and index
- Update tests for new bookmark features

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

* fix(bookmark): prevent notes length display error in edit dialog

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

* fix(bookmark): reset editing state and improve dialog cancel handling

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

* fix(bookmark): improve edit dialog template with Angular @if and conditional error display

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

* feat(bookmark): add view dialog, search, and improved display for bookmarks in reader

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

* feat(bookmark): redesign bookmarks section UI with improved layout, styling, and interactions

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

* feat(bookmark): enhance view dialog UI with improved layout, styling, and priority display

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

* chore(migration): rename migration files to maintain sequential versioning

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

* feat(bookmark): add view and edit actions to bookmark list with improved UI and tooltips

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

* feat(bookmark): add search and filter functionality to bookmark list in EPUB reader

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

* feat(bookmark): update search input to use PrimeNG IconField and InputIcon components

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

---------

Signed-off-by: Balázs Szücs <bszucs1209@gmail.com>
2025-12-20 22:22:10 -07:00
Balázs Szücs
1b4bdc2ddb fix(scans): prevent shelf associations from being cleared during metadata operations (#1947)
* fix: ensure book metadata is eagerly loaded for updates and rescans

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

* Fix failing tests in LibraryRescanHelperTest and MetadataControllerTest

- Update LibraryRescanHelper to handle null and deleted books gracefully during rescan.
- Update LibraryRescanHelperTest to mock BookRepository correctly.
- Update MetadataControllerTest to mock findAllWithMetadataByIds.

---------

Signed-off-by: Balázs Szücs <bszucs1209@gmail.com>
2025-12-20 14:39:09 -07:00
Giancarlo Perrone
32a1a2ac34 Fix/hardcover api key per user (#1943)
* feat: add hardcover API key and sync settings to KoboSync and KoboUserSettings entities

* feat(hardcover): enhance sync functionality to use per-user API keys

- Updated HardcoverSyncService to utilize user-specific Hardcover API keys for syncing reading progress.
- Modified syncProgressToHardcover method to accept userId, allowing for personalized sync settings.
- Improved logging to include userId in sync operations for better traceability.
- Adjusted KoboReadingStateService to pass userId when triggering sync to Hardcover.

* feat(database): update kobo_location_source column size and add hardcover settings

- Increased the size of the kobo_location_source column to accommodate longer location strings from Kobo devices.
- Added new columns for hardcover API key and sync settings in the kobo_user_settings table to enhance user customization.

* refactor(hardcover): update tests to use user-specific Kobo settings

- Replaced AppSettingService with KoboSettingsService in HardcoverSyncServiceTest to utilize user-specific settings.
- Modified syncProgressToHardcover method calls to include userId for personalized sync operations.
- Added a new test case to handle scenarios where user settings are not found, ensuring robust error handling.

---------

Co-authored-by: akiraslingshot <akiraslingshot@gmail.com>
2025-12-19 18:56:41 -07:00
CounterClops
54108754f9 feat: add additional cover art actions and settings (#1938)
* feat: add cover image auto cropping when oversized

* feat: add smart cropping to ignore sections of constant colours in cover images

* fix: description implied cbx files would be excluded from cover regeneration when they are not

* feat: add options to bulk edit cover images in the library view

* fix: resolve issues with batching requests and data validation for cover images
2025-12-19 11:20:50 -07:00
Balázs Szücs
4e6842c189 refactor(fb2, misc): Improve code quality, update to modern Java patterns, add reasonable initial values for StringBuilders (#1932)
* fix(FilenamePatternExtractor): correct date format regex logic and add comprehensive tests

- Fix bug in buildRegexForDateFormat to handle single 'M' and 'd' at any position
- Add FilenamePatternExtractorDateFormatTest and FilenamePatternExtractorIntegrationTest for date extraction scenarios
- Improve StringBuilder initialization for performance in multiple classes
- Precompile regex patterns in Fb2MetadataExtractor for efficiency
- Add Fb2MetadataExtractorOptimizationTest for pattern and StringBuilder usage
- Add null check in BookFilePersistenceService.markAllBooksUnderPathAsDeleted
- Improve path validation logic in PathPatternResolver

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

* test: remove unnecesary tests

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

---------

Signed-off-by: Balázs Szücs <bszucs1209@gmail.com>
2025-12-19 10:59:11 -07:00
ripdog
cc76501fd0 feat: add library sync URL generation in KoboUrlBuilder (#1937) 2025-12-19 10:58:17 -07:00
Giancarlo Perrone
2da01e7a2e feat(hardcover): sync Kobo reading progress to Hardcover (#1926)
* feat(hardcover): sync Kobo reading progress to Hardcover

- Add HardcoverSyncService to sync reading progress asynchronously
- Store hardcover_book_id in book_metadata for faster lookups
- Integrate with KoboReadingStateService to trigger sync on progress updates
- Add database migration for hardcover_book_id column

* test(hardcover): add unit tests for HardcoverSyncService

* test(hardcover): add HardcoverSyncService mock to unit tests for improved coverage

* refactor(hardcover): update syncProgressToHardcover method to use book ID

- Changed syncProgressToHardcover to accept book ID instead of BookEntity.
- Integrated BookRepository to fetch BookEntity within the method.
- Updated related unit tests to reflect the new method signature and ensure proper functionality.

* feat(hardcover): enhance HardcoverSyncService with edition lookup and logging

- Added a method to find an edition by ISBN, improving the accuracy of edition information.
- Enhanced logging for progress calculations, search responses, and reading progress updates for better traceability.
- Updated the handling of default edition IDs to ensure correct page counts are used when available.

* feat(metadata): add hardcoverBookId and its locking mechanism

- Introduced hardcoverBookId and hardcoverBookIdLocked fields to MetadataClearFlags, BookMetadata, and BookMetadataEntity.
- Updated BookMetadataUpdater to handle locking for hardcoverBookId.
- Enhanced MetadataChangeDetector to compare changes for hardcoverBookId, ensuring proper metadata management.

* feat(metadata): add hardcoverBookId input and display in metadata dialogs

- Introduced hardcoverBookId input field in the metadata editor with locking mechanism.
- Updated metadata restore dialog to display hardcoverBookId when available.
- Enhanced user interface for better metadata management and visibility.

* feat(metadata): integrate hardcoverBookId across components and forms

- Added hardcoverBookId and hardcoverBookIdLocked fields to relevant models and interfaces.
- Updated metadata editor, picker, and review components to include hardcoverBookId input and locking functionality.
- Enhanced form controls and metadata handling to support the new hardcoverBookId feature for improved user experience.

* feat(migration): add hardcover_book_id_locked column to book_metadata table

- Introduced a new column hardcover_book_id_locked with a default value of FALSE to the book_metadata table for enhanced metadata management.

* fix(metadata): realign html with develop

---------

Co-authored-by: akiraslingshot <akiraslingshot@gmail.com>
2025-12-19 10:56:40 -07:00
CounterClops
79278216ea fix: file renaming with wrong extension (#1929)
* fix: update path pattern resolver to better handle file extensions

* chore: add unit tests to cover the newly found edge cases

* fix: resolve issue with file extension duplication when using fallback filename
2025-12-18 11:09:43 -07:00
Balázs Szücs
055e86df18 fix(FileService): update User-Agent header for ComicVine to let the Parser through (#1880)
* fix(FileService): update User-Agent header for improved metadata fetching

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

* fix(ComicvineBookParser): update User-Agent header for enhanced metadata fetching

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

---------

Signed-off-by: Balázs Szücs <bszucs1209@gmail.com>
2025-12-16 23:31:20 -07:00
CounterClops
6df338a0d7 feat(api, ui): add bookdrop bulk edit and metadata pattern extraction (#1846)
* feat: add bulk editors for bookdrop

* fix: update pattern behaviour and remove redundant frontend logic

* fix: clean up pattern extractor

* fix: create shared logic to align bulk edit and pattern extract and resolve some minor behaviour issues

* fix: date matching pattern and resolve issues with pattern matching to ignore extra trailing data

* chore: cleanup tests and code to be cleaner

* chore: cleanup autogenerated testing rules

* fix: update to use the new dialog launcher service

* fix: add boolean null check and data validation on pattern extract api

* feat: add bulk edit batching to avoid issues with extremely large import counts

* fix: adding timeout to avoid potential redos issue

* fix: add try blocks for issues with potential NumberFormatException

* fix: update isbn and asin regex to better match spec

* fix: improve error handling and logging

* fix: make component names consistent with the project

* fix: mising import for pattern syntax exception

* chore: add additional tests for the bulk edit service

* fix: improve accessibility to new ui elements

* fix: further improvements to the pattern extractor timeout

* fix: improve frontend placeholder validation

* fix: add back changes accidently removed by merge
2025-12-16 23:27:17 -07:00
acx10
32386a405b Fix flyway file version 2025-12-15 19:57:14 -07:00
WorldTeacher
a4a94b731a feat(opds): allow user to set sorting for opds feed in settings (#1824)
* feat(opds): allow user to set sorting for opds feed in settings

* patch(opds): re-add search normalization

* patch(opds): add series to feedid determination

---------

Co-authored-by: WorldTeacher <admin@theprivateserver.de>
2025-12-15 19:24:01 -07:00
renovate[bot]
3a4a1f3000 chore(deps): update dependency org.flywaydb:flyway-mysql to v11.19.0 (#1868)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-14 01:59:10 -07:00
renovate[bot]
8a520481ae chore(deps): update dependency org.apache.commons:commons-text to v1.15.0 (#1865)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-14 01:58:53 -07:00
renovate[bot]
1382698d54 chore(deps): update dependency org.freemarker:freemarker to v2.3.34 (#1861)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-14 01:58:14 -07:00
renovate[bot]
55eddf4063 chore(deps): update dependency org.assertj:assertj-core to v3.27.6 (#1859)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-13 23:42:52 -07:00
renovate[bot]
95ea371bdd chore(deps): update dependency gradle to v8.14.3 (#1858)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-13 23:42:31 -07:00
CounterClops
3b839d06ba fix: remove the personal rating extraction from fb2 books (#1856) 2025-12-13 22:46:30 -07:00
Harsh Vardhan
9da13ae818 Feat/conversion CBX to EPUB compression configuration (#1844)
* feat(conversion): add image compression percentage setting for CBX to EPUB conversion

* feat(conversion): add conversion image compression setting to kobo sync settings frontend
2025-12-13 21:23:19 -07:00
Dmitry Manannikov
708e851e0b Add support for fb2 books (#1757) 2025-12-13 21:16:56 -07:00
WorldTeacher
b64c30f3bc feat(opds): add series hierarchy (#1837)
Co-authored-by: WorldTeacher <admin@theprivateserver.de>
2025-12-13 15:46:59 -07:00
Balázs Szücs
475f605f26 feat(database): create opds_user_v2 and book_marks tables with necessary constraints and indexes (#1833)
Signed-off-by: Balázs Szücs <bszucs1209@gmail.com>
2025-12-12 10:14:25 -07:00
Balázs Szücs
62ea319536 fix(bookdrop): fix 'Select All' query logic and improve filename fallback for missing metadata (#1828)
* fix(bookdrop): fix 'Select All' query logic and improve filename fallback for missing metadata

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

* fix(tests): update BookDropServiceTest and PathPatternResolverTest to use findAllIds method

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

---------

Signed-off-by: Balázs Szücs <bszucs1209@gmail.com>
2025-12-12 08:32:57 -07:00
Aditya Chandel
1916d6c88c Automatically add newly added books to Kobo shelf (#1826) 2025-12-11 20:21:19 -07:00
aditya.chandel
3fb81a35e4 Add IF EXISTS to personal_rating column drops 2025-12-11 19:01:16 -07:00
Muppetteer
8ee53ff7ba Per user personal ratings (#1820)
* Change personal ratings to be saved per user

* Only copy ratings to users with existing progress records
2025-12-11 18:37:21 -07:00
aditya.chandel
503c82fcd7 Fix tests 2025-12-10 13:08:21 -07:00
aditya.chandel
ef7354c256 Update repo url 2025-12-10 13:04:27 -07:00
aditya.chandel
6ecc922408 Fix flyway file versioning 2025-12-10 12:58:14 -07:00
CounterClops
3ce8d496e0 Fix issues with library scans and file moves with a focus on SMB usage (#1744)
* fix: add retry and retry delays to handle smb lag

* fix: issue with importing cb7 files. missing required dependency. Scan would fail prematurely if a cb7 file was present

* fix: cleanup empty subdirectories when cleaning up parent folders

* fix: update folder cleanup to account for SMB delays

* chore: cleanup redundant and weak tests from auto-generated unit tests

* fix: make sleep function name more descriptive

* fix: minor optimisation around path matching

* fix: update xz package to latest version
2025-12-10 12:52:37 -07:00
Balázs Szücs
f97b23ea14 feat(bookmark): implement bookmark management with CRUD operations (#1795)
* feat(bookmark): implement bookmark management with CRUD operations and UI integration

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

* feat(bookmark): add uniqueness constraint for bookmarks and check for existing bookmarks before creation

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

---------

Signed-off-by: Balázs Szücs <bszucs1209@gmail.com>
2025-12-10 12:51:51 -07:00
Balázs Szücs
3bfece030b feat(search): Add denormalized search_text column for better book search (#1791)
* fix(search): Optimize book search with denormalized search_text column

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

* fix(search): Enhance search text normalization for diacritics in author names

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

* fix(migration): Implement batch processing for populating search text and enhance error handling

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

* fix(search): Manually trigger search text update after author modifications and enhance special character handling

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

* fix(search): Update special character handling to be more permissive in search text normalization

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

* feat(AppMigrationService): add FileService dependency for enhanced file handling

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

* feat(database): add search_text column to book_metadata for improved search functionality

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

* feat(database): add search_text column to book_metadata for improved search functionality

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

* fix(database): correct join condition and ordering in findBooksForMigrationBatch query

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

---------

Signed-off-by: Balázs Szücs <bszucs1209@gmail.com>
2025-12-10 12:51:18 -07:00
Muppetteer
cc38079c40 Enable java remote debug on dev docker stack (#1808)
* Enable java remote debug on dev stack

* Enable java remote debug on dev stack

* Update docs with info on docker development stack

* Update dev docs
2025-12-10 12:49:58 -07:00
Balázs Szücs
ac38c5d5f6 fix(metadata): Fix genre/category disappearing bug in metadata updates (#1807)
Signed-off-by: Balázs Szücs <bszucs1209@gmail.com>
2025-12-10 00:24:09 -07:00
Balázs Szücs
28c0fc311d refactor(api): minor QOL updates, code modernization (#1802)
* refactor(api): minor QOL updates, code modernization

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

* refactor(oidc): replace regex literals with compiled patterns for improved performance

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

* refactor(shelf): remove redundant icon type initialization method

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

---------

Signed-off-by: Balázs Szücs <bszucs1209@gmail.com>
2025-12-10 00:23:41 -07:00
Muppetteer
ff67bed2c4 Fix: locking fields discards unsaved changes (#1799)
* Fixes data loss on lock fields

* Test combined metadata update and lock field
2025-12-10 00:23:16 -07:00
Aditya Chandel
e2062b5dc6 Allow uploading multiple SVG icons and render them directly as inline SVGs instead of using <img> tags (#1796) 2025-12-09 13:38:39 -07:00
Aditya Chandel
42d2e83599 Add loader for long running operations (#1790) 2025-12-07 20:23:47 -07:00
shiggsy365
b00bc5f908 Add authors hierarchy and series metadata to OPDS feed (#1777)
This commit enhances the OPDS server with two major features:

1. Series Metadata in OPDS Feed:
   - Add series name and book number to OPDS book entries
   - Uses standard OPDS/EPUB 3 metadata format with <meta> tags
   - Includes belongs-to-collection and group-position properties

2. Authors Navigation Hierarchy:
   - Add new /authors endpoint for browsing books by author
   - Implement authors list navigation feed with alphabetical sorting
   - Add author filtering to catalog feed via ?author parameter
   - Support library-based access control for author lists
   - Add authors link to root OPDS navigation

Changes:
- OpdsFeedService: Add series metadata to appendMetadata(), add generateAuthorsNavigation()
- OpdsController: Add getAuthorsNavigation() endpoint
- OpdsBookService: Add getDistinctAuthors() and getBooksByAuthorName() methods
- BookOpdsRepository: Add queries for distinct authors and books by author name
- Updated generateCatalogFeed() to support author parameter
- Updated determineFeedTitle() and determineFeedId() to handle author context

Co-authored-by: Claude <noreply@anthropic.com>
2025-12-07 19:17:57 -07:00
Balázs Szücs
afe9c59380 fix(path): remove trailing dots from path components for Windows compatibility (#1786)
Signed-off-by: Balázs Szücs <bszucs1209@gmail.com>
2025-12-07 15:17:27 -07:00
Balázs Szücs
5e5bb41585 fix(bookdrop): improve file filtering to ignore .caltrash (calibre generated trash file) (#1785)
Signed-off-by: Balázs Szücs <bszucs1209@gmail.com>
2025-12-07 15:16:53 -07:00
Aditya Chandel
ad0a99bcbc Add support for uploading and assigning custom SVG icons to libraries… (#1788)
* Add support for uploading and assigning custom SVG icons to libraries and shelves

* Add few default icons
2025-12-07 15:16:22 -07:00
Andrew Roberts
6eae9b88dc Configureable delimiter for remote auth groups (#1782)
* add groups-delimiter (REMOTE_AUTH_GROUPS_DELIMITER) for parsing groups from a remote auth source

* added doc
2025-12-06 20:20:52 -07:00
Jose Alvarez
21e53e1609 Add missing field for Kobo OverDrive expiration check (#1774) 2025-12-06 20:18:18 -07:00
Balázs Szücs
7b5128a511 fix(epub): fix and improve cover image extraction from EPUB files (specifically support for: EPUB 3 specification) (#1773)
* fix(epub): improve cover image extraction from EPUB files

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

* fix(epub): enhance cover image extraction and path resolution

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

---------

Signed-off-by: Balázs Szücs <bszucs1209@gmail.com>
2025-12-06 20:17:51 -07:00
Balázs Szücs
d336cde261 fix(bookdrop): ignore dot and underscore files during monitoring (#1771)
Signed-off-by: Balázs Szücs <bszucs1209@gmail.com>
2025-12-06 20:12:57 -07:00