* Non-Extension Index changes for 1.6
* Changelog
* Minor fixes
* Implement extension store
* Test build fix
* Docs
* Simplify fetching manga and chapters
* Use EMPTY JsonObject
* Update docs/Configuring-Suwayomi‐Server.md
Co-authored-by: Constantin Piber <59023762+cpiber@users.noreply.github.com>
* Improve Fetch Extension Store
* Fixes
* Simplify deprecated isNsfw in SourceQuery
* Simplify ContentRating in Source.kt
* Simplify isNsfw in SourceType
* No magic numbers for ContentRating, improves safety for future versions of extension api
* Fix SearchTest
* Lint
* Lint
* Optimize imports and fix unchecked cast warning
* Proper extension store queries
* Optimize import fixes
* Add ContentRatingFilter
* Improve extension store sync
* fix: re-sync (#2121)
* Lint
* Add ExtenionStores to the fetchExtensions result since its possible for the stores to change.
* Use a single version of ContentRating
* Exclude ServerConfig.extensionStores from GraphQL
* Use syncDbToPrefs in ExtensionStoreMutation
* Optimize Imports
* Update server/server-config/src/main/kotlin/suwayomi/tachidesk/server/ServerConfig.kt
Co-authored-by: Constantin Piber <59023762+cpiber@users.noreply.github.com>
* Remove replaceWith and add specific description for GQL APIs
* Include OkHttp ZSTD
* Update to latest Mihon extension lib
* Fix latest Mihon Extension Lib
* Lint
* Optimize imports
* Lint
* Review fixes
* Add a index to extesnion table store url
* Lint
---------
Co-authored-by: Constantin Piber <59023762+cpiber@users.noreply.github.com>
* feat(opds): add option to skip chapter metadata feed
Introduces a new server configuration `server.opdsSkipChapterMetadataFeed` (default: false).
When enabled, the OPDS chapter feed generates direct acquisition (CBZ download) and streaming (OPDS-PSE) links within the chapter list entries, bypassing the intermediate metadata subsection. This streamlines the user experience and improves compatibility with OPDS clients like KOReader that rely on direct links for automated downloading features.
* fix: lint
* fix(opds): enrich chapter data and refine sync logic for skip-metadata mode
Refines the `opdsSkipChapterMetadataFeed` implementation to ensure necessary data is available for direct links and handles synchronization logic appropriate for a list view.
- **Refactor ChapterForDownload:** Extract `refreshChapterPageList` and `updateChapterPersistence` to allow reusing page count verification logic outside the download flow.
- **Enrich Chapter Repository:** When skipping metadata, asynchronously verify page counts and calculate CBZ file sizes for chapters in the list. This ensures direct stream/download links are valid even if the chapter wasn't previously fully indexed.
- **KoSync Logic:** Implement synchronization logic in `OpdsEntryBuilder`. Since the user cannot be prompted in the chapter list view, `PROMPT` conflicts are explicitly ignored (prioritizing local progress), while updates are applied if non-conflicting.
- **OPDS Attributes:** Add `length` (file size) to acquisition links and ensure download links only appear for actually downloaded chapters.
- **Documentation:** Update `server.conf` description to clarify KoSync behavior in this mode.
* feat(download): improve chapter download filenames
* feat(opds): append language to source names
* feat(opds): handle empty chapter titles
* fix import org.jetbrains.exposed.v1.core.inList
* refactor(opds): reorganize API routes and update facet count calculations based on active filters
- **API Routing & Controllers**: Reorganize OPDS v1.2 route paths into logical groups in `OpdsAPI`. Centralize request filter extraction into `OpdsMangaFilter.fromContext`.
- **Facet Counting**: Extract `Query.applyOpdsMangaFilter` to apply active filters to facet and navigation queries. Pass the active filters to `NavigationRepository` and `MangaRepository` count queries (using `excludeField` to calculate sibling counts). This ensures category, source, language, status, and genre counts (`thr:count`) are accurately computed based on active selections.
- **Pagination**: Add pagination support to computed navigation feeds in `NavigationRepository` ( statuses and content languages).
- **Builders**: Standardize parameter ordering in `FeedBuilderInternal` and `OpdsEntryBuilder` constructors. Simplify pagination and facet link URL generation.
* fix(opds): remove redundant filter logic to avoid duplicate HAVING clauses
Resolve IllegalStateException crash caused by applying content filters twice in MangaRepository. Filtering is now handled exclusively by `applyOpdsMangaFilter`, allowing `applyMangaLibrarySort` to focus solely on ordering operations.
* revert(download): restore original CBZ filename scheme
* refactor(opds): simplify persistence updates and clean up chapter mapping
- Simplify page count and download checks in ChapterForDownload
- Clean up enriched chapter mapping in ChapterRepository to improve readability
* fix(opds): retrieve chapter archive size without leaving stream open
* perf(opds): avoid redundant DB query when refreshing chapter page list
Both filters were inversed. `notAll` did what `notAny` was supposed to do and vise versa
Co-authored-by: Mitchell Syer <Syer10@users.noreply.github.com>
* Switch to JCEF
This is a full implementation, but it does not yet include downloading
CEF as KCEF did
* Download CEF automatically
* Handle and propagate CEF init errors
* Lint
* Simplify jcef version extract
* CEF: Download async
* Copy StartupAsync to support handling errors
Startup failures are simply swallowed, since they are recorded in the
future, but there is no way to get that exception
* CEF: Search for release file recursively
On Mac, the file is buried a bit deeper than first level, like on Win
and Linux
* KcefWebViewProvider: Suppress deprecation
We need to send those events, even if they are deprecated
* Update readme
* Optimize imports
* Suggestion
Co-authored-by: Mitchell Syer <syer10@users.noreply.github.com>
* Refactor: stick to `Path` instead of `File`
Also extracts the downloading of CEF to a separate method
* Lint
* Support disabling CEF
Co-authored-by: Kolby Moroz Liebl <31669092+kolbyml@users.noreply.github.com>
* Move JBR version to build constants
Allows embedding into Manifest so docker can later extract the proper version
* Create test to verify JCEF dependency matches downloaded JBR
* Update server/src/main/kotlin/suwayomi/tachidesk/server/util/CEFManager.kt
Co-authored-by: Mitchell Syer <Syer10@users.noreply.github.com>
* Apply suggestions from code review
Co-authored-by: Mitchell Syer <Syer10@users.noreply.github.com>
* Fix compile, apply Path suggestions
* Download progress
* Lint
* Fix exception on non-posix
* Delete recursively
Others can be non-empty
* Support disabling CEF at will
Not really functional, but nice
* Fix test
* Exclude masstest unless explicitly requested
* PR-CI: Run tests
* Add Changelog entry
---------
Co-authored-by: Mitchell Syer <syer10@users.noreply.github.com>
Co-authored-by: Kolby Moroz Liebl <31669092+kolbyml@users.noreply.github.com>
* Fix renaming manga download dir
* Simplify manga download dir rename function
---------
Co-authored-by: Mitchell Syer <Syer10@users.noreply.github.com>
The deletion of chapter data was done in its own transaction. Thus, when the update or insertion failed later on, the deletion was not rolled back
fixes#2031
Co-authored-by: Mitchell Syer <Syer10@users.noreply.github.com>
* Reset update-flag on uninstall
If there is an update available when the extension is uninstalled, the
table will still have the update flag, which makes no sense if it is not
installed.
Example:
```
{
"pkgName": "eu.kanade.tachiyomi.extension.en.comix",
"name": "Comix",
"lang": "en",
"versionCode": 20,
"versionName": "1.4.20",
"iconUrl": "/api/v1/extension/icon/tachiyomi-en.comix-v1.4.20.apk",
"repo": "<hidden>",
"isNsfw": true,
"isInstalled": false,
"isObsolete": false,
"hasUpdate": true,
"__typename": "ExtensionType"
},
```
* Update changelog
* Standardize toSqlName
* Rename Meta Key db field since KEY is now a reserved name in H2
* Changelog entry
* Use toSqlName
* Forgot this key
* Catch any exception