Giter VIP home page Giter VIP logo

tachidesk-server's Introduction

Build Stable Preview Support Server
CI stable release preview Discord

Table of Content

What is Suwayomi?

drawing

A free and open source manga reader server that runs extensions built for Tachiyomi.

Suwayomi is an independent Tachiyomi compatible software and is not a Fork of Tachiyomi.

Suwayomi-Server is as multi-platform as you can get. Any platform that runs java and/or has a modern browser can run it. This includes Windows, Linux, macOS, chrome OS, etc. Follow Downloading and Running the app for installation instructions.

Ability to sync with Tachiyomi is a planned feature, for more info look here.

Suwayomi client projects

You need a client/user interface app as a front-end for Suwayomi-Server, if you Directly Download Suwayomi-Server you'll get a bundled version of Suwayomi-WebUI with it.

Here's a list of known clients/user interfaces for Suwayomi-Server:

Actively Developed Clients
  • Suwayomi-WebUI: The web/ElectronJS front-end that Suwayomi-Server ships with by default.
  • Tachidesk-JUI: The native desktop front-end for Suwayomi-Server. Currently, the most advanced.
  • Tachidesk-Sorayomi: A Flutter front-end for Desktop(Linux, windows, etc.), Web and Android with a User Interface inspired by Tachiyomi.
  • Tachidesk-VaadinUI: A Web front-end for Suwayomi-Server built with Vaadin.
  • Suwayomi-VUI: A preview focused web frontend built with svelte with some features the other UIs might not have (migration)
Inctive/Abandoned Clients
  • Tachidesk-qtui: A C++/Qt front-end for mobile devices(Android/linux), feature support is basic.
  • Tachidesk-GTK: A native Rust/GTK desktop client.
  • Equinox: A web user interface made with Vue.js.

Is this application usable? Should I test it?

Here is a list of current features:

  • Installing and executing Tachiyomi's Extensions, So you'll get the same sources
  • A library to save your mangas and categories to put them into
  • Searching and browsing installed sources
  • Ability to download Manga for offline read
  • Backup and restore support powered by Tachiyomi-compatible Backups
  • Viewing latest updated chapters.

Note: These are capabilities of Suwayomi-Server, the actual working support is provided by each front-end app, checkout their respective readme for more info.

Downloading and Running the app

Using Operating System Specific Bundles

To facilitate the use of Suwayomi we provide bundle releases that include The Java Runtime Environment, ElectronJS and the Suwayomi-Launcher.

If a bundle for your operating system or cpu architecture is not provided then refer to Advanced Methods

Windows

Download the latest win32(Windows 32-bit) or win64(Windows 64-bit) release from the releases section or a preview one from the preview repository.

Unzip the downloaded file and double-click on one of the launcher scripts.

macOS

Download the latest macOS-x64(older macOS systems) or macOS-arm64(Apple M1 and newer) release from the releases section or a preview one from the preview repository.

Unzip the downloaded file and double-click on one of the launcher scripts.

GNU/Linux

Download the latest linux-x64(x86_64) release from the releases section or a preview one from the preview repository.

tar xvf the downloaded file and double-click on one of the launcher scripts or run them using the terminal.

Other methods of getting Suwayomi

Arch Linux

You can install Suwayomi from the AUR:

yay -S tachidesk

Debian/Ubuntu

Download the latest deb package from the release section or Install from the MPR

git clone https://mpr.makedeb.org/suwayomi-server.git
cd suwayomi-server
makedeb -si

Ubuntu

sudo add-apt-repository ppa:suwayomi/suwayomi-server
sudo apt update
sudo apt install suwayomi-server

Docker

Check our Official Docker release Suwayomi Container for running Suwayomi Server in a docker container. Source code for our container is available at docker-tachidesk. By default, the server will be running on http://localhost:4567 open this url in your browser.

Install from the command line:

    $ docker pull ghcr.io/suwayomi/tachidesk

Run Container from the command line:

    $ docker run -p 4567:4567 ghcr.io/suwayomi/tachidesk

Advanced Methods

Running the jar release directly

In order to run the app you need the following:

  • The jar release of Suwayomi-Server
  • The Java Runtime Environment(JRE) 8 or newer
  • A Browser like Google Chrome, Firefox, Edge, etc.
  • ElectronJS (optional)

Download the latest .jar release from the releases section or a preview jar build from the preview repository.

Make sure you have The Java Runtime Environment installed on your system, Double-click on the jar file or run java -jar Suwayomi-Server-vX.Y.Z-rxxxx.jar from a Terminal/Command Prompt window to run the app which will open a new browser window automatically.

Using Suwayomi Remotely

You can run Suwayomi on your computer or a server and connect to it remotely through one of our clients or the bundled web interface with a web browser. This method of using Suwayomi is requiring a bit of networking/firewall/port forwarding/server configuration/etc. knowledge on your side, if you can run a Minecraft server and configure it, then you are good to go.

Check out this wiki page for a guide on configuring Suwayomi-Server.

If you face issues with your setup then we are happy to provide help, just join our discord server(a discord badge is on the top of the page, you are just a click-clack away!).

Syncing With Tachiyomi

The Suwayomi extension and tracker

  • You can install the Suwayomi extension inside tachiyomi.
  • The extension will load your Suwayomi library.
  • By manipulating extension search filters you can browse your categories.
  • You can enable the Suwayomi tracker to track reading progress with your Suwayomi server.
    • Note: Tachiyomi only allows tracking one way, meaning that by reading chapters on other Suwayomi clients the last read chapter number will update on the tracker but tachiyomi won't automatically mark them as read for you.

Other methods

Checkout this issue for tracking progress.

Troubleshooting and Support

See this troubleshooting wiki page.

Contributing and Technical info

See CONTRIBUTING.md.

Credit

This project is a spiritual successor of TachiWeb-Server, Many of the ideas and the groundwork adopted in this project comes from TachiWeb.

The AndroidCompat module was originally developed by @null-dev for TachiWeb-Server and is licensed under Apache License Version 2.0 and Copyright 2019 Andy Bao and contributors.

Parts of tachiyomi is adopted into this codebase, also licensed under Apache License Version 2.0 and Copyright 2015 Javier Tomás.

You can obtain a copy of Apache License Version 2.0 from http://www.apache.org/licenses/LICENSE-2.0

Changes to both codebases is licensed under MPL v. 2.0 as the rest of this project.

License

Copyright (C) Contributors to the Suwayomi project

This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at http://mozilla.org/MPL/2.0/.

Disclaimer

The developer of this application does not have any affiliation with the content providers available.

tachidesk-server's People

Contributors

akabhirav avatar animeavi avatar arbuilder avatar ariamoradi avatar arias800 avatar brianmakesthings avatar cabo40 avatar chancez avatar dattatreyareddy avatar ff2400t avatar forgenn avatar kolbyml avatar kraxen72 avatar mahor1221 avatar manchewable avatar mangacrushteam avatar marcoebbinghaus avatar martinek avatar meta-boy avatar ntbm avatar robonau avatar schroda avatar she11sh0cked avatar syer10 avatar tachimanga avatar txtsd avatar vedantmgoyal9 avatar voltrare avatar vuhe avatar xhzhe avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

tachidesk-server's Issues

[Bug] GTK errors when running + no window opens

I acknowledge that:

  • I have updated to the latest version of the app.
  • I have tried the troubleshooting guide described in README.md
  • If this is a request for adding/changing an extension it should be brought up to Tachiyomi: https://github.com/tachiyomiorg/tachiyomi-extensions/issues/new/choose
  • If this is an issue with some extension not working properly, It does work inside Tachiyomi as intended.
  • I have searched the existing issues and this is a new ticket NOT a duplicate or related to another open issue
  • I will fill out the title and the information in this template

Yarn should be listed as a dependency in the README, as well as having good error logging.

Device information

  • Tachidesk version: v0.2.5-r256-jar (edit: just confirmed this still occurs on v0.2.6-r273-jar).
  • Server Operating System: Arch Linux 5.11.8-arch1-1
  • Server JVM version: openjdk 11.0.10 2021-01-19, OpenJDK Runtime Environment (build 11.0.10+9)
  • Client Operating System: Arch Linux 5.11.8-arch1-1
  • Client Web Browser: Chromium 89.0.4389.90 Arch Linux (Using the Ungoogled Chromium fork of Chromium)

Steps to reproduce

  1. Download & Run jar
  2. GTK Errors & other stuff is logged. No windows open.
  3. Control + C to exit.

Expected behavior

The application actually works

Actual behavior

It doesn't.

Other details

Here's the log:

$ java -jar Tachidesk-v0.2.5-r256.jar 
[main] INFO Exposed - Preparing create tables statements took 30ms
[main] INFO Exposed - Executing create tables statements took 3ms
[main] INFO Exposed - Extracting table columns took 73ms
[main] INFO Exposed - Extracting column constraints took 15ms
[main] INFO Exposed - Preparing alter table statements took 89ms
[main] INFO Exposed - Executing alter table statements took 0ms
[main] WARN Exposed - Indices exist in database and not mapped in code on class 'CHAPTER':
[main] WARN Exposed - 		Index 'FK_CHAPTER_MANGA_ID_INDEX_5' for 'CHAPTER' on columns ir.armor.tachidesk.database.table.ChapterTable.manga
[main] WARN Exposed - Indices exist in database and not mapped in code on class 'SOURCE':
[main] WARN Exposed - 		Index 'FK_SOURCE_EXTENSION_ID_INDEX_9' for 'SOURCE' on columns ir.armor.tachidesk.database.table.SourceTable.extension
[main] WARN Exposed - Indices exist in database and not mapped in code on class 'PAGE':
[main] WARN Exposed - 		Index 'FK_PAGE_CHAPTER_ID_INDEX_2' for 'PAGE' on columns ir.armor.tachidesk.database.table.PageTable.chapter
[main] WARN Exposed - Indices exist in database and not mapped in code on class 'CATEGORYMANGA':
[main] WARN Exposed - 		Index 'FK_CATEGORYMANGA_CATEGORY_ID_INDEX_C' for 'CATEGORYMANGA' on columns ir.armor.tachidesk.database.table.CategoryMangaTable.category
[main] WARN Exposed - 		Index 'FK_CATEGORYMANGA_MANGA_ID_INDEX_C' for 'CATEGORYMANGA' on columns ir.armor.tachidesk.database.table.CategoryMangaTable.manga
[main] INFO Exposed - Checking mapping consistence took 14ms
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by dorkbox.util.Swt (file:/home/solonovamax/Downloads/Tachidesk-v0.2.5-r256.jar) to method java.lang.ClassLoader.findLoadedClass(java.lang.String)
WARNING: Please consider reporting this to the maintainers of dorkbox.util.Swt
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
[main] WARN dorkbox.util.jna.linux.GtkTheme - Unable to get tray image size. Using default.

(java:343959): Gdk-CRITICAL **: 12:13:43.182: gdk_x11_get_xatom_by_name_for_display: assertion 'GDK_IS_DISPLAY (display)' failed

(java:343959): Gdk-CRITICAL **: 12:13:43.182: gdk_x11_get_xatom_by_name_for_display: assertion 'GDK_IS_DISPLAY (display)' failed

(java:343959): Gdk-CRITICAL **: 12:13:43.182: gdk_x11_get_xatom_by_name_for_display: assertion 'GDK_IS_DISPLAY (display)' failed

(java:343959): Gdk-CRITICAL **: 12:13:43.182: gdk_x11_get_xatom_by_name_for_display: assertion 'GDK_IS_DISPLAY (display)' failed

(java:343959): Gdk-CRITICAL **: 12:13:43.182: gdk_x11_get_xatom_by_name_for_display: assertion 'GDK_IS_DISPLAY (display)' failed

(java:343959): Gdk-CRITICAL **: 12:13:43.182: gdk_x11_get_xatom_by_name_for_display: assertion 'GDK_IS_DISPLAY (display)' failed

(java:343959): Gdk-CRITICAL **: 12:13:43.182: gdk_x11_get_xatom_by_name_for_display: assertion 'GDK_IS_DISPLAY (display)' failed

(java:343959): Gdk-CRITICAL **: 12:13:43.182: gdk_x11_get_xatom_by_name_for_display: assertion 'GDK_IS_DISPLAY (display)' failed

(java:343959): Gdk-CRITICAL **: 12:13:43.182: gdk_x11_get_xatom_by_name_for_display: assertion 'GDK_IS_DISPLAY (display)' failed

(java:343959): Gdk-CRITICAL **: 12:13:43.182: gdk_x11_get_xatom_by_name_for_display: assertion 'GDK_IS_DISPLAY (display)' failed

(java:343959): Gdk-CRITICAL **: 12:13:43.182: gdk_x11_get_xatom_by_name_for_display: assertion 'GDK_IS_DISPLAY (display)' failed

(java:343959): Gdk-CRITICAL **: 12:13:43.182: gdk_x11_get_xatom_by_name_for_display: assertion 'GDK_IS_DISPLAY (display)' failed

(java:343959): Gdk-CRITICAL **: 12:13:43.182: gdk_x11_get_xatom_by_name_for_display: assertion 'GDK_IS_DISPLAY (display)' failed

(java:343959): Gdk-CRITICAL **: 12:13:43.182: gdk_x11_get_xatom_by_name_for_display: assertion 'GDK_IS_DISPLAY (display)' failed

(java:343959): Gdk-CRITICAL **: 12:13:43.182: gdk_x11_get_xatom_by_name_for_display: assertion 'GDK_IS_DISPLAY (display)' failed

(java:343959): Gdk-CRITICAL **: 12:13:43.182: gdk_x11_get_xatom_by_name_for_display: assertion 'GDK_IS_DISPLAY (display)' failed

(java:343959): Gdk-CRITICAL **: 12:13:43.189: gdk_x11_get_xatom_by_name_for_display: assertion 'GDK_IS_DISPLAY (display)' failed

(java:343959): dbind-WARNING **: 12:13:43.293: Couldn't connect to accessibility bus: Failed to connect to socket /tmp/dbus-6kGghwTyak: No such file or directory
^C^C^C

Error when cloning repository

I received this error when trying to clone the repo branch of this repository:

This repository is over its data quota. Account responsible for LFS bandwidth should purchase more data packs to restore access.

I also cannot download the precompiled releases through GitHub. It just downloads a corrupted file.
Are there any other ways for me to mitigate this problem?

Milestone #1: Absolutely Essential features

super early state

  • prototyping ability to run extensions
  • back-end server project
  • react UI project

essential feature set

  • extensions page
    • list extensions
      • API
      • UI
      • UI functionality
    • install extensions
      • API
      • UI
      • UI functionality
  • source list page
    • API
    • UI
    • UI functionality
  • popular/latest mangas page
    • API
    • UI
    • UI functionality
      • infinite scrolling to fetch pages beyond 1
  • manga page
    • API
      • manga details
      • chapter list
    • UI
    • UI functionality
  • chapter page reader
    • API
    • pages reader
      • UI
      • UI functionality
  • manga search
    • API
    • UI

optional/quality of life feature set

  • extensions page
    • offline fast loading
      • API
      • UI functionality
    • online slow loading
      • API
      • UI functionality
    • loading animation
      • UI
      • UI functionality
    • group by language
      • UI
      • UI functionality
  • chapter reader page
    • vertical all pages reader
      • UI
      • UI functionality

[Feature Request] Horizontal reader mode

What feature should be added to Tachidesk?

The reader should scroll left to right or right to left

Why/Project's Benefit/Existing Problem

A planned feature from Tachiyomi

[Bug] Manga details can't be stored to database column because exceeds length (4096)

Device information

  • Tachidesk version: Docker arbuild/tachidesk-docker:latest/slim
  • Server Operating System: Win 10 Home
  • Server Desktop Environment: WSL2 Ubuntu 20.04
  • Server JVM version: bundled with docker image
  • Client Web Browser: Google Chrome Version 89.

Steps to reproduce

  1. browse one piece manga page of mangakakalot or manganelo
  2. it hangs and details of manga page doesn't load

Expected behavior

It shouldn't hang

Actual behavior

manga details should load

Other details

screenshot and error log attached below

Screenshot 2021-04-04 061609
error.txt

[Feature Request] <Back to Browse Button on Manga Overview Page>

I think incorporaring a back button on the top left of the manga overview page (similarly to the exit button in the reader) that goes back to browsing the selected source would be such a big quality of life improvement especially if it remembers the browsing location. Right now if I select a manga I have to select the source and browse all over again. BTW I'm using Tachidesk in fullscreen mode so the back arrow isnt shown, and even if I press it, it either doesnt remember the previous location or goes back to the reader if I exited the reader using the top left escape button.

[Bug] Can’t uninstall extension after viewing manga page

can't uninstall an extension after viewing manga page [http://localhost:4567/manga/1/ http://localhost:4567/manga/2/ etc]

i can uninstall before i view any manga page but after viewing any manga can't uninstall it.

Log

uninstalling tachiyomi-en.mangakakalot-v1.2.1.apk
used cached extension list
[qtp895705623-27] WARN Exposed - Transaction attempt #0 failed: org.h2.jdbc.JdbcSQLIntegrityConstraintViolationException: Referential integrity constraint violation: "FK_MANGA_SOURCE_ID: PUBLIC.MANGA FOREIGN KEY(SOURCE) REFERENCES PUBLIC.SOURCE(ID) (2528986671771677900)"; SQL statement:
DELETE FROM "SOURCE" WHERE "SOURCE".EXTENSION = ? [23503-199]. Statement(s): DELETE FROM "SOURCE" WHERE "SOURCE".EXTENSION = ?
org.jetbrains.exposed.exceptions.ExposedSQLException: org.h2.jdbc.JdbcSQLIntegrityConstraintViolationException: Referential integrity constraint violation: "FK_MANGA_SOURCE_ID: PUBLIC.MANGA FOREIGN KEY(SOURCE) REFERENCES PUBLIC.SOURCE(ID) (2528986671771677900)"; SQL statement:
DELETE FROM "SOURCE" WHERE "SOURCE".EXTENSION = ? [23503-199]
SQL: [DELETE FROM "SOURCE" WHERE "SOURCE".EXTENSION = ?]
at org.jetbrains.exposed.sql.statements.Statement.executeIn$exposed_core(Statement.kt:63)
at org.jetbrains.exposed.sql.Transaction.exec(Transaction.kt:129)
at org.jetbrains.exposed.sql.Transaction.exec(Transaction.kt:115)
at org.jetbrains.exposed.sql.statements.Statement.execute(Statement.kt:29)
at org.jetbrains.exposed.sql.statements.DeleteStatement$Companion.where(DeleteStatement.kt:22)
at org.jetbrains.exposed.sql.QueriesKt.deleteWhere(Queries.kt:57)
at org.jetbrains.exposed.sql.QueriesKt.deleteWhere$default(Queries.kt:56)
at ir.armor.tachidesk.util.ExtensionKt$removeExtension$1.invoke(Extension.kt:144)
at ir.armor.tachidesk.util.ExtensionKt$removeExtension$1.invoke(Extension.kt)
at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt$inTopLevelTransaction$1.invoke(ThreadLocalTransactionManager.kt:170)
at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt$inTopLevelTransaction$2.invoke(ThreadLocalTransactionManager.kt:211)
at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.keepAndRestoreTransactionRefAfterRun(ThreadLocalTransactionManager.kt:219)
at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.inTopLevelTransaction(ThreadLocalTransactionManager.kt:210)
at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt$transaction$1.invoke(ThreadLocalTransactionManager.kt:148)
at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.keepAndRestoreTransactionRefAfterRun(ThreadLocalTransactionManager.kt:219)
at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.transaction(ThreadLocalTransactionManager.kt:120)
at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.transaction(ThreadLocalTransactionManager.kt:118)
at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.transaction$default(ThreadLocalTransactionManager.kt:117)
at ir.armor.tachidesk.util.ExtensionKt.removeExtension(Extension.kt:141)
at ir.armor.tachidesk.Main$Companion$main$3.handle(Main.kt:77)
at io.javalin.core.security.SecurityUtil.noopAccessManager(SecurityUtil.kt:23)
at io.javalin.http.JavalinServlet$addHandler$protectedHandler$1.handle(JavalinServlet.kt:121)
at io.javalin.http.JavalinServlet$service$2$1.invoke(JavalinServlet.kt:45)
at io.javalin.http.JavalinServlet$service$2$1.invoke(JavalinServlet.kt:24)
at io.javalin.http.JavalinServlet$service$1.invoke(JavalinServlet.kt:129)
at io.javalin.http.JavalinServlet$service$2.invoke(JavalinServlet.kt:40)
at io.javalin.http.JavalinServlet.service(JavalinServlet.kt:81)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at io.javalin.websocket.JavalinWsServlet.service(JavalinWsServlet.kt:51)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:763)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:569)
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1610)
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
at io.javalin.core.JavalinServer$start$wsAndHttpHandler$1.doHandle(JavalinServer.kt:49)
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:507)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1580)
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1292)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
at org.eclipse.jetty.server.handler.StatisticsHandler.handle(StatisticsHandler.java:173)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
at org.eclipse.jetty.server.Server.handle(Server.java:501)
at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:383)
at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:556)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:375)
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:273)
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)
at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:336)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:313)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:171)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:129)
at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:375)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:806)
at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:938)
at java.base/java.lang.Thread.run(Thread.java:832)
Caused by: org.h2.jdbc.JdbcSQLIntegrityConstraintViolationException: Referential integrity constraint violation: "FK_MANGA_SOURCE_ID: PUBLIC.MANGA FOREIGN KEY(SOURCE) REFERENCES PUBLIC.SOURCE(ID) (2528986671771677900)"; SQL statement:
DELETE FROM "SOURCE" WHERE "SOURCE".EXTENSION = ? [23503-199]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:457)
at org.h2.message.DbException.getJdbcSQLException(DbException.java:427)
at org.h2.message.DbException.get(DbException.java:205)
at org.h2.message.DbException.get(DbException.java:181)
at org.h2.constraint.ConstraintReferential.checkRow(ConstraintReferential.java:373)
at org.h2.constraint.ConstraintReferential.checkRowRefTable(ConstraintReferential.java:390)
at org.h2.constraint.ConstraintReferential.checkRow(ConstraintReferential.java:265)
at org.h2.table.Table.fireConstraints(Table.java:1020)
at org.h2.table.Table.fireAfterRow(Table.java:1038)
at org.h2.command.dml.Delete.update(Delete.java:129)
at org.h2.command.CommandContainer.update(CommandContainer.java:133)
at org.h2.command.Command.executeUpdate(Command.java:267)
at org.h2.jdbc.JdbcPreparedStatement.executeUpdateInternal(JdbcPreparedStatement.java:200)
at org.h2.jdbc.JdbcPreparedStatement.executeUpdate(JdbcPreparedStatement.java:154)
at org.jetbrains.exposed.sql.statements.jdbc.JdbcPreparedStatementImpl.executeUpdate(JdbcPreparedStatementImpl.kt:23)
at org.jetbrains.exposed.sql.statements.DeleteStatement.executeInternal(DeleteStatement.kt:9)
at org.jetbrains.exposed.sql.statements.DeleteStatement.executeInternal(DeleteStatement.kt:6)
at org.jetbrains.exposed.sql.statements.Statement.executeIn$exposed_core(Statement.kt:61)
... 59 more
[qtp895705623-27] WARN Exposed - Transaction attempt #1 failed: org.h2.jdbc.JdbcSQLIntegrityConstraintViolationException: Referential integrity constraint violation: "FK_MANGA_SOURCE_ID: PUBLIC.MANGA FOREIGN KEY(SOURCE) REFERENCES PUBLIC.SOURCE(ID) (2528986671771677900)"; SQL statement:
DELETE FROM "SOURCE" WHERE "SOURCE".EXTENSION = ? [23503-199]. Statement(s): DELETE FROM "SOURCE" WHERE "SOURCE".EXTENSION = ?
org.jetbrains.exposed.exceptions.ExposedSQLException: org.h2.jdbc.JdbcSQLIntegrityConstraintViolationException: Referential integrity constraint violation: "FK_MANGA_SOURCE_ID: PUBLIC.MANGA FOREIGN KEY(SOURCE) REFERENCES PUBLIC.SOURCE(ID) (2528986671771677900)"; SQL statement:
DELETE FROM "SOURCE" WHERE "SOURCE".EXTENSION = ? [23503-199]
SQL: [DELETE FROM "SOURCE" WHERE "SOURCE".EXTENSION = ?]
at org.jetbrains.exposed.sql.statements.Statement.executeIn$exposed_core(Statement.kt:63)
at org.jetbrains.exposed.sql.Transaction.exec(Transaction.kt:129)
at org.jetbrains.exposed.sql.Transaction.exec(Transaction.kt:115)
at org.jetbrains.exposed.sql.statements.Statement.execute(Statement.kt:29)
at org.jetbrains.exposed.sql.statements.DeleteStatement$Companion.where(DeleteStatement.kt:22)
at org.jetbrains.exposed.sql.QueriesKt.deleteWhere(Queries.kt:57)
at org.jetbrains.exposed.sql.QueriesKt.deleteWhere$default(Queries.kt:56)
at ir.armor.tachidesk.util.ExtensionKt$removeExtension$1.invoke(Extension.kt:144)
at ir.armor.tachidesk.util.ExtensionKt$removeExtension$1.invoke(Extension.kt)
at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt$inTopLevelTransaction$1.invoke(ThreadLocalTransactionManager.kt:170)
at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt$inTopLevelTransaction$2.invoke(ThreadLocalTransactionManager.kt:211)
at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.keepAndRestoreTransactionRefAfterRun(ThreadLocalTransactionManager.kt:219)
at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.inTopLevelTransaction(ThreadLocalTransactionManager.kt:210)
at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt$transaction$1.invoke(ThreadLocalTransactionManager.kt:148)
at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.keepAndRestoreTransactionRefAfterRun(ThreadLocalTransactionManager.kt:219)
at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.transaction(ThreadLocalTransactionManager.kt:120)
at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.transaction(ThreadLocalTransactionManager.kt:118)
at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.transaction$default(ThreadLocalTransactionManager.kt:117)
at ir.armor.tachidesk.util.ExtensionKt.removeExtension(Extension.kt:141)
at ir.armor.tachidesk.Main$Companion$main$3.handle(Main.kt:77)
at io.javalin.core.security.SecurityUtil.noopAccessManager(SecurityUtil.kt:23)
at io.javalin.http.JavalinServlet$addHandler$protectedHandler$1.handle(JavalinServlet.kt:121)
at io.javalin.http.JavalinServlet$service$2$1.invoke(JavalinServlet.kt:45)
at io.javalin.http.JavalinServlet$service$2$1.invoke(JavalinServlet.kt:24)
at io.javalin.http.JavalinServlet$service$1.invoke(JavalinServlet.kt:129)
at io.javalin.http.JavalinServlet$service$2.invoke(JavalinServlet.kt:40)
at io.javalin.http.JavalinServlet.service(JavalinServlet.kt:81)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at io.javalin.websocket.JavalinWsServlet.service(JavalinWsServlet.kt:51)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:763)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:569)
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1610)
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
at io.javalin.core.JavalinServer$start$wsAndHttpHandler$1.doHandle(JavalinServer.kt:49)
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:507)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1580)
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1292)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
at org.eclipse.jetty.server.handler.StatisticsHandler.handle(StatisticsHandler.java:173)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
at org.eclipse.jetty.server.Server.handle(Server.java:501)
at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:383)
at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:556)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:375)
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:273)
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)
at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:336)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:313)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:171)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:129)
at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:375)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:806)
at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:938)
at java.base/java.lang.Thread.run(Thread.java:832)
Caused by: org.h2.jdbc.JdbcSQLIntegrityConstraintViolationException: Referential integrity constraint violation: "FK_MANGA_SOURCE_ID: PUBLIC.MANGA FOREIGN KEY(SOURCE) REFERENCES PUBLIC.SOURCE(ID) (2528986671771677900)"; SQL statement:
DELETE FROM "SOURCE" WHERE "SOURCE".EXTENSION = ? [23503-199]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:457)
at org.h2.message.DbException.getJdbcSQLException(DbException.java:427)
at org.h2.message.DbException.get(DbException.java:205)
at org.h2.message.DbException.get(DbException.java:181)
at org.h2.constraint.ConstraintReferential.checkRow(ConstraintReferential.java:373)
at org.h2.constraint.ConstraintReferential.checkRowRefTable(ConstraintReferential.java:390)
at org.h2.constraint.ConstraintReferential.checkRow(ConstraintReferential.java:265)
at org.h2.table.Table.fireConstraints(Table.java:1020)
at org.h2.table.Table.fireAfterRow(Table.java:1038)
at org.h2.command.dml.Delete.update(Delete.java:129)
at org.h2.command.CommandContainer.update(CommandContainer.java:133)
at org.h2.command.Command.executeUpdate(Command.java:267)
at org.h2.jdbc.JdbcPreparedStatement.executeUpdateInternal(JdbcPreparedStatement.java:200)
at org.h2.jdbc.JdbcPreparedStatement.executeUpdate(JdbcPreparedStatement.java:154)
at org.jetbrains.exposed.sql.statements.jdbc.JdbcPreparedStatementImpl.executeUpdate(JdbcPreparedStatementImpl.kt:23)
at org.jetbrains.exposed.sql.statements.DeleteStatement.executeInternal(DeleteStatement.kt:9)
at org.jetbrains.exposed.sql.statements.DeleteStatement.executeInternal(DeleteStatement.kt:6)
at org.jetbrains.exposed.sql.statements.Statement.executeIn$exposed_core(Statement.kt:61)
... 59 more
[qtp895705623-27] WARN Exposed - Transaction attempt #2 failed: org.h2.jdbc.JdbcSQLIntegrityConstraintViolationException: Referential integrity constraint violation: "FK_MANGA_SOURCE_ID: PUBLIC.MANGA FOREIGN KEY(SOURCE) REFERENCES PUBLIC.SOURCE(ID) (2528986671771677900)"; SQL statement:
DELETE FROM "SOURCE" WHERE "SOURCE".EXTENSION = ? [23503-199]. Statement(s): DELETE FROM "SOURCE" WHERE "SOURCE".EXTENSION = ?
org.jetbrains.exposed.exceptions.ExposedSQLException: org.h2.jdbc.JdbcSQLIntegrityConstraintViolationException: Referential integrity constraint violation: "FK_MANGA_SOURCE_ID: PUBLIC.MANGA FOREIGN KEY(SOURCE) REFERENCES PUBLIC.SOURCE(ID) (2528986671771677900)"; SQL statement:
DELETE FROM "SOURCE" WHERE "SOURCE".EXTENSION = ? [23503-199]
SQL: [DELETE FROM "SOURCE" WHERE "SOURCE".EXTENSION = ?]
at org.jetbrains.exposed.sql.statements.Statement.executeIn$exposed_core(Statement.kt:63)
at org.jetbrains.exposed.sql.Transaction.exec(Transaction.kt:129)
at org.jetbrains.exposed.sql.Transaction.exec(Transaction.kt:115)
at org.jetbrains.exposed.sql.statements.Statement.execute(Statement.kt:29)
at org.jetbrains.exposed.sql.statements.DeleteStatement$Companion.where(DeleteStatement.kt:22)
at org.jetbrains.exposed.sql.QueriesKt.deleteWhere(Queries.kt:57)
at org.jetbrains.exposed.sql.QueriesKt.deleteWhere$default(Queries.kt:56)
at ir.armor.tachidesk.util.ExtensionKt$removeExtension$1.invoke(Extension.kt:144)
at ir.armor.tachidesk.util.ExtensionKt$removeExtension$1.invoke(Extension.kt)
at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt$inTopLevelTransaction$1.invoke(ThreadLocalTransactionManager.kt:170)
at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt$inTopLevelTransaction$2.invoke(ThreadLocalTransactionManager.kt:211)
at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.keepAndRestoreTransactionRefAfterRun(ThreadLocalTransactionManager.kt:219)
at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.inTopLevelTransaction(ThreadLocalTransactionManager.kt:210)
at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt$transaction$1.invoke(ThreadLocalTransactionManager.kt:148)
at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.keepAndRestoreTransactionRefAfterRun(ThreadLocalTransactionManager.kt:219)
at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.transaction(ThreadLocalTransactionManager.kt:120)
at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.transaction(ThreadLocalTransactionManager.kt:118)
at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.transaction$default(ThreadLocalTransactionManager.kt:117)
at ir.armor.tachidesk.util.ExtensionKt.removeExtension(Extension.kt:141)
at ir.armor.tachidesk.Main$Companion$main$3.handle(Main.kt:77)
at io.javalin.core.security.SecurityUtil.noopAccessManager(SecurityUtil.kt:23)
at io.javalin.http.JavalinServlet$addHandler$protectedHandler$1.handle(JavalinServlet.kt:121)
at io.javalin.http.JavalinServlet$service$2$1.invoke(JavalinServlet.kt:45)
at io.javalin.http.JavalinServlet$service$2$1.invoke(JavalinServlet.kt:24)
at io.javalin.http.JavalinServlet$service$1.invoke(JavalinServlet.kt:129)
at io.javalin.http.JavalinServlet$service$2.invoke(JavalinServlet.kt:40)
at io.javalin.http.JavalinServlet.service(JavalinServlet.kt:81)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at io.javalin.websocket.JavalinWsServlet.service(JavalinWsServlet.kt:51)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:763)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:569)
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1610)
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
at io.javalin.core.JavalinServer$start$wsAndHttpHandler$1.doHandle(JavalinServer.kt:49)
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:507)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1580)
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1292)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
at org.eclipse.jetty.server.handler.StatisticsHandler.handle(StatisticsHandler.java:173)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
at org.eclipse.jetty.server.Server.handle(Server.java:501)
at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:383)
at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:556)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:375)
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:273)
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)
at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:336)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:313)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:171)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:129)
at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:375)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:806)
at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:938)
at java.base/java.lang.Thread.run(Thread.java:832)
Caused by: org.h2.jdbc.JdbcSQLIntegrityConstraintViolationException: Referential integrity constraint violation: "FK_MANGA_SOURCE_ID: PUBLIC.MANGA FOREIGN KEY(SOURCE) REFERENCES PUBLIC.SOURCE(ID) (2528986671771677900)"; SQL statement:
DELETE FROM "SOURCE" WHERE "SOURCE".EXTENSION = ? [23503-199]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:457)
at org.h2.message.DbException.getJdbcSQLException(DbException.java:427)
at org.h2.message.DbException.get(DbException.java:205)
at org.h2.message.DbException.get(DbException.java:181)
at org.h2.constraint.ConstraintReferential.checkRow(ConstraintReferential.java:373)
at org.h2.constraint.ConstraintReferential.checkRowRefTable(ConstraintReferential.java:390)
at org.h2.constraint.ConstraintReferential.checkRow(ConstraintReferential.java:265)
at org.h2.table.Table.fireConstraints(Table.java:1020)
at org.h2.table.Table.fireAfterRow(Table.java:1038)
at org.h2.command.dml.Delete.update(Delete.java:129)
at org.h2.command.CommandContainer.update(CommandContainer.java:133)
at org.h2.command.Command.executeUpdate(Command.java:267)
at org.h2.jdbc.JdbcPreparedStatement.executeUpdateInternal(JdbcPreparedStatement.java:200)
at org.h2.jdbc.JdbcPreparedStatement.executeUpdate(JdbcPreparedStatement.java:154)
at org.jetbrains.exposed.sql.statements.jdbc.JdbcPreparedStatementImpl.executeUpdate(JdbcPreparedStatementImpl.kt:23)
at org.jetbrains.exposed.sql.statements.DeleteStatement.executeInternal(DeleteStatement.kt:9)
at org.jetbrains.exposed.sql.statements.DeleteStatement.executeInternal(DeleteStatement.kt:6)
at org.jetbrains.exposed.sql.statements.Statement.executeIn$exposed_core(Statement.kt:61)
... 59 more
[qtp895705623-27] WARN io.javalin.Javalin - Uncaught exception
org.jetbrains.exposed.exceptions.ExposedSQLException: org.h2.jdbc.JdbcSQLIntegrityConstraintViolationException: Referential integrity constraint violation: "FK_MANGA_SOURCE_ID: PUBLIC.MANGA FOREIGN KEY(SOURCE) REFERENCES PUBLIC.SOURCE(ID) (2528986671771677900)"; SQL statement:
DELETE FROM "SOURCE" WHERE "SOURCE".EXTENSION = ? [23503-199]
SQL: [Failed on expanding args for DELETE: org.jetbrains.exposed.sql.statements.DeleteStatement@27522944]
at org.jetbrains.exposed.sql.statements.Statement.executeIn$exposed_core(Statement.kt:63)
at org.jetbrains.exposed.sql.Transaction.exec(Transaction.kt:129)
at org.jetbrains.exposed.sql.Transaction.exec(Transaction.kt:115)
at org.jetbrains.exposed.sql.statements.Statement.execute(Statement.kt:29)
at org.jetbrains.exposed.sql.statements.DeleteStatement$Companion.where(DeleteStatement.kt:22)
at org.jetbrains.exposed.sql.QueriesKt.deleteWhere(Queries.kt:57)
at org.jetbrains.exposed.sql.QueriesKt.deleteWhere$default(Queries.kt:56)
at ir.armor.tachidesk.util.ExtensionKt$removeExtension$1.invoke(Extension.kt:144)
at ir.armor.tachidesk.util.ExtensionKt$removeExtension$1.invoke(Extension.kt)
at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt$inTopLevelTransaction$1.invoke(ThreadLocalTransactionManager.kt:170)
at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt$inTopLevelTransaction$2.invoke(ThreadLocalTransactionManager.kt:211)
at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.keepAndRestoreTransactionRefAfterRun(ThreadLocalTransactionManager.kt:219)
at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.inTopLevelTransaction(ThreadLocalTransactionManager.kt:210)
at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt$transaction$1.invoke(ThreadLocalTransactionManager.kt:148)
at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.keepAndRestoreTransactionRefAfterRun(ThreadLocalTransactionManager.kt:219)
at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.transaction(ThreadLocalTransactionManager.kt:120)
at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.transaction(ThreadLocalTransactionManager.kt:118)
at org.jetbrains.exposed.sql.transactions.ThreadLocalTransactionManagerKt.transaction$default(ThreadLocalTransactionManager.kt:117)
at ir.armor.tachidesk.util.ExtensionKt.removeExtension(Extension.kt:141)
at ir.armor.tachidesk.Main$Companion$main$3.handle(Main.kt:77)
at io.javalin.core.security.SecurityUtil.noopAccessManager(SecurityUtil.kt:23)
at io.javalin.http.JavalinServlet$addHandler$protectedHandler$1.handle(JavalinServlet.kt:121)
at io.javalin.http.JavalinServlet$service$2$1.invoke(JavalinServlet.kt:45)
at io.javalin.http.JavalinServlet$service$2$1.invoke(JavalinServlet.kt:24)
at io.javalin.http.JavalinServlet$service$1.invoke(JavalinServlet.kt:129)
at io.javalin.http.JavalinServlet$service$2.invoke(JavalinServlet.kt:40)
at io.javalin.http.JavalinServlet.service(JavalinServlet.kt:81)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at io.javalin.websocket.JavalinWsServlet.service(JavalinWsServlet.kt:51)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:763)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:569)
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1610)
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
at io.javalin.core.JavalinServer$start$wsAndHttpHandler$1.doHandle(JavalinServer.kt:49)
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:507)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1580)
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1292)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
at org.eclipse.jetty.server.handler.StatisticsHandler.handle(StatisticsHandler.java:173)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
at org.eclipse.jetty.server.Server.handle(Server.java:501)
at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:383)
at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:556)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:375)
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:273)
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)
at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:336)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:313)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:171)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:129)
at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:375)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:806)
at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:938)
at java.base/java.lang.Thread.run(Thread.java:832)
Caused by: org.h2.jdbc.JdbcSQLIntegrityConstraintViolationException: Referential integrity constraint violation: "FK_MANGA_SOURCE_ID: PUBLIC.MANGA FOREIGN KEY(SOURCE) REFERENCES PUBLIC.SOURCE(ID) (2528986671771677900)"; SQL statement:
DELETE FROM "SOURCE" WHERE "SOURCE".EXTENSION = ? [23503-199]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:457)
at org.h2.message.DbException.getJdbcSQLException(DbException.java:427)
at org.h2.message.DbException.get(DbException.java:205)
at org.h2.message.DbException.get(DbException.java:181)
at org.h2.constraint.ConstraintReferential.checkRow(ConstraintReferential.java:373)
at org.h2.constraint.ConstraintReferential.checkRowRefTable(ConstraintReferential.java:390)
at org.h2.constraint.ConstraintReferential.checkRow(ConstraintReferential.java:265)
at org.h2.table.Table.fireConstraints(Table.java:1020)
at org.h2.table.Table.fireAfterRow(Table.java:1038)
at org.h2.command.dml.Delete.update(Delete.java:129)
at org.h2.command.CommandContainer.update(CommandContainer.java:133)
at org.h2.command.Command.executeUpdate(Command.java:267)
at org.h2.jdbc.JdbcPreparedStatement.executeUpdateInternal(JdbcPreparedStatement.java:200)
at org.h2.jdbc.JdbcPreparedStatement.executeUpdate(JdbcPreparedStatement.java:154)
at org.jetbrains.exposed.sql.statements.jdbc.JdbcPreparedStatementImpl.executeUpdate(JdbcPreparedStatementImpl.kt:23)
at org.jetbrains.exposed.sql.statements.DeleteStatement.executeInternal(DeleteStatement.kt:9)
at org.jetbrains.exposed.sql.statements.DeleteStatement.executeInternal(DeleteStatement.kt:6)
at org.jetbrains.exposed.sql.statements.Statement.executeIn$exposed_core(Statement.kt:61)
... 59 more

[Feature Request] Tachidesk Advanced Backup Support

What feature should be added to Tachidesk?

currently when we click backup it goes to download directory only (from browser). It would be nice to have auto backup with configuration settings like backup location and frequency in the ui.

Features -

  • make an end point that takes the parameters for automatic backup like backup interval, backup save location, maximum backups ( ex only have 1, 2 or 3 backups and delete older backup when new backup is created) and also make the front end code that sets those parameters and also call it from the front end

  • warn the user that if the app is not running, it won't backups anything

  • develop a feature so the app can run as a service or on startup so the user just has to click on the tray icon to open the app at any time

Why/Project's Benefit/Existing Problem

In case we forgot to create manual backup frequently, we have auto backup that can be restored later if something goes wrong

[Bug] <short description>

PLEASE READ THIS

I acknowledge that:

  • I have updated to the latest version of the app.
  • I have tried the troubleshooting guide described in README.md
  • If this is a request for adding/changing an extension it should be brought up to Tachiyomi: https://github.com/tachiyomiorg/tachiyomi-extensions/issues/new/choose
  • If this is an issue with some extension not working properly, It does work inside Tachiyomi as intended.
  • I have searched the existing issues and this is a new ticket NOT a duplicate or related to another open issue
  • I will fill out the title and the information in this template

Note that the issue will be automatically closed if you do not fill out the title or requested information.

DELETE THIS SECTION IF YOU HAVE READ AND ACKNOWLEDGED IT


Device information

  • Tachidesk version: v0.2.7-r312-win32
  • Server Operating System: the latest version of Windows 10
  • Server Desktop Environment: N/A
  • Server JVM version: bundled with win32
  • Client Operating System: Same
  • Client Web Browser: lastest version of Brave browser

Steps to reproduce

  1. Download MangaPark
  2. Open "Strawberry Panic"
  3. Pick a chapter

Expected behavior

Scrolling images with dynamic navigation should be consistent

Actual behavior

None of the scanned pages is the same size, leading to misalignment

Other details

It would be useful if the screen can display two pages at once in a consistent manner

Edge counter-case: Images that are two pages in one (many scan sites have them), and long art strips from webtoons and tapas.io

[Bug] Unable to read manga.


Device information

  • Tachidesk version: (Tachidesk-v0.2.7-r312-win32)
  • Server Operating System: (Windows 10)
  • Server Desktop Environment: N/A or (None)
  • Server JVM version: bundled with win32 or (bundled with win32)
  • Client Operating System:
  • Client Web Browser: ( Google Chrome Version 89.0.4389.114 (Official Build) (64-bit))

Steps to reproduce

  1. First Step
    Click any manga from any source
  2. Second Step
    Try reading

Expected behavior

It should load and let me read...I presume.

Actual behavior

It either goes to a completely white screen or infinitely loads the manga.

Other details

I've tried everything listed IIRC and it has happened with the previous version as well, I have never had it work so last time I thought it would be fixed in a newer version.

[Feature Request] <When back button is hit, the page stays at scrolled position instead of top of page.>

PLEASE READ THIS

I acknowledge that:

  • I have updated to the latest version of the app.
  • I have tried the troubleshooting guide described in README.md
  • If this is a request for adding/changing an extension it should be brought up to Tachiyomi: https://github.com/tachiyomiorg/tachiyomi-extensions/issues/new/choose
  • If this is an issue with some extension not working properly, It does work in Tachiyomi application as intended.
  • I have searched the existing issues and this is a new ticket NOT a duplicate or related to another open issue
  • I will fill out the title and the information in this template

Note that the issue will be automatically closed if you do not fill out the title or requested information.

DELETE THIS SECTION IF YOU HAVE READ AND ACKNOWLEDGED IT


What feature should be added to Tachidesk?

Explain What the feature is and how it should work in detail

Why/Project's Benefit/Existing Problem

Explain why this should be added

[Feature Request] <When back button is hit, the page stays at scrolled position instead of top of page.>

PLEASE READ THIS

I acknowledge that:

  • I have updated to the latest version of the app.
  • I have tried the troubleshooting guide described in README.md
  • If this is a request for adding/changing an extension it should be brought up to Tachiyomi: https://github.com/tachiyomiorg/tachiyomi-extensions/issues/new/choose
  • If this is an issue with some extension not working properly, It does work in Tachiyomi application as intended.
  • I have searched the existing issues and this is a new ticket NOT a duplicate or related to another open issue
  • I will fill out the title and the information in this template

Note that the issue will be automatically closed if you do not fill out the title or requested information.

DELETE THIS SECTION IF YOU HAVE READ AND ACKNOWLEDGED IT


What feature should be added to Tachidesk?

Explain What the feature is and how it should work in detail

Why/Project's Benefit/Existing Problem

Explain why this should be added

[Feature Request] <Load all images at once>

I mean turn off lazy load in reader and load all images at once. Because some sources are very slow and when scroll down to images position to load, it took a long time to wait , it would be great if images were preloaded while reading instead of scrolling down to it to load, like other manga reading websites, all images are loaded in 1 page load !!

[Bug] browser shows a white screen

Device information

  • Tachidesk version: Tachidesk-v0.2.7-r312-win32
  • Server Operating System: Windows 10
  • Server Desktop Environment: N/A
  • Server JVM version: bundled with win32
  • Client Operating System: N/A
  • Client Web Browser: Google Chrome Version 89.0.4389.114 (Official Build) (64-bit)

Steps to reproduce

  1. First Step
    Click any manga from any source
  2. Second Step
    Try reading

Expected behavior

It should load and let me read...I presume.

Actual behavior

It either goes to a completely white screen or infinitely loads the manga.

Other details

I've tried everything listed IIRC and it has happened with the previous version as well, I have never had it work so last time I thought it would be fixed in a newer version.

[Bug] Test

Device information

  • Tachidesk version: (Example: v0.2.3-r255-win32)
  • Server Operating System: (Example: Ubuntu 20.04)
  • Server JVM version: bundled with win32 or (Example: Java 8 Update 281 or OpenJDK 8u281)
  • Client Operating System:
  • Client Web Browser: (Example: Google Chrome 89.0.4389.82)

Steps to reproduce

  1. First Step
  2. Second Step

Expected behavior

Describe what should have happened

Actual behavior

Describe what happens instead

Other details

Describe additional details If necessary

[Bug] Inconsistent image sizes, and lack of dual-page reads

Device information

  • Tachidesk version: (Example: v0.2.7-r312-win32)
  • Server/Client Operating System: Win10
  • Server JVM version: bundled with win32
  • Client Web Browser: Brave browser

Steps to reproduce

  1. Download MangaPark
  2. Open "Strawberry Panic"
  3. Pick a chapter

Expected behavior

Scrolling images with dynamic navigation should be consistent

Actual behavior

None of the scanned pages is the same size, leading to misalignment

Other details

It would be useful if the screen can display two pages at once in a consistent manner

Edge counter-case: Images that are two pages in one (many scan sites have them), and long art strips from webtoons and tapas.io

[Meta] Extensions known that don't work

  • Komga -> needs support for extension SharedPreferences
  • TsukiMangás(PT) -> needs support for extension SharedPreferences
  • LANraragi -> needs support for extension SharedPreferences
  • Cubari -> needs expansion of AndroidCompat for android.os.Looper.getMainLooper ref: eu.kanade.tachiyomi.extension.all.cubari.RemoteStorageUtils.handler
  • Manga Plus -> needs investigation

[Feature Request] Requesting page 0 for popular/latest should throw an error

What feature should be added to Tachidesk?

When requesting page 0 of popular/latest, it should throw a error

Why/Project's Benefit/Existing Problem

Page 0 is a invalid index in the Tachiyomi api, depending on the source, it can error or duplicate results to the next page. I feel the api should throw an error to the client if they try to request this page to allow for easier identification to what the client did wrong

[Feature Request] Save chapter as CBZ

What feature should be added to Tachidesk?

Explain What the feature is and how it should work in detail

Could you add an option save chapter as cbz ?

Why/Project's Benefit/Existing Problem

Explain why this should be added

Saving as CBZ will save place when downloading chaters

[Feature Request] Api should have manga genre as a json array

What feature should be added to Tachidesk?

Change the genre from a string to a list of strings.

Why/Project's Benefit/Existing Problem

In the API currently the genre is shared as a string, with each genre separated by a ", ", this can be handled by the API to allow easier usage in the clients.

[Bug] <short description>


Device information

  • Tachidesk version: (Tachidesk-v0.2.7-r312-win32)
  • Server Operating System: (Windows 10)
  • Server Desktop Environment: N/A or (None)
  • Server JVM version: bundled with win32 or (bundled with win32)
  • Client Operating System:
  • Client Web Browser: ( Google Chrome Version 89.0.4389.114 (Official Build) (64-bit))

Steps to reproduce

  1. First Step
    Click any manga from any source
  2. Second Step
    Try reading

Expected behavior

It should load and let me read...I presume.

Actual behavior

It either goes to a completely white screen or infinitely loads the manga.

Other details

I've tried everything listed IIRC and it has happened with the previous version as well, I have never had it work so last time I thought it would be fixed in a newer version.

[Feature Request] Able to read local files and change save locations

  1. Is it possible to implement function to read local files from PC? (possible formats jpg, png, zip, cbz similar to tachiyomi from a local source option)

Because I use tachiyomi a lot, I could just copy the downloads I make in my phone to PC or vice versa rather than downloading multiple times.

  1. Currently, if I run tachidesk, the images of each and every single manga I browse or read from whatever I search gets stored at my C drive. Its a huge problem for me because there is hardly any space in it. Possible solutions of what I think would be best:
    a. Option to change the directory.
    b. Option to periodically clean sweep the thumbnails and other folders.

  2. (This one is out of curiosity) Could you not open Tachidesk as a separate application window?

I get that you are trying with link to a browser. Like maybe open up Tachidesk as a different profile (I use multiple chrome profiles so they open up separate but not sure of other browsers) but thanks for the hard work so far you all put into!!

New builds throws exception in ubuntu

using below command on ubuntu 20.04 (WSL2) gives Exception in thread "main" java.io.IOException: Current OS and desktop configuration does not support browsing for a URL

java -jar Tachidesk-v0.2.0-r184.jar

Screenshot 2021-02-13 233717

Earlier non windows specific build were working on ubuntu

[Bug][webUI] Manga grid is unusable when covers are missing


Device information

  • Tachidesk version: latest preview
  • Server Operating System: Ubuntu 20.04 wsl
  • Server Desktop Environment: Docker
  • Server JVM version: openjdk 16
  • Client Operating System: win 10
  • Client Web Browser: Google Chrome latest

Expected behavior

In case covers are missing manga grid shouldn’t become unusable. Maybe some placeholder until cover image are available.
685FF513-1EBA-47E2-82F7-40134C8AC247

[Feature Request] Pre-downloading chapters

What feature should be added to Tachidesk?

Tachiyomi allows for scanning source comic updates and downloading manga series in one click. Bonus points if the "animal version/mirror duplicates" issues are solved.

Why/Project's Benefit/Existing Problem

In case someone were to go offline from WiFi, this would have been a god-send.

[Feature Request] Bundle download of Plugins

PLEASE READ THIS

What feature should be added to Tachidesk?

Since https://github.com/tachiyomiorg/tachiyomi-extensions/issues/5672 is in progress, it would be useful if one can download multiple extensions based on a keyword (e.g. English, anything that does not have "Manhua", webcomics)...

Why/Project's Benefit/Existing Problem

As a composite problem to https://github.com/Suwayomi/Tachidesk/issues/27, it would be useful to search niche manga through this method. If Tachiyomi is removing this feature due to bad implementations, Tachidesk can make this concept viable again.

Replacing "wait" with a proper loading icon

The waiting screen is with only the word "wait" instead of specifying what you are waiting for, which is very uncanny.
It is better to give clearer hints as to what it is waiting for, or if not, a loading icon e.g. spinner.

[Bug] List yarn as a dependency

I acknowledge that:

  • I have updated to the latest version of the app.
  • I have tried the troubleshooting guide described in README.md
  • If this is a request for adding/changing an extension it should be brought up to Tachiyomi: https://github.com/tachiyomiorg/tachiyomi-extensions/issues/new/choose
  • If this is an issue with some extension not working properly, It does work inside Tachiyomi as intended.
  • I have searched the existing issues and this is a new ticket NOT a duplicate or related to another open issue
  • I will fill out the title and the information in this template

Yarn should be listed as a dependency in the README, as well as having good error logging.

Device information

  • Tachidesk version: latest - N/A
  • Server Operating System: N/A
  • Server JVM version: N/A
  • Client Operating System: N/A
  • Client Web Browser: N/A

Steps to reproduce

  1. Attempt gradle build without yarn installed.
  2. No clear error message.

Expected behavior

There are clear messages in the error log telling you that you must install yarn + yarn is listed as a dependency in the README.

Actual behavior

The error logs aren't clear on what the issue is + yarn is not listed as a dependency in the README.
If you don't feel like fixing the issue with the error logging, at least list it in the README.

Other details

Here's some code that I use in one of my projects that depends on git being installed:
(It's written for a kotlin gradle buildscript, which is what you use. exit code 127 is the one you care about.)

fun Project.getGitHash(): String {
    val stdout = ByteArrayOutputStream()
    val result = exec {
        isIgnoreExitValue = true
        commandLine = mutableListOf("git", "rev-parse", "--short", "HEAD")
        standardOutput = stdout
    }
    when (result.exitValue) {
        128 -> {
            project.logger.error("You must git clone the repository. You cannot build from a zip/tarball of the sources.")
            result.rethrowFailure().assertNormalExitValue()
        }
        127 -> {
            project.logger.error("Could not find git executable. Please install git. https://git-scm.com/downloads")
            result.rethrowFailure().assertNormalExitValue()
        }
        0 -> { // do nothing
        }
        else -> {
            project.logger.error("An error may or may not have occurred. The exit code was not zero.")
            result.rethrowFailure().assertNormalExitValue()
        }
    }
    return stdout.toString().trim()
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.