dependabot[bot]
a8f0353035
chore(deps): bump the gradle-dependencies group across 1 directory with 15 updates ( #3377 )
...
Bumps the gradle-dependencies group with 13 updates in the /booklore-api directory:
| Package | From | To |
| --- | --- | --- |
| [org.mariadb.jdbc:mariadb-java-client](https://github.com/mariadb-corporation/mariadb-connector-j ) | `3.5.7` | `3.5.8` |
| org.flywaydb:flyway-mysql | `12.0.3` | `12.5.0` |
| [org.projectlombok:lombok](https://github.com/projectlombok/lombok ) | `1.18.42` | `1.18.46` |
| org.apache.pdfbox:pdfbox | `3.0.6` | `3.0.7` |
| [com.github.junrar:junrar](https://github.com/junrar/junrar ) | `7.5.8` | `7.5.10` |
| [org.jsoup:jsoup](https://github.com/jhy/jsoup ) | `1.22.1` | `1.22.2` |
| [org.springdoc:springdoc-openapi-starter-webmvc-ui](https://github.com/springdoc/springdoc-openapi ) | `3.0.2` | `3.0.3` |
| org.glassfish.jaxb:jaxb-runtime | `4.0.6` | `4.0.7` |
| [tools.jackson:jackson-bom](https://github.com/FasterXML/jackson-bom ) | `3.1.0` | `3.1.2` |
| [org.springframework.boot](https://github.com/spring-projects/spring-boot ) | `4.0.3` | `4.0.6` |
| org.hibernate.orm | `7.2.6.Final` | `7.3.2.Final` |
| com.github.ben-manes.versions | `0.53.0` | `0.54.0` |
| [gradle-wrapper](https://github.com/gradle/gradle ) | `9.4.0` | `9.5.0` |
Updates `org.mariadb.jdbc:mariadb-java-client` from 3.5.7 to 3.5.8
- [Release notes](https://github.com/mariadb-corporation/mariadb-connector-j/releases )
- [Changelog](https://github.com/mariadb-corporation/mariadb-connector-j/blob/main/CHANGELOG.md )
- [Commits](https://github.com/mariadb-corporation/mariadb-connector-j/compare/3.5.7...3.5.8 )
Updates `org.flywaydb:flyway-mysql` from 12.0.3 to 12.5.0
Updates `org.projectlombok:lombok` from 1.18.42 to 1.18.46
- [Changelog](https://github.com/projectlombok/lombok/blob/master/doc/changelog.markdown )
- [Commits](https://github.com/projectlombok/lombok/compare/v1.18.42...v1.18.46 )
Updates `org.apache.pdfbox:pdfbox` from 3.0.6 to 3.0.7
Updates `org.apache.pdfbox:pdfbox-io` from 3.0.6 to 3.0.7
Updates `org.apache.pdfbox:xmpbox` from 3.0.6 to 3.0.7
Updates `com.github.junrar:junrar` from 7.5.8 to 7.5.10
- [Release notes](https://github.com/junrar/junrar/releases )
- [Changelog](https://github.com/junrar/junrar/blob/master/CHANGELOG.md )
- [Commits](https://github.com/junrar/junrar/compare/v7.5.8...v7.5.10 )
Updates `org.jsoup:jsoup` from 1.22.1 to 1.22.2
- [Release notes](https://github.com/jhy/jsoup/releases )
- [Changelog](https://github.com/jhy/jsoup/blob/master/CHANGES.md )
- [Commits](https://github.com/jhy/jsoup/compare/jsoup-1.22.1...jsoup-1.22.2 )
Updates `org.springdoc:springdoc-openapi-starter-webmvc-ui` from 3.0.2 to 3.0.3
- [Release notes](https://github.com/springdoc/springdoc-openapi/releases )
- [Changelog](https://github.com/springdoc/springdoc-openapi/blob/v3.0.3/CHANGELOG.md )
- [Commits](https://github.com/springdoc/springdoc-openapi/compare/v3.0.2...v3.0.3 )
Updates `org.glassfish.jaxb:jaxb-runtime` from 4.0.6 to 4.0.7
Updates `tools.jackson:jackson-bom` from 3.1.0 to 3.1.2
- [Commits](https://github.com/FasterXML/jackson-bom/compare/jackson-bom-3.1.0...jackson-bom-3.1.2 )
Updates `org.springframework.boot` from 4.0.3 to 4.0.6
- [Release notes](https://github.com/spring-projects/spring-boot/releases )
- [Commits](https://github.com/spring-projects/spring-boot/compare/v4.0.3...v4.0.6 )
Updates `org.hibernate.orm` from 7.2.6.Final to 7.3.2.Final
Updates `com.github.ben-manes.versions` from 0.53.0 to 0.54.0
Updates `gradle-wrapper` from 9.4.0 to 9.5.0
- [Release notes](https://github.com/gradle/gradle/releases )
- [Commits](https://github.com/gradle/gradle/compare/v9.4.0...v9.5.0 )
---
updated-dependencies:
- dependency-name: org.mariadb.jdbc:mariadb-java-client
dependency-version: 3.5.8
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: gradle-dependencies
- dependency-name: org.flywaydb:flyway-mysql
dependency-version: 12.5.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: gradle-dependencies
- dependency-name: org.projectlombok:lombok
dependency-version: 1.18.46
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: gradle-dependencies
- dependency-name: org.apache.pdfbox:pdfbox
dependency-version: 3.0.7
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: gradle-dependencies
- dependency-name: org.apache.pdfbox:pdfbox-io
dependency-version: 3.0.7
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: gradle-dependencies
- dependency-name: org.apache.pdfbox:xmpbox
dependency-version: 3.0.7
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: gradle-dependencies
- dependency-name: com.github.junrar:junrar
dependency-version: 7.5.10
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: gradle-dependencies
- dependency-name: org.jsoup:jsoup
dependency-version: 1.22.2
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: gradle-dependencies
- dependency-name: org.springdoc:springdoc-openapi-starter-webmvc-ui
dependency-version: 3.0.3
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: gradle-dependencies
- dependency-name: org.glassfish.jaxb:jaxb-runtime
dependency-version: 4.0.7
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: gradle-dependencies
- dependency-name: tools.jackson:jackson-bom
dependency-version: 3.1.2
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: gradle-dependencies
- dependency-name: org.springframework.boot
dependency-version: 4.0.6
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: gradle-dependencies
- dependency-name: org.hibernate.orm
dependency-version: 7.3.2.Final
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: gradle-dependencies
- dependency-name: com.github.ben-manes.versions
dependency-version: 0.54.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: gradle-dependencies
- dependency-name: gradle-wrapper
dependency-version: 9.5.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: gradle-dependencies
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-29 10:39:19 -06:00
acx10
c5f8539d9b
Sanitize scripts and dangerous content in EPUB/MOBI reader ( #2938 )
2026-04-29 10:37:07 -06:00
acx10
223e548c65
chore: update GHCR/org references and stabilize CI workflow deps
2026-04-29 10:31:23 -06:00
Aku
2b1af054f6
fix: use correct reader service based on book type (PDF vs CBX) ( #3374 )
2026-04-29 09:21:23 -06:00
acx10
385583d5d5
Remove unused app endpoints ( #3378 )
...
Co-authored-by: acx10 <acx10@users.noreply.github.com >
2026-04-29 09:20:05 -06:00
acx10
23559d8b0a
Remove all traces of telemetry ( #3366 )
...
Co-authored-by: acx10 <acx10@users.noreply.github.com >
2026-04-14 08:24:35 -06:00
James Ward
cc3d79407c
fix(cron): proper return type for isTelemetryEnabled() ( #3315 )
2026-03-13 19:11:18 -06:00
James Ward
cac557b74e
fix(cron): prevent telemetry ping when telemetry is disabled ( #3313 )
...
this updates the cron to avoid running the telemetry ping when
telemetry is disabled so that personally identifiable information
is not sent off to other parties (an IP address, an installation ID)
2026-03-12 20:43:28 -06:00
ACX
9e1ff527e8
Fix NPE when deleting authors by removing from book metadata first ( #3296 ) ( #3312 )
2026-03-12 20:12:20 -06:00
Max
5fa511a26c
WIP: replacement content for existing PR ( #3011 )
2026-03-12 19:13:30 -06:00
acx10
aeeba4169b
Fix audiobook progress percentage calculation
2026-03-11 23:25:02 -06:00
ACX
210eed7ae0
Allow logout+jwt token type in OIDC backchannel logout ( #3270 ) ( #3291 )
2026-03-11 17:26:45 -06:00
acx10
185422810d
feat: mobile/app API enhancements
2026-03-10 21:41:29 -06:00
ACX
96b62fe902
Make OIDC scopes configurable to fix Entra ID login ( #3261 ) ( #3265 )
2026-03-09 20:22:43 -06:00
ACX
bf1957847c
Scanner organization modes ( #3203 )
...
* Add BOOK_PER_FILE and BOOK_PER_FOLDER organization modes for library scanning
* Filter temp/partial files, support .ignore directories, and skip zero-byte files during scanning
* Replace event-based monitoring with WatchService, add pending deletion pool and move detection
* Fix folder-based audiobook grouping, improve series detection, and add tests
* Add unit tests for BookFileTransactionalHandler, BookFilePersistenceService, and LibraryFileEventProcessor
2026-03-09 14:42:44 -06:00
ACX
1a8513dae4
Fix cover download failing when CDN redirects to raw IP ( #3247 )
2026-03-08 13:34:24 -06:00
ACX
92b395e0d2
Force UTC session timezone on JDBC connections to prevent DST gap rejections ( #3245 )
2026-03-08 10:26:09 -06:00
ACX
95fb920472
Add bulk ISBN import from file ( #3239 ) ( #3244 )
2026-03-08 10:25:05 -06:00
ACX
c3ecf49984
Allow physical and digital book states to coexist ( #3238 )
2026-03-07 17:59:24 -07:00
acx10
36c7185636
Gate all file write operations for network storage users ( #3231 )
2026-03-07 16:17:00 -07:00
ACX
dcf54d6cad
Add ASIN lookup to author search ( #3162 ) ( #3228 )
2026-03-07 14:51:28 -07:00
ACX
bdb838d2e4
Add option to regenerate only missing covers ( #3181 ) ( #3227 )
2026-03-07 14:42:46 -07:00
Benjamin Erb
4aadbefe4f
fix: sort libraries by name in OPDS feed ( #3220 )
2026-03-07 13:22:03 -07:00
ACX
4031bba8cb
Fall back to folder cover images when embedded cover extraction fails ( #3212 )
2026-03-06 19:56:21 -07:00
ACX
82b8e6c906
Increase minimum password length from 6 to 8 characters ( #3207 )
2026-03-06 16:56:56 -07:00
acx10
de796556b5
Renormalize gradlew.bat line endings to CRLF
2026-03-06 10:43:44 -07:00
dependabot[bot]
26fecf7f40
chore(deps): bump the gradle-dependencies group ( #3188 )
...
Bumps the gradle-dependencies group in /booklore-api with 5 updates:
| Package | From | To |
| --- | --- | --- |
| org.flywaydb:flyway-mysql | `12.0.2` | `12.0.3` |
| [org.springdoc:springdoc-openapi-starter-webmvc-ui](https://github.com/springdoc/springdoc-openapi ) | `3.0.1` | `3.0.2` |
| [org.tukaani:xz](https://github.com/tukaani-project/xz-java ) | `1.11` | `1.12` |
| org.hibernate.orm | `7.2.5.Final` | `7.2.6.Final` |
| gradle-wrapper | `9.3.1` | `9.4.0` |
Updates `org.flywaydb:flyway-mysql` from 12.0.2 to 12.0.3
Updates `org.springdoc:springdoc-openapi-starter-webmvc-ui` from 3.0.1 to 3.0.2
- [Release notes](https://github.com/springdoc/springdoc-openapi/releases )
- [Changelog](https://github.com/springdoc/springdoc-openapi/blob/v3.0.2/CHANGELOG.md )
- [Commits](https://github.com/springdoc/springdoc-openapi/compare/v3.0.1...v3.0.2 )
Updates `org.tukaani:xz` from 1.11 to 1.12
- [Release notes](https://github.com/tukaani-project/xz-java/releases )
- [Changelog](https://github.com/tukaani-project/xz-java/blob/master/NEWS.md )
- [Commits](https://github.com/tukaani-project/xz-java/compare/v1.11...v1.12 )
Updates `org.hibernate.orm` from 7.2.5.Final to 7.2.6.Final
Updates `gradle-wrapper` from 9.3.1 to 9.4.0
---
updated-dependencies:
- dependency-name: org.flywaydb:flyway-mysql
dependency-version: 12.0.3
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: gradle-dependencies
- dependency-name: org.springdoc:springdoc-openapi-starter-webmvc-ui
dependency-version: 3.0.2
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: gradle-dependencies
- dependency-name: org.tukaani:xz
dependency-version: '1.12'
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: gradle-dependencies
- dependency-name: org.hibernate.orm
dependency-version: 7.2.6.Final
dependency-type: direct:production
update-type: version-update:semver-patch
dependency-group: gradle-dependencies
- dependency-name: gradle-wrapper
dependency-version: 9.4.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: gradle-dependencies
...
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-06 10:28:34 -07:00
ACX
1ad1aa6a73
Fix Kobo sync failure caused by null root in magic shelf rule evaluation ( #3074 ) ( #3178 )
2026-03-04 23:28:49 -07:00
ACX
9c249fff1d
Replace arrow-based author reordering with CDK drag chips and persist author sort order ( #3167 ) ( #3175 )
2026-03-04 18:29:53 -07:00
ACX
3ff8f0f69f
Fix Kobo sync timeout with large magic shelves ( #3172 ) ( #3173 )
...
* overhaul OIDC: backend token exchange, security hardening, group mapping, session management
* add unit tests for OIDC overhaul (166 tests across 12 classes)
* rewrite unit tests for metadata and extractor packages (~450 tests)
* fix Kobo sync timeout with large magic shelves (#3172 )
2026-03-04 15:11:20 -07:00
Pedro Nave
f8375f03f3
feat(hardcover): get Hardcover metadata from a specific edition when ISBN is provided ( #2678 )
...
* fix: clean ISBN should allow ISBNs to have an X at the end
* hardcover mood filter overload for just list of tags
* When ISBN is given, fetch the book directly by the edition with that ISBN, and provide metadata from that edition
* chore: improved formatting
* PR improvements
* replaced CachedTag with GraphQL specific class
* moved hardcover cached tag to shared model
2026-03-04 14:48:22 -07:00
arjunsrinivasan1997
be04df6a11
fix(api):Remove unused TaskType file ( #2789 )
2026-03-04 14:46:38 -07:00
Ilya Shaplyko
463ff3eae5
fix(metadata): ensure EPUB version-aware metadata writing ( #2998 )
...
* fix(metadata): ensure EPUB version-aware metadata writing
EpubMetadataWriter unconditionally wrote EPUB3-only constructs into
all EPUB files regardless of version, producing invalid OPF documents
for EPUB3 files (e.g. opf:file-as/opf:role attributes on dc:creator)
and writing EPUB3-only elements into EPUB2 files.
Changes:
- createCreatorElement: EPUB3 uses <meta refines="#id"> for file-as/role;
EPUB2 uses opf: attributes on dc:creator
- addFolderContentsToZip: mimetype is now STORED (uncompressed) and
written as the first ZIP entry per EPUB spec
- replaceBelongsToCollection: EPUB3 uses belongs-to-collection with
refines; EPUB2 uses calibre:series/calibre:series_index convention
- addSubtitleToTitle: EPUB3 uses separate dc:title with title-type
refinement; EPUB2 stores subtitle via booklore:subtitle metadata only
- addBookloreMetadata/createBookloreMetaElement: EPUB3 uses property
attribute with prefix; EPUB2 uses name/content attribute form
- removeAllBookloreMetadata: now handles both EPUB3 property and EPUB2
name attributes
- cleanupCalibreArtifacts: preserves calibre:series and
calibre:series_index metas used for EPUB2 series
- organizeMetadataElements: correctly categorizes EPUB2-style series
and booklore metas into their respective buckets
- addBookloreMetadata: writes booklore:subtitle for round-trip fidelity
- Added isEpub3() helper method
Closes #2997
* fix(metadata): address review feedback for EPUB version-aware writing
- Only preserve calibre:series/calibre:series_index for EPUB2 in
cleanupCalibreArtifacts; EPUB3 files now properly remove stale entries
- Use isEpub3() helper in createCreatorElement instead of inline detection
- Add trim() to isEpub3() to handle whitespace in version attribute
- Log warning when mimetype file is missing from extracted EPUB
2026-03-04 14:37:58 -07:00
ACX
52e312f67e
fix flaky thisPeriod month test on 1st of month ( #3130 )
2026-02-28 22:14:54 -07:00
ACX
4956e8ae40
turn off auto book search by default, only trigger on search tab ( #3127 )
2026-02-28 21:56:41 -07:00
acx10
a1666932cb
feat(mobile): add author and series endpoints
2026-02-28 18:39:52 -07:00
Jadehawk
e26ac45ae9
fix(epub): restore Calibre extraction, add age/content rating, fix BookDrop metadata loss ( #3114 )
...
Restores and extends the EPUB metadata extraction work from PR #1879
with additional fixes for field mapping gaps found in the processor,
BookDrop finalization, and JSON sidecar.
EPUB Metadata Extractor (EpubMetadataExtractor.java)
- Restore Calibre user_metadata iteration that was regressed: now
iterates <calibre:user_metadata> elements and maps custom columns
via CALIBRE_FIELD_MAPPINGS
- Add #age_rating and #content_rating to CALIBRE_FIELD_MAPPINGS
so Calibre-managed rating/rating string fields are imported
- Add CALIBRE_IDENTIFIER_PREFIXES map for calibre: identifier
fallback (hardcover_book, lubimyczytac, ranobedb, etc.)
- Support both read paths: booklore: namespace (round-trip) and
Calibre user_metadata (first import from Calibre library)
- Validate age_rating values against VALID_AGE_RATINGS whitelist
EPUB Metadata Writer (EpubMetadataWriter.java)
- Write booklore:age_rating and booklore:content_rating to the
OPF so values survive a round-trip rescan
Metadata Change Detector (MetadataChangeDetector.java)
- Mark ageRating and contentRating as includedInFileWrite=true so
saving either field triggers a write-back to the EPUB file
EPUB Processor (EpubProcessor.java)
- Map extracted ageRating and contentRating from BookMetadata DTO
into BookMetadataEntity in setBookMetadata(); these two lines were
the silent reason values never reached the DB on library scan
BookDrop Service (BookDropService.java)
- Change processMovedFile() from REPLACE_ALL to REPLACE_WHEN_PROVIDED
when applying bookdrop review metadata after file extraction.
REPLACE_ALL unconditionally calls the setter even with null, wiping
ageRating/contentRating that EpubProcessor just extracted from the
file. REPLACE_WHEN_PROVIDED skips null fields and preserves the
file-extracted values when the bookdrop review form does not submit
those fields.
JSON Sidecar (SidecarIdentifiers.java, SidecarMetadataMapper.java)
- Add missing hardcoverBookId field to SidecarIdentifiers DTO
- Write hardcoverBookId in buildIdentifiers() (toSidecarMetadata path)
- Read hardcoverBookId in toBookMetadata() (sidecar import path)
All other identifiers were already present; hardcoverBookId was the
only one absent from all three locations simultaneously.
Tests (EpubMetadataExtractorTest.java)
- Add comprehensive test coverage for both extraction paths:
booklore: namespace (round-trip) and Calibre user_metadata/
identifier extraction including age_rating and content_rating
2026-02-28 16:15:55 -07:00
blitzar3k
a3a973024c
fix: Populate ASIN field from Audible metadata search results ( #2974 ) ( #2985 )
...
Co-authored-by: blitzar3k <263961889+blitzar3k@users.noreply.github.com >
2026-02-28 15:17:39 -07:00
ACX
0c5c22ab0c
fix thumbnail missing-file test to assert ClassPathResource ( #3121 )
2026-02-28 14:56:11 -07:00
acx10
7decb9947b
Merge branch 'develop' into mobile-library-allowed-formats-and-thumbnail-fix
...
* develop:
Translations update from Hosted Weblate (#3113 )
2026-02-28 14:36:38 -07:00
ACX
baed4002c7
Translations update from Hosted Weblate ( #3113 )
...
* fix: add DISTINCT to magic shelf specification to prevent duplicate rows
JOINs on multi-valued associations (authors, tags, shelves) produced
duplicate BookEntity rows, causing paginated results to contain fewer
unique books than the requested page size.
* Translated using Weblate (Indonesian)
Currently translated at 50.0% (3 of 6 strings)
Translation: BookLore/App
Translate-URL: https://hosted.weblate.org/projects/booklore/app/id/
* Translated using Weblate (Indonesian)
Currently translated at 1.2% (1 of 80 strings)
Translation: BookLore/Settings Naming
Translate-URL: https://hosted.weblate.org/projects/booklore/settings-naming/id/
* Translated using Weblate (Indonesian)
Currently translated at 1.8% (3 of 166 strings)
Translation: BookLore/Reader Ebook
Translate-URL: https://hosted.weblate.org/projects/booklore/reader-ebook/id/
* Translated using Weblate (Indonesian)
Currently translated at 15.7% (3 of 19 strings)
Translation: BookLore/Series Browser
Translate-URL: https://hosted.weblate.org/projects/booklore/series-browser/id/
* Translated using Weblate (Indonesian)
Currently translated at 24.0% (39 of 162 strings)
Translation: BookLore/Settings Reader
Translate-URL: https://hosted.weblate.org/projects/booklore/settings-reader/id/
* Translated using Weblate (Indonesian)
Currently translated at 0.1% (1 of 690 strings)
Translation: BookLore/Book
Translate-URL: https://hosted.weblate.org/projects/booklore/book/id/
* Translated using Weblate (Indonesian)
Currently translated at 10.7% (3 of 28 strings)
Translation: BookLore/Settings Profile
Translate-URL: https://hosted.weblate.org/projects/booklore/settings-profile/id/
* Translated using Weblate (Indonesian)
Currently translated at 6.6% (1 of 15 strings)
Translation: BookLore/Settings Audit Logs
Translate-URL: https://hosted.weblate.org/projects/booklore/settings-audit-logs/id/
* Translated using Weblate (Indonesian)
Currently translated at 1.7% (1 of 57 strings)
Translation: BookLore/Settings Auth
Translate-URL: https://hosted.weblate.org/projects/booklore/settings-auth/id/
* Translated using Weblate (Indonesian)
Currently translated at 7.3% (32 of 438 strings)
Translation: BookLore/Stats User
Translate-URL: https://hosted.weblate.org/projects/booklore/stats-user/id/
* Translated using Weblate (Ukrainian)
Currently translated at 49.3% (80 of 162 strings)
Translation: BookLore/Settings Reader
Translate-URL: https://hosted.weblate.org/projects/booklore/settings-reader/uk/
* Translated using Weblate (Indonesian)
Currently translated at 95.8% (23 of 24 strings)
Translation: BookLore/Common
Translate-URL: https://hosted.weblate.org/projects/booklore/common/id/
* Translated using Weblate (Indonesian)
Currently translated at 1.4% (2 of 140 strings)
Translation: BookLore/Settings Users
Translate-URL: https://hosted.weblate.org/projects/booklore/settings-users/id/
* Translated using Weblate (Indonesian)
Currently translated at 18.2% (23 of 126 strings)
Translation: BookLore/Shared
Translate-URL: https://hosted.weblate.org/projects/booklore/shared/id/
* Translated using Weblate (Indonesian)
Currently translated at 3.8% (2 of 52 strings)
Translation: BookLore/Library Creator
Translate-URL: https://hosted.weblate.org/projects/booklore/library-creator/id/
* Translated using Weblate (Indonesian)
Currently translated at 84.6% (11 of 13 strings)
Translation: BookLore/Settings
Translate-URL: https://hosted.weblate.org/projects/booklore/settings/id/
* Translated using Weblate (Indonesian)
Currently translated at 4.6% (2 of 43 strings)
Translation: BookLore/Layout
Translate-URL: https://hosted.weblate.org/projects/booklore/layout/id/
* Translated using Weblate (Indonesian)
Currently translated at 3.8% (2 of 52 strings)
Translation: BookLore/Dashboard
Translate-URL: https://hosted.weblate.org/projects/booklore/dashboard/id/
* Translated using Weblate (Indonesian)
Currently translated at 1.5% (3 of 188 strings)
Translation: BookLore/Stats Library
Translate-URL: https://hosted.weblate.org/projects/booklore/stats-library/id/
* Translated using Weblate (Indonesian)
Currently translated at 5.2% (2 of 38 strings)
Translation: BookLore/Settings Application
Translate-URL: https://hosted.weblate.org/projects/booklore/settings-application/id/
* Translated using Weblate (Indonesian)
Currently translated at 0.5% (3 of 535 strings)
Translation: BookLore/Metadata
Translate-URL: https://hosted.weblate.org/projects/booklore/metadata/id/
* Translated using Weblate (Slovenian)
Currently translated at 100.0% (38 of 38 strings)
Translation: BookLore/Settings Application
Translate-URL: https://hosted.weblate.org/projects/booklore/settings-application/sl/
* Translated using Weblate (Slovenian)
Currently translated at 100.0% (24 of 24 strings)
Translation: BookLore/Common
Translate-URL: https://hosted.weblate.org/projects/booklore/common/sl/
* Translated using Weblate (Indonesian)
Currently translated at 3.5% (1 of 28 strings)
Translation: BookLore/Settings Library Metadata
Translate-URL: https://hosted.weblate.org/projects/booklore/settings-library-metadata/id/
* Translated using Weblate (Indonesian)
Currently translated at 6.8% (3 of 44 strings)
Translation: BookLore/Reader Audiobook
Translate-URL: https://hosted.weblate.org/projects/booklore/reader-audiobook/id/
* Translated using Weblate (Indonesian)
Currently translated at 20.3% (23 of 113 strings)
Translation: BookLore/Settings View
Translate-URL: https://hosted.weblate.org/projects/booklore/settings-view/id/
* Translated using Weblate (Slovenian)
Currently translated at 100.0% (535 of 535 strings)
Translation: BookLore/Metadata
Translate-URL: https://hosted.weblate.org/projects/booklore/metadata/sl/
* Translated using Weblate (Indonesian)
Currently translated at 100.0% (3 of 3 strings)
Translation: BookLore/Nav
Translate-URL: https://hosted.weblate.org/projects/booklore/nav/id/
* Translated using Weblate (Indonesian)
Currently translated at 2.5% (3 of 118 strings)
Translation: BookLore/Settings Device
Translate-URL: https://hosted.weblate.org/projects/booklore/settings-device/id/
* Translated using Weblate (Indonesian)
Currently translated at 4.5% (1 of 22 strings)
Translation: BookLore/Notebook
Translate-URL: https://hosted.weblate.org/projects/booklore/notebook/id/
* Translated using Weblate (Slovenian)
Currently translated at 100.0% (690 of 690 strings)
Translation: BookLore/Book
Translate-URL: https://hosted.weblate.org/projects/booklore/book/sl/
* Translated using Weblate (Indonesian)
Currently translated at 8.6% (2 of 23 strings)
Translation: BookLore/Auth
Translate-URL: https://hosted.weblate.org/projects/booklore/auth/id/
* Translated using Weblate (Indonesian)
Currently translated at 2.5% (3 of 117 strings)
Translation: BookLore/Settings Email
Translate-URL: https://hosted.weblate.org/projects/booklore/settings-email/id/
* Translated using Weblate (Indonesian)
Currently translated at 75.0% (3 of 4 strings)
Translation: BookLore/Reader Pdf
Translate-URL: https://hosted.weblate.org/projects/booklore/reader-pdf/id/
* Translated using Weblate (Ukrainian)
Currently translated at 79.1% (19 of 24 strings)
Translation: BookLore/Common
Translate-URL: https://hosted.weblate.org/projects/booklore/common/uk/
* Translated using Weblate (Indonesian)
Currently translated at 4.4% (3 of 68 strings)
Translation: BookLore/Settings Opds
Translate-URL: https://hosted.weblate.org/projects/booklore/settings-opds/id/
* Translated using Weblate (Indonesian)
Currently translated at 2.7% (3 of 111 strings)
Translation: BookLore/Reader Cbx
Translate-URL: https://hosted.weblate.org/projects/booklore/reader-cbx/id/
* Translated using Weblate (Indonesian)
Currently translated at 1.2% (1 of 80 strings)
Translation: BookLore/Settings Metadata
Translate-URL: https://hosted.weblate.org/projects/booklore/settings-metadata/id/
* Translated using Weblate (Slovenian)
Currently translated at 100.0% (234 of 234 strings)
Translation: BookLore/Magic Shelf
Translate-URL: https://hosted.weblate.org/projects/booklore/magic-shelf/sl/
* Translated using Weblate (Ukrainian)
Currently translated at 95.6% (22 of 23 strings)
Translation: BookLore/Auth
Translate-URL: https://hosted.weblate.org/projects/booklore/auth/uk/
* Translated using Weblate (Ukrainian)
Currently translated at 100.0% (3 of 3 strings)
Translation: BookLore/Nav
Translate-URL: https://hosted.weblate.org/projects/booklore/nav/uk/
* Translated using Weblate (Ukrainian)
Currently translated at 100.0% (6 of 6 strings)
Translation: BookLore/App
Translate-URL: https://hosted.weblate.org/projects/booklore/app/uk/
* Translated using Weblate (Ukrainian)
Currently translated at 100.0% (13 of 13 strings)
Translation: BookLore/Settings
Translate-URL: https://hosted.weblate.org/projects/booklore/settings/uk/
* Translated using Weblate (Dutch)
Currently translated at 0.7% (5 of 690 strings)
Translation: BookLore/Book
Translate-URL: https://hosted.weblate.org/projects/booklore/book/nl/
* Translated using Weblate (Dutch)
Currently translated at 0.7% (5 of 690 strings)
Translation: BookLore/Book
Translate-URL: https://hosted.weblate.org/projects/booklore/book/nl/
* Translated using Weblate (Ukrainian)
Currently translated at 100.0% (162 of 162 strings)
Translation: BookLore/Settings Reader
Translate-URL: https://hosted.weblate.org/projects/booklore/settings-reader/uk/
* Translated using Weblate (Ukrainian)
Currently translated at 0.8% (1 of 113 strings)
Translation: BookLore/Settings View
Translate-URL: https://hosted.weblate.org/projects/booklore/settings-view/uk/
* Translated using Weblate (Dutch)
Currently translated at 3.3% (23 of 690 strings)
Translation: BookLore/Book
Translate-URL: https://hosted.weblate.org/projects/booklore/book/nl/
---------
Co-authored-by: acx10 <acx10@users.noreply.github.com >
Co-authored-by: Danni <danninov@users.noreply.github.com >
Co-authored-by: vkhvostov <viktor.khvostov@gmail.com >
Co-authored-by: thehijacker <thehijacker@gmail.com >
Co-authored-by: JVT038 <jvt038@pm.me >
Co-authored-by: hiddit <ht13@live.nl >
2026-02-28 14:23:04 -07:00
acx10
485a8b2230
refactor(mobile): use coverUpdatedOn timestamps instead of cover hashes
...
Expose coverUpdatedOn/audiobookCoverUpdatedOn from metadata for
cache busting, matching the webapp's approach. Replaces coverHash
fields which didn't change when thumbnails were regenerated.
2026-02-28 13:57:57 -07:00
acx10
c472e07990
Merge branch 'develop' into mobile-library-allowed-formats-and-thumbnail-fix
...
* develop:
simplify image download SSRF protection, remove broken IP-rewriting approach (#3118 )
Translations update from Hosted Weblate (#3103 )
add ukrainian and indonesian language support (#678 ) (#3102 )
2026-02-28 13:51:09 -07:00
ACX
26497ca790
simplify image download SSRF protection, remove broken IP-rewriting approach ( #3118 )
2026-02-28 13:50:44 -07:00
acx10
d6084e81c4
refactor(mobile): expose cover hashes instead of booleans for cache busting
...
Replace hasCover/hasAudiobookCover booleans with the actual
coverHash/audiobookCoverHash strings. The client uses these as
URL query params so cover updates bust the CachedNetworkImage cache.
2026-02-28 13:39:03 -07:00
acx10
a6647a6cbf
feat(mobile): add hasCover and hasAudiobookCover flags to book DTOs
...
Expose cover existence via bookCoverHash/audiobookCoverHash so the
mobile client can show generated placeholders instead of loading the
server's generic missing-cover image.
2026-02-28 13:32:46 -07:00
acx10
d19fe22d50
add allowedFormats to mobile library endpoint and fix thumbnail classpath fallback
2026-02-28 12:59:20 -07:00
ACX
11dea38267
fix metadata search save clearing age rating and content rating ( #3069 ) ( #3098 )
2026-02-27 18:28:30 -07:00
ACX
251c2c60a8
fix author endpoints leaking authors across library boundaries ( #3077 ) ( #3096 )
2026-02-27 18:14:37 -07:00
Karl Hesselgren
a37cc1d8a3
Add non-lowercased auth header to include list ( #3078 )
2026-02-27 09:19:04 -07:00