Commit Graph

1053 Commits

Author SHA1 Message Date
Mitchell Syer
c9575449da Allow basic auth fallback for OPDS (#1745) 2025-10-26 12:38:02 -04:00
Constantin Piber
3e7c5e2948 Revert "Support sending floats" and convert DoubleFilter to FloatFilter (#1747)
* Revert "[#1739] Support sending floats (#1740)"

This reverts commit c1f2aae90d.

Closes #1746

* Use `DoubleFilter` for GQL interface, convert to `FloatFilter`

Closes #1739 (again)
2025-10-26 12:37:50 -04:00
Constantin Piber
c1f2aae90d [#1739] Support sending floats (#1740)
* [#1739] Support sending floats

Required for `FloatFilter`, which needs to be float due to DB layer

* Simplify `parseValueImpl`, use correct coercion hints
2025-10-24 18:38:41 -04:00
Constantin Piber
9d09a1fe5d [#1596] Dispose KCEF on shutdown (#1738)
* [#1596] Dispose KCEF on shutdown

* Use blocking variant
2025-10-24 18:38:27 -04:00
Constantin Piber
d23d10601e Add --change-stack-guard-on-fork=disable to fix stack smashing (#1736)
* Add --change-stack-guard-on-fork=disable to fix stack smashing

See chromiumembedded/cef#3912

* Add PR comments
2025-10-24 18:38:04 -04:00
Constantin Piber
b4db9ebdb0 Settings generator: Validate that protoNumber is unique (#1735)
This makes specifying an already-used number a compile time error
2025-10-24 18:37:58 -04:00
Zeedif
4011a4c3ee feat(koreader): Set public server as default for KOReader Sync (#1732) 2025-10-24 18:37:22 -04:00
Weblate (bot)
c35dd1a2c7 Weblate translations (#1728)
Translate-URL: https://hosted.weblate.org/projects/suwayomi/suwayomi-server/it/
Translate-URL: https://hosted.weblate.org/projects/suwayomi/suwayomi-server/pl/
Translation: Suwayomi/Suwayomi-Server

Co-authored-by: Gino Cicatiello <ginocic@gmail.com>
Co-authored-by: Kamil Czesny <maczete2@gmail.com>
2025-10-24 18:37:15 -04:00
Constantin Piber
bc6e28cabe OPDS: Offer CBZ in older mimetype (#1731)
* OPDS: Offer CBZ in older mimetype

* OPDS: Include length when offering CBZ download

* Disable compression on CBZ endpoint

Zipping a zip

* CBZ download match content type of OPDS

* Move compression disable

* Introduce setting for configuring CBZ mimetype

* Document new option

[no-ci]

* Update server/src/main/kotlin/suwayomi/tachidesk/opds/impl/OpdsEntryBuilder.kt

Co-authored-by: Mitchell Syer <Syer10@users.noreply.github.com>

---------

Co-authored-by: Mitchell Syer <Syer10@users.noreply.github.com>
2025-10-24 18:36:59 -04:00
Constantin Piber
68492bf591 Actually set Track ID when updating track (#1726) 2025-10-20 13:56:08 -04:00
Constantin Piber
5be4d2a104 Minor bug fixes for Webview, Permission request support (#1723)
* fix: Match URLs with trailing /

* Handle permission requests and attempt to enable Widevine

* Tie CEF loglevel to server debug logs

* Lint

* Add missing file

Forgot to add in previous commits

* Provide WebResourceResponse

* Fix NullException if headers are not set

* fix: Don't allow interception for initial page load

fixes #1713

* Lint
2025-10-17 12:07:18 -04:00
Mitchell Syer
0585000cf3 Fix header/cookie based websocket auth (#1722)
* Fix header/cookie based websocket auth

* Lint
2025-10-17 12:07:02 -04:00
schroda
7b5d96189e Feature/automatic backup flags (#1702)
* Add backup flags to auto backups

* Mark ServerConfig properties as deprecated

---------

Co-authored-by: Mitchell Syer <Syer10@users.noreply.github.com>
2025-10-14 19:40:46 -04:00
schroda
8d119fd710 Feature/cleanup backup logic (#1701)
* Extract global metadata backup logic into BackupGlobalMetaHandler

* Extract category backup logic into BackupCategoryHandler

* Extract source backup logic into BackupSourceHandler

* Extract manga backup logic into BackupMangaHandler
2025-10-14 19:37:29 -04:00
Weblate (bot)
b802c6977a Weblate translations (#1705)
Translate-URL: https://hosted.weblate.org/projects/suwayomi/suwayomi-server/fr/
Translation: Suwayomi/Suwayomi-Server

Co-authored-by: mrintrepide <quentin@intrepide.io>
2025-10-14 19:37:22 -04:00
schroda
0d79ac68f8 Feature/backup import add backup flags (#1697)
* Add backup flags to backup restore

* Cleanup default backup flags handling

* Optionally exclude manga from backup
2025-10-05 18:52:45 -04:00
Constantin Piber
3ce9f72e3f Allow symlinks in static files (#1699) 2025-10-04 15:12:59 -04:00
schroda
9437e4243a Use canonical path for static files directory (#1698)
On mac the temp system folder is a symlink which jetty does not allow by default due to security reasons.
This caused the webui files to not get served on mac.
2025-10-04 15:12:52 -04:00
schroda
f4e32bac1a Clear queued state updates on immediate emission (#1685)
There was a possible race condition where immediate state updates got overwritten by previously queued ones.
For example, when the download was successful but the downloaded files are deemed invalid, a previously queued download progress state update might overwrite the emitted error state.
2025-10-03 10:38:25 -04:00
Constantin Piber
02aada7f08 [#1676] Reorder source pages (#1683)
Some sources don't properly index their pages in some situations, so
follow Mihon and reindex
2025-10-03 10:38:10 -04:00
Mitchell Syer
fb05371ac2 Add way to exclude settings from backups (#1682)
* Add way to exclude settings from backups

* Exclude flaresolverrEnabled

* Exclude usernames/passwords

* Exclude writing deprecated settings to the backup

* Exclude AuthMode
2025-10-03 10:37:50 -04:00
Mitchell Syer
2e0f72f182 Fix database connection and errors (#1681) 2025-09-29 11:24:52 -04:00
schroda
f210bbc22a Setup webUI in background (#1679)
Stops blocking javalin startup in case of internet connection issues
2025-09-29 11:24:45 -04:00
schroda
9062252939 Fix/server config duplicated types (#1672)
* Move "serverConfig" to "server-config" module

* Remove duplicated types

Unintentionally introduced with 8ef2877040
2025-09-29 11:24:26 -04:00
schroda
5c79672d84 Use graphql directive for auth handling (#1671) 2025-09-29 11:24:19 -04:00
schroda
28ab0af6d4 Fix base path injection when serving from root (#1669)
Without having a subpath defined, the base path incorrectly ended with two "/" instead of one
2025-09-25 11:56:19 -04:00
schroda
cdb98d2175 Feature/reduce logging (#1667)
* Reduce Hikari related logging

* Reduce WebView related logging
2025-09-24 18:01:23 -04:00
schroda
d95f4fe1e1 Fix/webui subpath injection (#1666)
* Cleanup subpath handling

* Move webUI serve setup logic to WebInterfaceManager

* Fix webUI subpath injection

Dynamic subpath support on the client requires using relative paths for everything.
Without a <base> tag this only works when opening the client on the root path.
Any subpath will result in a blank page because the used url to request e.g., an asset will be invalid and cause an error (type mismatch, since the index.html will be returned for any unmatch route).
2025-09-24 18:01:13 -04:00
Mitchell Syer
6e2be271c3 Minor DB Fix (#1668)
* Minor DB fix

* Lint
2025-09-24 18:01:04 -04:00
Soner Köksal
bfccbaf731 Optimize database performance with HikariCP and transaction batching (#1660)
* Optimize database performance with HikariCP and transaction batching

- Add HikariCP-7.0.2 connection pooling with Raspberry Pi optimized settings
- Consolidate database transactions in DirName, ChapterForDownload, and ChapterDownloadHelper
- Remove duplicate queries and unused methods from ChapterForDownload
- Batch database operations to reduce transaction overhead
- Add shared query functions to eliminate redundant database calls
- Configure memory settings for build optimization

Performance improvements:
- DirName functions: 99% faster (29s → 0.1s)
- ChapterDownloadHelper: 99.5% faster (54s → 0.3s)
- ChapterForDownload: 97% faster transaction operations
- Overall system: 75% faster execution time (242s → 60s)

* Fix review comments
2025-09-23 15:54:09 -04:00
Soner Köksal
c7b4f226b3 Add server-side subpath support for WebUI (#1658)
* Add server-side subpath support for WebUI

- Add webUISubpath configuration setting with regex validation
- Create temporary WebUI directory for subpath serving
- Inject subpath config into index.html for client detection
- Support all WebUI flavors (WEBUI, VUI, CUSTOM) with subpath
- Update browser opening to use subpath URLs

Related to Suwayomi/Suwayomi-WebUI#174

* Fix review points

* Fix code formatting issues

* Fix import issue
2025-09-23 15:53:53 -04:00
Mitchell Syer
808e0ecae7 Make Sure Backup Create Flags are Exposed (#1650) 2025-09-15 16:45:14 -04:00
Mitchell Syer
fafcaa222c Update Dex2Jar (#1644) 2025-09-15 09:25:20 -04:00
schroda
bbd7e30298 Fix/server startup config update failure handling (#1646)
* Catch config value migration exception

In case the value did not exist in the config a "ConfigException.Missing" exception was thrown which caused the whole migration to fail.

Fixes #1645

* Improve config migration logging

* Update user config file after config update

The user config file gets reset before the update.
This could cause the user settings to get lost on the next server start in case something went wrong during the update and the updated config never got saved to the actual file.
2025-09-14 10:32:23 -04:00
schroda
904157a91a Streamline deprecated settings config value migration logic (#1633)
* Streamline deprecated settings config value migration logic

* Add "autoDownloadAheadLimit" config migration

For consistency

* Replace "exitCode" with "shutdownApp"

* Enhance shutdown logging to include exit reason
2025-09-13 12:22:09 -04:00
renovate[bot]
89e2ba9f75 Update dependency com.pinterest.ktlint:ktlint-cli to v1.7.1 (#1520)
* Update dependency com.pinterest.ktlint:ktlint-cli to v1.7.1

* Lint

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Syer10 <syer10@users.noreply.github.com>
2025-09-13 12:21:49 -04:00
Mitchell Syer
3f4dd2861e Fix pages after refactoring downloads (#1639) 2025-09-09 21:10:27 -04:00
Weblate (bot)
c1a9b158e2 Weblate translations (#1638)
Translate-URL: https://hosted.weblate.org/projects/suwayomi/suwayomi-server/pt/
Translation: Suwayomi/Suwayomi-Server

Co-authored-by: Thiago Alencar <thiago.alcr@gmail.com>
2025-09-09 18:15:08 -04:00
schroda
7db947eba2 Restore server settings first (#1637)
The imported server settings might cause the active database to change.
In case this happens, the backup was restored into the wrong database.
2025-09-09 18:14:47 -04:00
schroda
3df0106325 Fix/logging user sensitive config data in cleartext (#1634)
* Redact username and passwords from config log

* Redact empty username and password

* Make regex Username/Password case-insensitive in config redaction
2025-09-09 18:14:21 -04:00
schroda
2b767eb488 Fix/local manga thumbnails handling (#1630)
* Skip thumbnail download for local manga sources

Local manga sources do not require downloading thumbnails as they are stored locally.

* Always update local source manga info when browsing

When making changes to an in library local source manga, a refresh from the source was required to get the latest data.
From a user perspective, this is unexpected behavior that looks like a bug.

If, for example, the thumbnail file extension got changed, the file could not be found anymore and an error was shown in the client. To fix this, a manga refresh was required.
2025-09-09 18:14:01 -04:00
Mitchell Syer
679e2c0da9 Optimize Download Queue (#1627)
* Optimize download Queue

* Lint

* Fix name of DownloadStatus file

* Re-add synchronous status fetch
2025-09-09 18:13:31 -04:00
Zeedif
275727ed90 feat(kosync): add mutations for manual progress push and pull (#1625)
Exposes the existing push and pull functionality from the KoreaderSyncService via the GraphQL API.

This change introduces two new mutations:
- `pushKoSyncProgress`: Manually sends the current chapter's reading progress to the KOReader sync server.
- `pullKoSyncProgress`: Manually fetches and applies the latest reading progress from the KOReader sync server.

These mutations enable clients and WebUIs to implement manual sync triggers, providing users with more direct control over their reading progress synchronization, similar to the functionality offered by the official KOReader plugin and other clients like Readest.
2025-09-09 18:13:05 -04:00
Zeedif
257e1dd03d refactor(kosync): introduce differentiated sync strategies (#1624)
* refactor(kosync): introduce differentiated sync strategies

Replaces the single `koreaderSyncStrategy` setting with `koreaderSyncStrategyForward` and `koreaderSyncStrategyBackward`. This allows users to define distinct conflict resolution behaviors based on whether the remote progress is newer or older than the local progress.

The `KoreaderSyncStrategy` enum has been simplified to `KoreaderSyncConflictStrategy` with four clear options: `PROMPT`, `KEEP_LOCAL`, `KEEP_REMOTE`, and `DISABLED`. The ambiguous `SILENT` option is removed, as its behavior is now implicitly covered by selecting `KEEP_REMOTE` for forward syncs and `KEEP_LOCAL` for backward syncs.

The legacy `koreaderSyncStrategy` setting is now deprecated and is seamlessly migrated to the new dual-strategy system using `MigratedConfigValue`, ensuring backward compatibility for existing user configurations.

* fix(kosync): correct proto numbers and setting order for sync strategies

* fix(kosync): proto number 78 to 68

* fix(server): migrate KOReader sync strategy during settings cleanup

Add migration logic to convert the old `server.koreaderSyncStrategy` key
into the new `server.koreaderSyncStrategyForward` and
`server.koreaderSyncStrategyBackward` keys during server setup.
2025-09-09 18:12:53 -04:00
Syer10
5bf2a4aed4 Set BackupServerSettings to nullable 2025-09-02 16:34:48 -04:00
Mitchell Syer
dc79b4c90a Support PostgreSQL Databases (#1617)
* Support PostgreSQL Databases

* Set the database Schema

* See if we can test postgres

* Another test

* Disable node container

* Update database when changed

* Simplify test workflow

* Only exit on failed migrations

* Run the first databaseUp sync

* Map the port

* Use absolute path for LD_PRELOAD

* Timeout after 1m

* Open the server in both database configurations

* Only exit on migration failed in ci

* Lint

* Use new ServerConfig configuration
2025-09-02 12:29:09 -04:00
Mitchell Syer
ddedceeded Support null preference keys (#1623) 2025-09-01 17:03:21 -04:00
schroda
8ef2877040 Feature/streamline settings (#1614)
* Cleanup graphql setting mutation

* Validate values read from config

* Generate server-reference.conf files from ServerConfig

* Remove unnecessary enum value handling in config value update

Commit df0078b725 introduced the usage of config4k, which handles enums automatically. Thus, this handling is outdated and not needed anymore

* Generate gql SettingsType from ServerConfig

* Extract settings backup logic

* Generate settings backup files

* Move "group" arg to second position

To make it easier to detect and have it at the same position consistently for all settings.

* Remove setting generation from compilation

* Extract setting generation code into new module

* Extract pure setting generation code into new module

* Remove generated settings files from src tree

* Force each setting to set a default value
2025-09-01 17:02:58 -04:00
Weblate (bot)
11b2a6b616 Weblate translations (#1605)
Translate-URL: https://hosted.weblate.org/projects/suwayomi/suwayomi-server/de/
Translate-URL: https://hosted.weblate.org/projects/suwayomi/suwayomi-server/es/
Translate-URL: https://hosted.weblate.org/projects/suwayomi/suwayomi-server/vi/
Translate-URL: https://hosted.weblate.org/projects/suwayomi/suwayomi-server/zh_Hans/
Translation: Suwayomi/Suwayomi-Server

Co-authored-by: Christian Heinrich <ch.heinrich16@gmail.com>
Co-authored-by: Constantin Piber <cp.piber@gmail.com>
Co-authored-by: Nguyễn Trung Đức <vaicato16@gmail.com>
Co-authored-by: Weblate <allendandstart@gmail.com>
Co-authored-by: zeedif <carlos_antonio-rl@hotmail.com>
2025-09-01 17:02:38 -04:00
Constantin Piber
04ad0033d7 GraphQL directly uses getUserFromToken and expects a valid user for (#1616)
other authentication methods, so re-introduce that check
2025-08-25 06:02:12 -04:00