mirror of
https://github.com/Suwayomi/Suwayomi-Server.git
synced 2026-07-08 05:14:37 -05:00
Compare commits
5 Commits
16a14e6ac2
...
41bb6d3dc1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
41bb6d3dc1 | ||
|
|
fbb383b1f1 | ||
|
|
558407d92c | ||
|
|
6870922784 | ||
|
|
a4b647972e |
13
CHANGELOG.md
13
CHANGELOG.md
@@ -14,11 +14,14 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
|||||||
- (Startup) Crash on startup if an unrecoverable error happens
|
- (Startup) Crash on startup if an unrecoverable error happens
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
- (CloudFlareInterceptor) Don't send the `cf_clearance` cookie back to Flaresolverr
|
- (**CloudFlareInterceptor**) Don't send the `cf_clearance` cookie back to Flaresolverr
|
||||||
- (WebUI) Handle serving non-default webui with "bundled"
|
- (**WebUI**) Handle serving non-default webui with "bundled"
|
||||||
- (WebUI) Wait until WebUI is ready to open in browser
|
- (**WebUI**) Wait until WebUI is ready to open in browser
|
||||||
- (Downloads) Truncate filenames by byte length to prevent "File name too long" IO errors
|
- (**Downloads**) Truncate filenames by byte length to prevent "File name too long" IO errors
|
||||||
- (Extension) Do not indicate an update is available when the extension is not installed
|
- (**Extension**) Do not indicate an update is available when the extension is not installed
|
||||||
|
- (**Chapter**) Fix losing chapter data on failed chapter list update
|
||||||
|
- (**Chapter**) Fix database error when fetching chapter updates
|
||||||
|
- (**Manga/API**) Fix "mangas" graphql query with active sorting and using a postgresql database (QUERY "mangas")
|
||||||
|
|
||||||
## [v2.2.2100] + [WebUI: v20260508.01] - 2026-05-08
|
## [v2.2.2100] + [WebUI: v20260508.01] - 2026-05-08
|
||||||
|
|
||||||
|
|||||||
@@ -1,19 +1,69 @@
|
|||||||
|
# Troubleshooting
|
||||||
|
|
||||||
|
This page is laid out in several sections, where each section describes a specific problem, followed by one or more possible solutions.
|
||||||
|
|
||||||
|
At the end, you will find a General section, which is the nuclear option if nothing else works.
|
||||||
|
|
||||||
|
For further support, visit the [official Suwayomi Discord server](https://discord.gg/DDZdqZWaHA).
|
||||||
|
In such cases, it will be helpful to have logs ready. You can find them in [The Data Directory](./The-Data-Directory) in the logs directory.
|
||||||
|
|
||||||
|
**All steps below assume that you have stopped Suwayomi**.
|
||||||
|
|
||||||
|
|
||||||
|
## Broken database
|
||||||
|
|
||||||
|
- `failed due to
|
||||||
|
org.jetbrains.exposed.exceptions.ExposedSQLException: org.h2.jdbc.JdbcSQLSyntaxErrorException: Column "CATEGORY.SORT_ORDER" not found`
|
||||||
|
- `org.h2.jdbc.JdbcSQLSyntaxErrorException: Column "CHAPTER.KOREADER_HASH" not found`
|
||||||
|
- `java.lang.IllegalStateException: Unable to read the page at position 96170708817765466`
|
||||||
|
- Any other error text that includes "SQL Statement"
|
||||||
|
|
||||||
|
Your database is either corrupted or incompatible.
|
||||||
|
|
||||||
|
One of these is the cause:
|
||||||
|
- You were running a preview version and decided to downgrade to stable.
|
||||||
|
- You did not shut down Suwayomi properly.
|
||||||
|
- Suwayomi crashed in an unexpected way.
|
||||||
|
|
||||||
|
Solutions:
|
||||||
|
- If you downgraded, upgrade to preview again.
|
||||||
|
- Otherwise, you will need to reset and restore from a backup. See [General Troubleshooting](#general-troubleshooting) below.
|
||||||
|
|
||||||
|
|
||||||
|
## `HTTP error 429`
|
||||||
|
|
||||||
|
The source (or, if trackers are enabled, possibly the tracker) has blocked you for sending too many requests.
|
||||||
|
Note that Mass-Migration can result in an unexpectedly high number of requests to both the source and any configured trackers.
|
||||||
|
|
||||||
|
Solution: Use other/more sources, download less, and wait between request-heavy actions.
|
||||||
|
|
||||||
|
|
||||||
|
## Extension times out
|
||||||
|
|
||||||
|
- `Timed out waiting for 20000 ms…`
|
||||||
|
- `Timed out waiting for page list`
|
||||||
|
|
||||||
|
First, check if this is an extension issue or a Suwayomi issue.
|
||||||
|
On the manga page of the problematic entry, click "Open in WebView".
|
||||||
|
|
||||||
|
Solutions:
|
||||||
|
- If the WebView loads: The issue is with the extension. Search [the issues](https://github.com/Suwayomi/Suwayomi-Server/issues) and discord if there are known problems with that extension.
|
||||||
|
- If the WebView errors: Go to [The Data Directory](./The-Data-Directory) and remove the `bin` and `cache` folders.
|
||||||
|
- If the WebView still does not work after a restart, your installation is incomplete. On Linux, refer to [the README](https://github.com/Suwayomi/Suwayomi-Server#webview-support-gnulinux).
|
||||||
|
|
||||||
|
|
||||||
## General Troubleshooting
|
## General Troubleshooting
|
||||||
This guide will try to fix Suwayomi by reseting it to a clean installation state.
|
This guide will try to fix Suwayomi by reseting it to a clean installation state.
|
||||||
|
|
||||||
|
> [!WARNING]
|
||||||
|
> This will remove all your data, including the library.
|
||||||
|
> Make sure you have copied your backups as described above!
|
||||||
|
|
||||||
- Make sure you have a recent backup of your library or create one in the app (if possible) because we **are going to wipe all Suwayomi data**.
|
- Make sure you have a recent backup of your library or create one in the app (if possible) because we **are going to wipe all Suwayomi data**.
|
||||||
- Make sure Suwayomi is not running (right click on tray icon and quit or kill it through the way your Operating System provides)
|
- Make sure Suwayomi is not running (right click on tray icon and quit or kill it through the way your Operating System provides)
|
||||||
- Clear all browsing data on your browser if you use Suwayomi from a browser.
|
- Clear all browsing data on your browser if you use Suwayomi from a browser.
|
||||||
- Delete the Suwayomi data directory located below and re-run the app.
|
- Delete the Suwayomi data directory located below and re-run the app. See the article [The Data Directory](./The-Data-Directory) for information on how to find it.
|
||||||
|
- If you wish to keep your downloads, you may also attempt to surgically remove only parts. You will need to remove `database.mv.db`, `database.trace.db`, `bin`, `cache`, `extensions`, `settings`, `webUI`. Removing only a subset of these files and folders may fail to resolve the problem.
|
||||||
Note: Replace `<Account>` with the currently logged in account/username on your pc.
|
- Open Suwayomi and go to Settings > Backup > Restore Backup, and select the latest backup you have.
|
||||||
|
- Restoring from backup does not restore your downloads. If you chose to keep them in the above step, you will now need to re-download all manga. Suwayomi will pick up on the existing files and not actually download anything that isn't new.
|
||||||
On Mac OS X : `/Users/<Account>/Library/Application Support/Tachidesk`
|
|
||||||
|
|
||||||
On Windows XP : `C:\Documents and Settings\<Account>\Application Data\Local Settings\Tachidesk`
|
|
||||||
|
|
||||||
On Windows 7 and later : `C:\Users\<Account>\AppData\Local\Tachidesk`
|
|
||||||
|
|
||||||
On Unix/Linux : `/home/<account>/.local/share/Tachidesk`
|
|
||||||
|
|
||||||
- In the case that you have to periodically perform this fix or the problem persists or the method failed to fix it, open an issue or Join the [Suwayomi discord server](https://discord.gg/DDZdqZWaHA) to hang out with the community and to receive support and help.
|
- In the case that you have to periodically perform this fix or the problem persists or the method failed to fix it, open an issue or Join the [Suwayomi discord server](https://discord.gg/DDZdqZWaHA) to hang out with the community and to receive support and help.
|
||||||
|
|||||||
@@ -15,9 +15,11 @@ import org.jetbrains.exposed.v1.core.Op
|
|||||||
import org.jetbrains.exposed.v1.core.SortOrder
|
import org.jetbrains.exposed.v1.core.SortOrder
|
||||||
import org.jetbrains.exposed.v1.core.greater
|
import org.jetbrains.exposed.v1.core.greater
|
||||||
import org.jetbrains.exposed.v1.core.inList
|
import org.jetbrains.exposed.v1.core.inList
|
||||||
|
import org.jetbrains.exposed.v1.core.inSubQuery
|
||||||
import org.jetbrains.exposed.v1.core.less
|
import org.jetbrains.exposed.v1.core.less
|
||||||
import org.jetbrains.exposed.v1.core.like
|
import org.jetbrains.exposed.v1.core.like
|
||||||
import org.jetbrains.exposed.v1.jdbc.select
|
import org.jetbrains.exposed.v1.jdbc.select
|
||||||
|
import org.jetbrains.exposed.v1.jdbc.selectAll
|
||||||
import org.jetbrains.exposed.v1.jdbc.transactions.transaction
|
import org.jetbrains.exposed.v1.jdbc.transactions.transaction
|
||||||
import suwayomi.tachidesk.graphql.directives.RequireAuth
|
import suwayomi.tachidesk.graphql.directives.RequireAuth
|
||||||
import suwayomi.tachidesk.graphql.queries.filter.BooleanFilter
|
import suwayomi.tachidesk.graphql.queries.filter.BooleanFilter
|
||||||
@@ -243,13 +245,16 @@ class MangaQuery {
|
|||||||
): MangaNodeList {
|
): MangaNodeList {
|
||||||
val queryResults =
|
val queryResults =
|
||||||
transaction {
|
transaction {
|
||||||
val res =
|
val mangaIdsQuery =
|
||||||
MangaTable
|
MangaTable
|
||||||
.leftJoin(CategoryMangaTable)
|
.leftJoin(CategoryMangaTable)
|
||||||
.select(MangaTable.columns)
|
.select(MangaTable.id)
|
||||||
.withDistinctOn(MangaTable.id)
|
.withDistinct()
|
||||||
|
|
||||||
res.applyOps(condition, filter)
|
mangaIdsQuery.applyOps(condition, filter)
|
||||||
|
|
||||||
|
val res =
|
||||||
|
MangaTable.selectAll().where { MangaTable.id inSubQuery mangaIdsQuery }
|
||||||
|
|
||||||
if (order != null || orderBy != null || (last != null || before != null)) {
|
if (order != null || orderBy != null || (last != null || before != null)) {
|
||||||
val baseSort = listOf(MangaOrder(MangaOrderBy.ID, SortOrder.ASC))
|
val baseSort = listOf(MangaOrder(MangaOrderBy.ID, SortOrder.ASC))
|
||||||
|
|||||||
@@ -262,16 +262,14 @@ object Chapter {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// we got some clean up due
|
transaction {
|
||||||
if (chaptersIdsToDelete.isNotEmpty()) {
|
// we got some clean up due
|
||||||
DownloadManager.dequeue(chaptersIdsToDelete)
|
if (chaptersIdsToDelete.isNotEmpty()) {
|
||||||
transaction {
|
DownloadManager.dequeue(chaptersIdsToDelete)
|
||||||
PageTable.deleteWhere { chapter inList chaptersIdsToDelete }
|
PageTable.deleteWhere { chapter inList chaptersIdsToDelete }
|
||||||
ChapterTable.deleteWhere { id inList chaptersIdsToDelete }
|
ChapterTable.deleteWhere { id inList chaptersIdsToDelete }
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
transaction {
|
|
||||||
if (chaptersToInsert.isNotEmpty()) {
|
if (chaptersToInsert.isNotEmpty()) {
|
||||||
ChapterTable
|
ChapterTable
|
||||||
.batchInsert(chaptersToInsert) { chapter ->
|
.batchInsert(chaptersToInsert) { chapter ->
|
||||||
@@ -287,6 +285,7 @@ object Chapter {
|
|||||||
this[ChapterTable.isRead] = false
|
this[ChapterTable.isRead] = false
|
||||||
this[ChapterTable.isBookmarked] = false
|
this[ChapterTable.isBookmarked] = false
|
||||||
this[ChapterTable.isDownloaded] = false
|
this[ChapterTable.isDownloaded] = false
|
||||||
|
this[ChapterTable.pageCount] = -1
|
||||||
|
|
||||||
// is recognized chapter number
|
// is recognized chapter number
|
||||||
if (chapter.chapterNumber >= 0f && chapter.chapterNumber in deletedChapterNumbers) {
|
if (chapter.chapterNumber >= 0f && chapter.chapterNumber in deletedChapterNumbers) {
|
||||||
|
|||||||
Reference in New Issue
Block a user