Git Product home page Git Product logo

suwayomi-jui's People

Contributors

arbuilder avatar ariamoradi avatar kolbyml avatar mahor1221 avatar syer10 avatar vedantmgoyal9 avatar weblate avatar witchilich avatar xav83 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

suwayomi-jui's Issues

[Feature Request] Add Dutch translation

What feature should be added to Tachidesk-JUI?

Add a Dutch translation to the Weblate project.

Why/Project's Benefit/Existing Problem

My mother tongue is Dutch and I would like to translate and use it in my own language.

[Feature Request] Volume Rocker for Page Navigatiom

What feature should be added to Tachidesk-JUI?

Listening for volume up (previous) and volume down (forward) to navigate pages.

Why/Project's Benefit/Existing Problem

E-ink readers have become especially prominent devices, and a common method for page turning on these devices is through the use of the volume rocker. This makes it more convenient, and perhaps even ergonomic, for users.

[Feature Request] Manga page redesign

What feature should be added to Tachidesk-JUI?

The manga page should have a well designed menu that displays the information in an easily readable format.

Why/Project's Benefit/Existing Problem

It looks like crap currently

[Feature Request] Custom server application data

What feature should be added to Tachidesk-JUI?

Allow setting the datafolder of the underlying server, maybe by default

Why/Project's Benefit/Existing Problem

Allows separation of standalone Tachidesk-Servers

[Feature Request] snap/Appimage support

What feature should be added to Tachidesk-JUI?

deb support is fine. But, it will be wonderful to cover multiple distributions. So, snap/appimage will be great

Why/Project's Benefit/Existing Problem

not all user use debian based distributions. So, universal packaging like snap/appimage will be great

[Bug] After the reader finishes loading the image, the cpu usage is still high

Device information

  • Tachidesk-JUI version: v1.3.0
  • Operating System: Windows 10 (19044.1706)
  • Desktop Environment: N/A
  • Server Type: remote server running Tachidesk-Server-v0.6.3-r1100-linux-x64
  • Client JVM version: Java 17.0.3
  • Server JVM version: Same as Client

Steps to reproduce

  1. Run Tachidesk-JUI.jar
  2. Open a comic in the reader

Expected behavior

After the reader finishes loading, the cpu usage should be lower.

Actual behavior

After the reader finishes loading the image and waiting for a few minutes, the cpu usage is still high(about 20%).

Other details

Also no more log in the rolling.log during high cpu usage after loading.

[Bug] App crashes due to Java Assistive Technology Incompatibility (SOLVED)

Device information

  • Tachidesk-JUI version: v1.3.0
  • Operating System: Microsoft Windows [Version 10.0.22000.613]
  • Desktop Environment: N/A
  • Server Type: Already running server Tachidesk-Server-v0.6.2-r1074-windows-x64
  • Client JVM version: JUI Installer
  • Server JVM version: Same as Client

Steps to reproduce

  1. Install app using .msi installer provided
  2. Run Tachidesk-JUI.exe

Expected behavior

Should start client app with window.

Actual behavior

Error window, followed with error entry in log (see below) and app exit.

Other details

The following is logged in %LOCALAPPDATA%\Tachidesk-JUI\logging\rolling.log :
[main] ERROR/UncaughtException: Uncaught exception in thread [main@1]
java.awt.AWTError: Assistive Technology not found: com.sun.java.accessibility.AccessBridge

I found a solution to the problem here: https://www.papercut.com/kb/Main/AssistiveTechnologynotfound :
In the file %USERPROFILE%\.accessibility.properties, add a '#' at the beginning of each line containing:

assistive_technologies=com.sun.java.accessibility.AccessBridge
screen_magnifier_present=true

Then restart the app.

[Feature Request] Ability to change download directory

What feature should be added to Tachidesk-JUI?

ability to change different directory like tachiyomi

Why/Project's Benefit/Existing Problem

Suppose, we are out of space on specific drive. we can switch to different partition to solve the problem

[Feature Request] Double pages

What feature should be added to Tachidesk-JUI?

The reader should have a double pages mode that allows displaying 2 pages at a time.

Why/Project's Benefit/Existing Problem

It allows a better manga feel when the images will be displayed side by side.

[Feature Request] Simpe user authentication

What feature should be added to Tachidesk-JUI?

A simple user authentication using username & password or only password before entering the app.

Why/Project's Benefit/Existing Problem

Since Tachidesk is actually a server application and can be used like a web app, don't you think a user authentication feature will be very useful? A node without any auth check is open to the public, not very privacy-friendly.

[Feature Request] Add scrolling option to RTL and LTR Reader Mode

What feature should be added to Tachidesk-JUI?

Add an option that could let the user scroll for changing pages in RTL and LTR Reader Mode (e.g. scroll down -> next page, scroll up -> previous page).

Why/Project's Benefit/Existing Problem

RTL and LTR mode are great for focusing on one page at the time but clicking each time is less convenient than scrolling. Since some people would still rather use mouse click instead of scrolling, adding an option for it instead of replacing it completely could be a good thing.

[Bug] Wayland crash

Device information

  • Tachidesk-JUI version: aur/tachidesk-jui 1.2.1-2 and Tachidesk-JUI-linux-x64-1.2.1.jar
  • Operating System: Arch Linux x86_64.
  • Desktop Environment: Plasma 5.24.1 - Wayland.
  • Server Type: Internal.
  • Client JVM version: java-17-openjdk.
  • Server JVM version: java-17-openjdk.

Steps to reproduce

  1. Launch Tachidesk-JUI.
  2. Clicking the options in the settings for about 15 seconds. It doesn't matter what is clicked, none of the options is changed.

Expected behavior

It doesn't crash.

Actual behavior

It crashed. Trying to re-launch it failed, trying to re-launch it using the terminal give this:

12:53:54.155 [DefaultDispatcher-worker-1] INFO/ServerService: Starting server with /usr/lib/jvm/java-17-openjdk/bin/java
12:53:54.164 [DefaultDispatcher-worker-1] INFO/ServerService: Using server properties:
-Dsuwayomi.tachidesk.config.server.systemTrayEnabled=false
-Dsuwayomi.tachidesk.config.server.webUIEnabled=false
-Dsuwayomi.tachidesk.config.server.initialOpenInBrowserEnabled=false
12:53:54.174 [DefaultDispatcher-worker-1] INFO/ServerService: Server started successfully
12:53:54.557 [DefaultDispatcher-worker-1] INFO/Server: 12:53:54.554 [main] INFO  suwayomi.tachidesk.server.ServerSetup - Running Tachidesk v0.6.0 revision r1
12:53:55.334 [DefaultDispatcher-worker-1] INFO/Server: 12:53:55.334 [main] INFO  suwayomi.tachidesk.server.util.AppMutex - Another instance of Tachidesk is running on 127.0.0.1:4567
12:53:55.335 [DefaultDispatcher-worker-1] INFO/Server: 12:53:55.334 [main] INFO  suwayomi.tachidesk.server.util.AppMutex - Probably user thought tachidesk is closed so, opening webUI in browser again.
12:53:55.335 [DefaultDispatcher-worker-1] INFO/Server: 12:53:55.335 [main] INFO  suwayomi.tachidesk.server.util.AppMutex - Aborting startup.
12:53:55.336 [DefaultDispatcher-worker-1] INFO/Server: 12:53:55.336 [main] INFO  suwayomi.tachidesk.server.util.AppExit - Shutting Down Tachidesk. Goodbye!
12:53:55.352 [DefaultDispatcher-worker-1] INFO/ServerService: Server closed
12:53:55.353 [DefaultDispatcher-worker-1] INFO/ServerService: Process exitValue: 1

Brave browser (brave-bin), Discord (discord) (and maybe more?) also crashed and unable to re-launch.
Telegram (telegram-desktop) doesn't crash but if I exit it, I won't able to re-launch it.
Trying to restart the PC using the Application Launcher will makes the it freeze. I can launch the konsole and do "sudo reboot".

Other details

All packages are "latest" on the Arch Linux stable branch as of 1:10 PM GMT+7 16 Feb 2022.
I tried on the linux and linux-zen kernel.
It doesn't crash on X11.

[Bug] Categories dont reorginize

Device information

  • TachideskJUI version: v1.1.0
  • Operating System: Windows 10
  • Desktop Environment: Windows 10
  • Server Type: Internal
  • Client JVM version: JUI Installer
  • Server JVM version: Java 15.0.3

Steps to reproduce

  1. Open category menu
  2. Reorginize a category
  3. Nothing is saved

Expected behavior

Category should be reorganized

Actual behavior

Category is in its original position

Other details

Nothing much

[Feature Request] Swipe scrolling


What feature should be added to Tachidesk-JUI?

Swipe scrolling for touch screen user. For the reader and also in the chapter list page.
Just like in sorayomi.

I tested the android version of JUI and they both work on android. I would like the same swipe feature for the windows version.

[Feature Request] Sources home screen redesign

What feature should be added to Tachidesk-JUI?

Sources list/grid should have a well designed menu that allows easy navigation

Why/Project's Benefit/Existing Problem

It looks like crap currently

[Bug] Manga does not change to next chapter upon completion

Upon finishing a manga, it gets stuck with this and does not mark the chapter as read as well.
image

By stuck, even when i try to reopen the chapter, i only see the above picture and cannot change pages at all for that chapter.

Also tried manually toggling read by right click but the chapter does not reset to first page.

Expected behavior: To move the first page (or the last read page) of the next chapter and mark the chapter as read.

[Feature Request] Automatic next chapter load

What feature should be added to Tachidesk-JUI?

Automatically load the next chapter after the user finishes the current chapter

Why/Project's Benefit/Existing Problem

Each time a user finishes a chapter they have to click next chapter themselves in the side menu, this could be automated to enhance the user experience.

[Bug] DEB and RPM file dependancies incorrect

Expected behavior

When installing say the app needs at least Java 8, or install it

Actual behavior

App is installed even when no JRE is available

Other details

For the deb file I have experimented with what is needed, which can probably turned into a script

  1. Unpack deb file with ar x tachidesk-jui_1.2.1-1_amd64.deb
  2. Edit control.tar.xz/control.tar/./control line 9 which defaults to Depends: libc6, libexpat1, libuuid1, xdg-utils, zlib1g and add java8-runtime-headless
  3. Pack the fixed deb file with ar rcs tachidesk-jui_1.2.1-1_amd64.deb debian-binary ./control.tar.gz ./data.tar.xz

[Feature Request] Hide 18+

What feature should be added to Tachidesk-JUI?

A option to hide 18+ sources and extensions should be added for those who have no need to see them.

Why/Project's Benefit/Existing Problem

Will allow more users to choose to use the app if they dont have to deal with 18+ stuff.

[Bug] Webtoon Mode 2+ chapters infinite scroll broken

Device information

  • Tachidesk-JUI version: v1.3.2
  • Operating System: All
  • Desktop Environment: All
  • Server Type: Internal
  • Client JVM version: Default
  • Server JVM version: Same as Client

Steps to reproduce

  1. First Step
  2. Second Step

Expected behavior

Actual behavior

Other details

[Feature Request] make image flipping animation removable

What feature should be added to Tachidesk-JUI?

Add a "no flipping animation" check box to the "Reader" setting.
If it's checked, when you touch the screen, the next/previous image will appear immediately, without any flipping animation.

Why/Project's Benefit/Existing Problem

I have awearness that Tachidesk-JUI's image flipping is much fater than Tachidesk-Sorayomi.
If it's possible to remove the flipping animation, it could make the app be like way more faster even on a low-end device.

[Feature Suggestion] Auto resize pop ups

For example,
image

It be good if the pop window covered all the options in the menu in a single go.

Since the reader also opens as another window, an option to whether the window should fit to height or width or default size could be useful.

[Feature Request] Adding "Resume" "Filter" buttons and fixing "Toggle bookmarked"

image

I feel adding "Resume" would be good for long series (and in general too) where it starts with the last or latest opened chapter. Since there is already an option to bookmark (while its not working right now), it be nice to have a filter option to sort the chapters.

Also personally think the buttons should be best below the description rather than above it (Ignore this point if i am not seeing a bigger picture).

[Bug] Key 0 was already used. If you are using LazyColumn/Row please make sure you provide a unique key for each item

Device information

  • Tachidesk-JUI version: (v1.3.0)
  • Operating System: (Archlinux)
  • Desktop Environment: (Xfce4)
  • Server Type: (Internal i think)
  • Client JVM version: (openjdk 18.0.2 2022-07-19r)
  • Server JVM version: (Same as Client )

Steps to reproduce

  1. Install a extension
  2. Try to use it in the source section
  3. it will shows "key 0 was used. if you are using lazycolumn/row please make sure you provide a unique key for each item"

Expected behavior

View the section for select a manga

Actual behavior

it open a window with the "key 0 was used. if you are using lazycolumn/row please make sure you provide a unique key for each item" message

Other details

Here some logs

WARNING: sun.reflect.Reflection.getCallerClass is not supported. This will impact performance.
22:36:37.374 [DefaultDispatcher-worker-2] INFO/: Starting server with /usr/lib/jvm/java-18-openjdk/bin/java
22:36:37.379 [DefaultDispatcher-worker-2] INFO/: Using server properties:
-Dsuwayomi.tachidesk.config.server.systemTrayEnabled=false
-Dsuwayomi.tachidesk.config.server.webUIEnabled=false
-Dsuwayomi.tachidesk.config.server.initialOpenInBrowserEnabled=false
22:36:37.390 [DefaultDispatcher-worker-2] INFO/: Server started successfully
22:36:37.909 [DefaultDispatcher-worker-2] INFO/Server: 22:36:37.902 [main] INFO  suwayomi.tachidesk.server.ServerSetup - Running Tachidesk v0.6.3 revision r629
22:36:38.424 [DefaultDispatcher-worker-2] INFO/Server: 22:36:38.424 [main] INFO  suwayomi.tachidesk.server.util.AppMutex - Mutex status is clear, Resuming startup.
22:36:38.626 [DefaultDispatcher-worker-1] INFO/HttpClient: REQUEST: https://api.github.com/repos/Suwayomi/Tachidesk-JUI/releases/latest
22:36:38.629 [DefaultDispatcher-worker-1] INFO/HttpClient: METHOD: HttpMethod(value=GET)
22:36:39.038 [DefaultDispatcher-worker-2] INFO/Server: 22:36:39.038 [main] INFO  de.neonew.exposed.migrations.RunMigrations - Running migrations on database jdbc:h2:/home/aldair/.local/share/Tachidesk/database
22:36:39.408 [DefaultDispatcher-worker-2] INFO/Server: 22:36:39.408 [main] INFO  de.neonew.exposed.migrations.RunMigrations - Database version before migrations: 19
22:36:39.409 [DefaultDispatcher-worker-2] INFO/Server: 22:36:39.408 [main] INFO  de.neonew.exposed.migrations.RunMigrations - Migrations finished successfully
22:36:39.847 [DefaultDispatcher-worker-2] INFO/Server: 22:36:39.846 [main] INFO  io.javalin.Javalin - 
22:36:39.847 [DefaultDispatcher-worker-2] INFO/Server:        __                      __ _            __ __
22:36:39.847 [DefaultDispatcher-worker-2] INFO/Server:       / /____ _ _   __ ____ _ / /(_)____      / // /
22:36:39.847 [DefaultDispatcher-worker-2] INFO/Server:  __  / // __ `/| | / // __ `// // // __ \    / // /_
22:36:39.847 [DefaultDispatcher-worker-2] INFO/Server: / /_/ // /_/ / | |/ // /_/ // // // / / /   /__  __/
22:36:39.847 [DefaultDispatcher-worker-2] INFO/Server: \____/ \__,_/  |___/ \__,_//_//_//_/ /_/      /_/
22:36:39.847 [DefaultDispatcher-worker-2] INFO/Server: 
22:36:39.848 [DefaultDispatcher-worker-2] INFO/Server:           https://javalin.io/documentation
22:36:39.848 [DefaultDispatcher-worker-2] INFO/Server: 
22:36:39.856 [DefaultDispatcher-worker-2] INFO/Server: 22:36:39.855 [main] INFO  io.javalin.Javalin - Starting Javalin ...
22:36:39.869 [DefaultDispatcher-worker-2] INFO/Server: 22:36:39.868 [main] INFO  io.javalin.Javalin - You are running Javalin 4.2.0 (released January 2, 2022. Your Javalin version is 200 days old. Consider checking for a newer version.).
22:36:39.992 [DefaultDispatcher-worker-2] INFO/Server: 22:36:39.992 [main] INFO  io.javalin.Javalin - Listening on http://0.0.0.0:4567/
22:36:39.992 [DefaultDispatcher-worker-2] INFO/Server: 22:36:39.992 [main] INFO  io.javalin.Javalin - Javalin started in 137ms \o/
22:36:40.056 [DefaultDispatcher-worker-3] INFO/HttpClient: REQUEST: ws://localhost:4567/api/v1/downloads
22:36:40.057 [DefaultDispatcher-worker-3] INFO/HttpClient: METHOD: HttpMethod(value=GET)
22:36:40.207 [DefaultDispatcher-worker-3] INFO/HttpClient: RESPONSE: 101 Switching Protocols
22:36:40.208 [DefaultDispatcher-worker-3] INFO/HttpClient: METHOD: HttpMethod(value=GET)
22:36:40.208 [DefaultDispatcher-worker-3] INFO/HttpClient: FROM: ws://localhost:4567/api/v1/downloads
22:36:40.247 [DefaultDispatcher-worker-5] INFO/HttpClient: RESPONSE: 200 
22:36:40.247 [DefaultDispatcher-worker-5] INFO/HttpClient: METHOD: HttpMethod(value=GET)
22:36:40.248 [DefaultDispatcher-worker-5] INFO/HttpClient: FROM: https://api.github.com/repos/Suwayomi/Tachidesk-JUI/releases/latest
22:36:40.717 [DefaultDispatcher-worker-4] INFO/HttpClient: REQUEST: http://localhost:4567/api/v1/category/
22:36:40.718 [DefaultDispatcher-worker-4] INFO/HttpClient: METHOD: HttpMethod(value=GET)
22:36:41.012 [DefaultDispatcher-worker-4] INFO/HttpClient: RESPONSE: 200 OK
22:36:41.012 [DefaultDispatcher-worker-4] INFO/HttpClient: METHOD: HttpMethod(value=GET)
22:36:41.013 [DefaultDispatcher-worker-4] INFO/HttpClient: FROM: http://localhost:4567/api/v1/category/
22:36:41.045 [AWT-EventQueue-0] WARN/: Error getting categories
java.lang.Exception: Library is empty
	at ca.gosyer.jui.ui.library.LibraryScreenViewModel$getLibrary$1.invokeSuspend(LibraryScreenViewModel.kt:131) ~[tachidesk-jui.jar:?]
	at ca.gosyer.jui.ui.library.LibraryScreenViewModel$getLibrary$1.invoke(LibraryScreenViewModel.kt) ~[tachidesk-jui.jar:?]
	at ca.gosyer.jui.ui.library.LibraryScreenViewModel$getLibrary$1.invoke(LibraryScreenViewModel.kt) ~[tachidesk-jui.jar:?]
	at kotlinx.coroutines.flow.FlowKt__TransformKt$onEach$$inlined$unsafeTransform$1$2.emit(Emitters.kt:223) ~[tachidesk-jui.jar:?]
	at kotlinx.coroutines.flow.FlowKt__ChannelsKt.emitAllImpl$FlowKt__ChannelsKt(Channels.kt:62) ~[tachidesk-jui.jar:?]
	at kotlinx.coroutines.flow.FlowKt__ChannelsKt.access$emitAllImpl$FlowKt__ChannelsKt(Channels.kt:1) ~[tachidesk-jui.jar:?]
	at kotlinx.coroutines.flow.FlowKt__ChannelsKt$emitAllImpl$1.invokeSuspend(Channels.kt) ~[tachidesk-jui.jar:?]
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) ~[tachidesk-jui.jar:?]
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106) ~[tachidesk-jui.jar:?]
	at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:318) ~[?:?]
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:773) ~[?:?]
	at java.awt.EventQueue$4.run(EventQueue.java:720) ~[?:?]
	at java.awt.EventQueue$4.run(EventQueue.java:714) ~[?:?]
	at java.security.AccessController.doPrivileged(AccessController.java:399) ~[?:?]
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86) ~[?:?]
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:742) ~[?:?]
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203) ~[?:?]
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124) ~[?:?]
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113) ~[?:?]
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109) ~[?:?]
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) ~[?:?]
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:90) ~[?:?]
22:37:52.214 [DefaultDispatcher-worker-8] INFO/HttpClient: REQUEST: http://localhost:4567/api/v1/source/list
22:37:52.214 [DefaultDispatcher-worker-8] INFO/HttpClient: METHOD: HttpMethod(value=GET)
22:37:52.344 [DefaultDispatcher-worker-7] INFO/HttpClient: RESPONSE: 200 OK
22:37:52.344 [DefaultDispatcher-worker-7] INFO/HttpClient: METHOD: HttpMethod(value=GET)
22:37:52.345 [DefaultDispatcher-worker-7] INFO/HttpClient: FROM: http://localhost:4567/api/v1/source/list
22:37:52.472 [DefaultDispatcher-worker-5] INFO/HttpClient: REQUEST: http://localhost:4567/api/v1/extension/icon/localSource
22:37:52.472 [DefaultDispatcher-worker-5] INFO/HttpClient: METHOD: HttpMethod(value=GET)
22:37:52.473 [DefaultDispatcher-worker-8] INFO/HttpClient: REQUEST: http://localhost:4567/api/v1/extension/icon/tachiyomi-es.lectormanga-v1.3.25.apk
22:37:52.473 [DefaultDispatcher-worker-8] INFO/HttpClient: METHOD: HttpMethod(value=GET)
22:37:52.511 [DefaultDispatcher-worker-6] INFO/HttpClient: RESPONSE: 200 OK
22:37:52.511 [DefaultDispatcher-worker-6] INFO/HttpClient: METHOD: HttpMethod(value=GET)
22:37:52.512 [DefaultDispatcher-worker-6] INFO/HttpClient: FROM: http://localhost:4567/api/v1/extension/icon/localSource
22:37:52.596 [DefaultDispatcher-worker-8] INFO/HttpClient: RESPONSE: 200 OK
22:37:52.598 [DefaultDispatcher-worker-8] INFO/HttpClient: METHOD: HttpMethod(value=GET)
22:37:52.598 [DefaultDispatcher-worker-8] INFO/HttpClient: FROM: http://localhost:4567/api/v1/extension/icon/tachiyomi-es.lectormanga-v1.3.25.apk
22:37:53.216 [DefaultDispatcher-worker-4] INFO/HttpClient: REQUEST: http://localhost:4567/api/v1/source/7925520943983324764/filters?reset=true
22:37:53.216 [DefaultDispatcher-worker-4] INFO/HttpClient: METHOD: HttpMethod(value=GET)
22:37:53.217 [DefaultDispatcher-worker-7] INFO/HttpClient: REQUEST: http://localhost:4567/api/v1/source/7925520943983324764/popular/1
22:37:53.217 [DefaultDispatcher-worker-7] INFO/HttpClient: METHOD: HttpMethod(value=GET)
22:37:53.318 [DefaultDispatcher-worker-3] INFO/HttpClient: RESPONSE: 200 OK
22:37:53.319 [DefaultDispatcher-worker-3] INFO/HttpClient: METHOD: HttpMethod(value=GET)
22:37:53.319 [DefaultDispatcher-worker-3] INFO/HttpClient: FROM: http://localhost:4567/api/v1/source/7925520943983324764/filters?reset=true
22:37:53.493 [AWT-EventQueue-0] ERROR/UncaughtException: Uncaught exception in thread [AWT-EventQueue-0@35]
java.lang.IllegalArgumentException: Key 0 was already used. If you are using LazyColumn/Row please make sure you provide a unique key for each item.
	at androidx.compose.ui.layout.SubcomposeLayoutState.subcompose$ui(SubcomposeLayout.kt:214) ~[tachidesk-jui.jar:?]
	at androidx.compose.ui.layout.SubcomposeLayoutState$Scope.subcompose(SubcomposeLayout.kt:490) ~[tachidesk-jui.jar:?]
	at androidx.compose.foundation.lazy.layout.LazyLayoutPlaceablesProvider.getAndMeasure-0kLqBqw(LazyMeasurePolicy.kt:58) ~[tachidesk-jui.jar:?]
	at androidx.compose.foundation.lazy.list.LazyMeasuredItemProvider.getAndMeasure-oA9-DU0(LazyMeasuredItemProvider.kt:45) ~[tachidesk-jui.jar:?]
	at androidx.compose.foundation.lazy.list.LazyListMeasureKt.measureLazyList-wroFCeY(LazyListMeasure.kt:145) ~[tachidesk-jui.jar:?]
	at androidx.compose.foundation.lazy.list.LazyListKt$rememberLazyListMeasurePolicy$1$1.measure-3p2s80s(LazyList.kt:259) ~[tachidesk-jui.jar:?]
	at androidx.compose.foundation.lazy.layout.LazyLayoutKt$LazyLayout$2.invoke-0kLqBqw(LazyLayout.kt:55) ~[tachidesk-jui.jar:?]
	at androidx.compose.foundation.lazy.layout.LazyLayoutKt$LazyLayout$2.invoke(LazyLayout.kt:44) ~[tachidesk-jui.jar:?]
	at androidx.compose.ui.layout.SubcomposeLayoutState$createMeasurePolicy$1.measure-3p2s80s(SubcomposeLayout.kt:355) ~[tachidesk-jui.jar:?]
	at androidx.compose.ui.node.InnerPlaceable.measure-BRTryo0(InnerPlaceable.kt:55) ~[tachidesk-jui.jar:?]
	at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.measure-BRTryo0(DelegatingLayoutNodeWrapper.kt:131) ~[tachidesk-jui.jar:?]
	at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.measure-BRTryo0(DelegatingLayoutNodeWrapper.kt:131) ~[tachidesk-jui.jar:?]
	at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.measure-BRTryo0(DelegatingLayoutNodeWrapper.kt:131) ~[tachidesk-jui.jar:?]
	at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.measure-BRTryo0(DelegatingLayoutNodeWrapper.kt:131) ~[tachidesk-jui.jar:?]
	at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.measure-BRTryo0(DelegatingLayoutNodeWrapper.kt:131) ~[tachidesk-jui.jar:?]
	at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.measure-BRTryo0(DelegatingLayoutNodeWrapper.kt:131) ~[tachidesk-jui.jar:?]
	at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.measure-BRTryo0(DelegatingLayoutNodeWrapper.kt:131) ~[tachidesk-jui.jar:?]
	at androidx.compose.ui.graphics.SimpleGraphicsLayerModifier.measure-3p2s80s(GraphicsLayerModifier.kt:306) ~[tachidesk-jui.jar:?]
	at androidx.compose.ui.node.ModifiedLayoutNode.measure-BRTryo0(ModifiedLayoutNode.kt:39) ~[tachidesk-jui.jar:?]
	at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.measure-BRTryo0(DelegatingLayoutNodeWrapper.kt:131) ~[tachidesk-jui.jar:?]
	at androidx.compose.foundation.layout.FillModifier.measure-3p2s80s(Size.kt:658) ~[tachidesk-jui.jar:?]
	at androidx.compose.ui.node.ModifiedLayoutNode.measure-BRTryo0(ModifiedLayoutNode.kt:39) ~[tachidesk-jui.jar:?]
	at androidx.compose.ui.node.OuterMeasurablePlaceable$remeasure$2.invoke(OuterMeasurablePlaceable.kt:99) ~[tachidesk-jui.jar:?]
	at androidx.compose.ui.node.OuterMeasurablePlaceable$remeasure$2.invoke(OuterMeasurablePlaceable.kt:98) ~[tachidesk-jui.jar:?]
	at androidx.compose.runtime.snapshots.Snapshot$Companion.observe(Snapshot.kt:1798) ~[tachidesk-jui.jar:?]
	at androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(SnapshotStateObserver.kt:121) ~[tachidesk-jui.jar:?]
	at androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui(OwnerSnapshotObserver.kt:88) ~[tachidesk-jui.jar:?]
	at androidx.compose.ui.node.OwnerSnapshotObserver.observeMeasureSnapshotReads$ui(OwnerSnapshotObserver.kt:76) ~[tachidesk-jui.jar:?]
	at androidx.compose.ui.node.OuterMeasurablePlaceable.remeasure-BRTryo0(OuterMeasurablePlaceable.kt:98) ~[tachidesk-jui.jar:?]
	at androidx.compose.ui.node.LayoutNode.remeasure-_Sx5XlM$ui(LayoutNode.kt:1317) ~[tachidesk-jui.jar:?]
	at androidx.compose.ui.node.LayoutNode.remeasure-_Sx5XlM$ui$default(LayoutNode.kt:1313) ~[tachidesk-jui.jar:?]
	at androidx.compose.ui.node.MeasureAndLayoutDelegate.doRemeasure(MeasureAndLayoutDelegate.kt:170) ~[tachidesk-jui.jar:?]
	at androidx.compose.ui.node.MeasureAndLayoutDelegate.remeasureAndRelayoutIfNeeded(MeasureAndLayoutDelegate.kt:228) ~[tachidesk-jui.jar:?]
	at androidx.compose.ui.node.MeasureAndLayoutDelegate.access$remeasureAndRelayoutIfNeeded(MeasureAndLayoutDelegate.kt:38) ~[tachidesk-jui.jar:?]
	at androidx.compose.ui.node.MeasureAndLayoutDelegate.measureAndLayout(MeasureAndLayoutDelegate.kt:201) ~[tachidesk-jui.jar:?]
	at androidx.compose.ui.platform.SkiaBasedOwner.measureAndLayout(SkiaBasedOwner.skiko.kt:245) ~[tachidesk-jui.jar:?]
	at androidx.compose.ui.node.Owner$DefaultImpls.measureAndLayout$default(Owner.kt:182) ~[tachidesk-jui.jar:?]
	at androidx.compose.ui.ComposeScene.render(ComposeScene.skiko.kt:381) ~[tachidesk-jui.jar:?]
	at androidx.compose.ui.awt.ComposeLayer$1$onRender$1.invoke(ComposeLayer.desktop.kt:236) ~[tachidesk-jui.jar:?]
	at androidx.compose.ui.awt.ComposeLayer$1$onRender$1.invoke(ComposeLayer.desktop.kt:235) ~[tachidesk-jui.jar:?]
	at androidx.compose.ui.awt.ComposeLayer.catchExceptions(ComposeLayer.desktop.kt:88) ~[tachidesk-jui.jar:?]
	at androidx.compose.ui.awt.ComposeLayer.access$catchExceptions(ComposeLayer.desktop.kt:69) ~[tachidesk-jui.jar:?]
	at androidx.compose.ui.awt.ComposeLayer$1.onRender(ComposeLayer.desktop.kt:235) ~[tachidesk-jui.jar:?]
	at org.jetbrains.skiko.SkiaLayer.update$skiko(SkiaLayer.awt.kt:455) ~[tachidesk-jui.jar:?]
	at org.jetbrains.skiko.redrawer.LinuxOpenGLRedrawer.update(LinuxOpenGLRedrawer.kt:86) ~[tachidesk-jui.jar:?]
	at org.jetbrains.skiko.redrawer.LinuxOpenGLRedrawer.access$update(LinuxOpenGLRedrawer.kt:7) ~[tachidesk-jui.jar:?]
	at org.jetbrains.skiko.redrawer.LinuxOpenGLRedrawer$Companion$frameDispatcher$1.invokeSuspend(LinuxOpenGLRedrawer.kt:112) ~[tachidesk-jui.jar:?]
	at org.jetbrains.skiko.redrawer.LinuxOpenGLRedrawer$Companion$frameDispatcher$1.invoke(LinuxOpenGLRedrawer.kt) ~[tachidesk-jui.jar:?]
	at org.jetbrains.skiko.redrawer.LinuxOpenGLRedrawer$Companion$frameDispatcher$1.invoke(LinuxOpenGLRedrawer.kt) ~[tachidesk-jui.jar:?]
	at org.jetbrains.skiko.FrameDispatcher$job$1.invokeSuspend(FrameDispatcher.kt:33) ~[tachidesk-jui.jar:?]
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) ~[tachidesk-jui.jar:?]
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106) ~[tachidesk-jui.jar:?]
	at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:318) ~[?:?]
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:773) ~[?:?]
	at java.awt.EventQueue$4.run(EventQueue.java:720) ~[?:?]
	at java.awt.EventQueue$4.run(EventQueue.java:714) ~[?:?]
	at java.security.AccessController.doPrivileged(AccessController.java:399) ~[?:?]
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86) ~[?:?]
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:742) ~[?:?]
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203) ~[?:?]
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124) ~[?:?]
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113) ~[?:?]
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109) ~[?:?]
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) ~[?:?]
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:90) ~[?:?]
	Suppressed: kotlinx.coroutines.DiagnosticCoroutineContextException
22:37:54.299 [DefaultDispatcher-worker-3] INFO/HttpClient: RESPONSE: 200 OK
22:37:54.300 [DefaultDispatcher-worker-3] INFO/HttpClient: METHOD: HttpMethod(value=GET)
22:37:54.300 [DefaultDispatcher-worker-3] INFO/HttpClient: FROM: http://localhost:4567/api/v1/source/7925520943983324764/popular/1

[Feature Request] Multi selection for download

What feature should be added to Tachidesk-JUI?

Selection of multiple chapters or a range of chapters to download.

Why/Project's Benefit/Existing Problem

Downloading of multiple chapters or a whole series would be made easier.

[Feature Request] Flatpak-build

What feature should be added to Tachidesk-JUI?

A Flatpak build would be nice.

Why/Project's Benefit/Existing Problem

Right now its a little bit of a pain to install this program on the Steam Deck. A proper Flatpak build would make things way easier.
(preferably even publish it on the flathub repo)

[Feature Request] Scrollbars

What feature should be added to Tachidesk-JUI?

Scrollbars need to be added to every menu that supports scrolling.

Why/Project's Benefit/Existing Problem

Users without a mouse with a scrollwheel literally cannot scroll at all.

[Bug] Build error


Device information

  • Tachidesk-JUI version: (git commit 0015bcc)
  • Operating System: ( Fedora 35)
  • Server Type: ( Internal (i think) )
  • Client JVM version: (Java 17.0.1)

Steps to reproduce

Just try to build the project from the lastest github commit

##Logs

> Task :presentation:compileKotlinDesktop FAILED
e: /github/workspace/presentation/src/commonMain/kotlin/ca/gosyer/jui/ui/sources/home/SourceHomeScreenViewModel.kt: (44, 32): Unresolved reference: other

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':presentation:compileKotlinDesktop'.
> A failure occurred while executing org.jetbrains.kotlin.compilerRunner.GradleCompilerRunnerWithWorkers$GradleKotlinCompilerWorkAction
   > Compilation error. See log for more details

* Try:
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.

* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':presentation:compileKotlinDesktop'.
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.lambda$executeIfValid$1(ExecuteActionsTaskExecuter.java:147)
	at org.gradle.internal.Try$Failure.ifSuccessfulOrElse(Try.java:282)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:145)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:133)
	at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:77)
	at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
	at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:51)
	at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
	at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56)
	at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)
	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)
	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)
	at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:74)
	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:333)
	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:320)
	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:313)
	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:299)
	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.lambda$run$0(DefaultPlanExecutor.java:143)
	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:227)
	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:218)
	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:140)
	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
	at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
Caused by: org.gradle.workers.internal.DefaultWorkerExecutor$WorkExecutionException: A failure occurred while executing org.jetbrains.kotlin.compilerRunner.GradleCompilerRunnerWithWorkers$GradleKotlinCompilerWorkAction
	at org.gradle.workers.internal.DefaultWorkerExecutor$WorkItemExecution.waitForCompletion(DefaultWorkerExecutor.java:339)
	at org.gradle.internal.work.DefaultAsyncWorkTracker.lambda$waitForItemsAndGatherFailures$2(DefaultAsyncWorkTracker.java:131)
	at org.gradle.internal.Factories$1.create(Factories.java:31)
	at org.gradle.internal.work.DefaultWorkerLeaseService.withoutLocks(DefaultWorkerLeaseService.java:341)
	at org.gradle.internal.work.DefaultWorkerLeaseService.withoutLocks(DefaultWorkerLeaseService.java:326)
	at org.gradle.internal.work.DefaultAsyncWorkTracker.waitForItemsAndGatherFailures(DefaultAsyncWorkTracker.java:127)
	at org.gradle.internal.work.DefaultAsyncWorkTracker.waitForItemsAndGatherFailures(DefaultAsyncWorkTracker.java:93)
	at org.gradle.internal.work.DefaultAsyncWorkTracker.waitForAll(DefaultAsyncWorkTracker.java:79)
	at org.gradle.internal.work.DefaultAsyncWorkTracker.waitForCompletion(DefaultAsyncWorkTracker.java:67)
	at org.gradle.api.internal.tasks.execution.TaskExecution$3.run(TaskExecution.java:250)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:47)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:68)
	at org.gradle.api.internal.tasks.execution.TaskExecution.executeAction(TaskExecution.java:227)
	at org.gradle.api.internal.tasks.execution.TaskExecution.executeActions(TaskExecution.java:210)
	at org.gradle.api.internal.tasks.execution.TaskExecution.executeWithPreviousOutputFiles(TaskExecution.java:193)
	at org.gradle.api.internal.tasks.execution.TaskExecution.execute(TaskExecution.java:171)
	at org.gradle.internal.execution.steps.ExecuteStep.executeInternal(ExecuteStep.java:89)
	at org.gradle.internal.execution.steps.ExecuteStep.access$000(ExecuteStep.java:40)
	at org.gradle.internal.execution.steps.ExecuteStep$1.call(ExecuteStep.java:53)
	at org.gradle.internal.execution.steps.ExecuteStep$1.call(ExecuteStep.java:50)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
	at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:50)
	at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:40)
	at org.gradle.internal.execution.steps.RemovePreviousOutputsStep.execute(RemovePreviousOutputsStep.java:68)
	at org.gradle.internal.execution.steps.RemovePreviousOutputsStep.execute(RemovePreviousOutputsStep.java:38)
	at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:48)
	at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:36)
	at org.gradle.internal.execution.steps.CancelExecutionStep.execute(CancelExecutionStep.java:41)
	at org.gradle.internal.execution.steps.TimeoutStep.executeWithoutTimeout(TimeoutStep.java:74)
	at org.gradle.internal.execution.steps.TimeoutStep.execute(TimeoutStep.java:55)
	at org.gradle.internal.execution.steps.CreateOutputsStep.execute(CreateOutputsStep.java:51)
	at org.gradle.internal.execution.steps.CreateOutputsStep.execute(CreateOutputsStep.java:29)
	at org.gradle.internal.execution.steps.CaptureStateAfterExecutionStep.execute(CaptureStateAfterExecutionStep.java:61)
	at org.gradle.internal.execution.steps.CaptureStateAfterExecutionStep.execute(CaptureStateAfterExecutionStep.java:42)
	at org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:60)
	at org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:27)
	at org.gradle.internal.execution.steps.BuildCacheStep.executeWithoutCache(BuildCacheStep.java:180)
	at org.gradle.internal.execution.steps.BuildCacheStep.lambda$execute$1(BuildCacheStep.java:75)
	at org.gradle.internal.Either$Right.fold(Either.java:175)
	at org.gradle.internal.execution.caching.CachingState.fold(CachingState.java:59)
	at org.gradle.internal.execution.steps.BuildCacheStep.execute(BuildCacheStep.java:73)
	at org.gradle.internal.execution.steps.BuildCacheStep.execute(BuildCacheStep.java:48)
	at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:36)
	at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:25)
	at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:36)
	at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:22)
	at org.gradle.internal.execution.steps.SkipUpToDateStep.executeBecause(SkipUpToDateStep.java:110)
	at org.gradle.internal.execution.steps.SkipUpToDateStep.lambda$execute$2(SkipUpToDateStep.java:56)
	at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:56)
	at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:38)
	at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:73)
	at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:44)
	at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:37)
	at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:27)
	at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:89)
	at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:50)
	at org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:114)
	at org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:57)
	at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:76)
	at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:50)
	at org.gradle.internal.execution.steps.SkipEmptyWorkStep.executeWithNoEmptySources(SkipEmptyWorkStep.java:249)
	at org.gradle.internal.execution.steps.SkipEmptyWorkStep.executeWithNoEmptySources(SkipEmptyWorkStep.java:204)
	at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:83)
	at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:54)
	at org.gradle.internal.execution.steps.RemoveUntrackedExecutionStateStep.execute(RemoveUntrackedExecutionStateStep.java:32)
	at org.gradle.internal.execution.steps.RemoveUntrackedExecutionStateStep.execute(RemoveUntrackedExecutionStateStep.java:21)
	at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsStartedStep.execute(MarkSnapshottingInputsStartedStep.java:38)
	at org.gradle.internal.execution.steps.LoadPreviousExecutionStateStep.execute(LoadPreviousExecutionStateStep.java:43)
	at org.gradle.internal.execution.steps.LoadPreviousExecutionStateStep.execute(LoadPreviousExecutionStateStep.java:31)
	at org.gradle.internal.execution.steps.AssignWorkspaceStep.lambda$execute$0(AssignWorkspaceStep.java:40)
	at org.gradle.api.internal.tasks.execution.TaskExecution$4.withWorkspace(TaskExecution.java:287)
	at org.gradle.internal.execution.steps.AssignWorkspaceStep.execute(AssignWorkspaceStep.java:40)
	at org.gradle.internal.execution.steps.AssignWorkspaceStep.execute(AssignWorkspaceStep.java:30)
	at org.gradle.internal.execution.steps.IdentityCacheStep.execute(IdentityCacheStep.java:37)
	at org.gradle.internal.execution.steps.IdentityCacheStep.execute(IdentityCacheStep.java:27)
	at org.gradle.internal.execution.steps.IdentifyStep.execute(IdentifyStep.java:44)
	at org.gradle.internal.execution.steps.IdentifyStep.execute(IdentifyStep.java:33)
	at org.gradle.internal.execution.impl.DefaultExecutionEngine$1.execute(DefaultExecutionEngine.java:76)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:144)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:133)
	at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:77)
	at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
	at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:51)
	at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
	at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56)
	at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)
	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)
	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)
	at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:74)
	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:333)
	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:320)
	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:313)
	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:299)
	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.lambda$run$0(DefaultPlanExecutor.java:143)
	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:227)
	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:218)
	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:140)
	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
	at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
Caused by: org.gradle.api.GradleException: Compilation error. See log for more details
	at org.jetbrains.kotlin.gradle.tasks.TasksUtilsKt.throwGradleExceptionIfError(tasksUtils.kt:22)
	at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.run(GradleKotlinCompilerWork.kt:131)
	at org.jetbrains.kotlin.compilerRunner.GradleCompilerRunnerWithWorkers$GradleKotlinCompilerWorkAction.execute(GradleCompilerRunnerWithWorkers.kt:79)
	at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:63)
	at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:66)
	at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:62)
	at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:97)
	at org.gradle.workers.internal.NoIsolationWorkerFactory$1.lambda$execute$0(NoIsolationWorkerFactory.java:62)
	at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:44)
	at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:41)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
	at org.gradle.workers.internal.AbstractWorker.executeWrappedInBuildOperation(AbstractWorker.java:41)
	at org.gradle.workers.internal.NoIsolationWorkerFactory$1.execute(NoIsolationWorkerFactory.java:59)
	at org.gradle.workers.internal.DefaultWorkerExecutor.lambda$submitWork$2(DefaultWorkerExecutor.java:205)
	at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runExecution(DefaultConditionalExecutionQueue.java:187)
	at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.access$700(DefaultConditionalExecutionQueue.java:120)
	at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner$1.run(DefaultConditionalExecutionQueue.java:162)
	at org.gradle.internal.Factories$1.create(Factories.java:31)
	at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:270)
	at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:119)
	at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:124)
	at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runBatch(DefaultConditionalExecutionQueue.java:157)
	at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.run(DefaultConditionalExecutionQueue.java:126)
	... 2 more


* Get more help at https://help.gradle.org

BUILD FAILED in 5m 49s

Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0.

You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.

See https://docs.gradle.org/7.4.2/userguide/command_line_interface.html#sec:command_line_warnings

Execution optimizations have been disabled for 1 invalid unit(s) of work during this build to ensure correctness.
Please consult deprecation warnings for more details.
40 actionable tasks: 40 executed

Full logs: https://github.com/AldairbotHerotaku/Tachidesk-JUI/runs/8009132468?check_suite_focus=true

[Bug] Tachidesk fails to connect to the server

Device information

  • Tachidesk-JUI version: v1.3.0
  • Operating System: Arch Linux
  • Desktop Environment: KDE plasma 5.26.2
  • Server Type: Internal
  • Client JVM version: java-19-openjdk
  • Server JVM version: java-19-openjdk

Steps to reproduce

  1. Launch Tachidesk-JUI
  2. Trying to connect to the server

Expected behavior

Tachidesk connecting to the server

Actual behavior

Connection to the server fails.

here is the terminal log

I've recently changed OS, in my previous system Tachidesk-jui worked perfectly which is strange - maybe something openjdk related? (I was using 17 before)

installed with yay -S tachidesk-jui

[Bug] Mangadex Blank Settings

1637769263

Device information

  • Tachidesk-JUI version: Tachidesk-JUI v1.1.2
  • Operating System: ArchLinux
  • Desktop Environment: OpenBox
  • Server Type: Internal
  • Client JVM version: 17.0.1.u12-1
  • Server JVM version: Same as Client

Steps to reproduce

  1. Fresh Install Extension Mangadex
  2. Open Sources and Settings

logs.txt

[Bug] Pop-up flickering

Steps to reproduce

  1. Go to Reader settings (or any other setting with pop-up windows).
  2. Click two or more setting with pop-ups without closing the opened pop-up.

Expected behavior

Prevent the app from opening an new pop-up.

Actual behavior

Allows a new pop-ups to open and pop-up windows start flickering.

Additional info

This is not an issue with the reader (could open multiple chapters) but only in the setting.

[Feature Request] Zoom Function, Make Pages Larger

What feature should be added to Tachidesk-JUI?

A useful feature would be implementing a zoom function, whether it's a button or keyboard shortcut. If you could apply a setting to dynamically adjust the page size, that would be great too. For instance, "fit window height" would scale the page when you resize the window.

Why/Project's Benefit/Existing Problem

Makes manga more readable and useful for people who want to manage their windows a certain way for productivity.

[Bug] Update not showing new chapters

Device information

  • Tachidesk-JUI version: achidesk-jui_1.3.0-1
  • Operating System: Ubuntu 20.04
  • Desktop Environment: Gnome 3.36.8
  • Server Type: Internal
  • Client JVM version: openjdk 11.0.15
  • Server JVM version: Same as Client

Steps to reproduce

  1. Open JUI
  2. Refresh in a manga in library to find that your page says 'No chapter found', refresh again to view the same old.

Expected behavior

To view new chaps

Actual behavior

A text appears saying 'No chapters found'

[Feature Request] Update checker

What feature should be added to TachideskJUI?

Every certain period of time the app should check for updates

Why/Project's Benefit/Existing Problem

Will help users keep updated

Tachidesk-JUI icon in windows 10.

on Windows the app icon when installing is just the Kotlin icon. why not make change the icon to make the one's you're using on linux?
app icon

I think it'd look better this way and to easily distinguish it from other programs.

[Feature Request] History Section

What feature should be added to Tachidesk-JUI?

A section that logs manga that you've read.
A very traditional history similar to Tachiyomi which can read the data in Tachiyomi backups.

Why/Project's Benefit/Existing Problem

Enhance the experience of using Tachidesk.

[Bug] Color picker not functioning as intended (visually for the most part)

Steps to reproduce

  1. Choosing primary or secondary from Appearance menu.

Expected behavior

  1. The tickmark should change to different option when clicked.
    image

Actual behavior

  1. Both the sections in the above window stay the same when clicked but works as intended in the background. The bottom section should include a tick mark as well.

  2. Right side of the custom color picker is not displaying properly. I think the selecting the element is glitched?
    Im guessing splitting the right side to elements to select from failed . Now, each element now displays the whole range of colors rather than small part of them to choose from.
    image

[Feature Request] Download all button


What feature should be added to Tachidesk-JUI?

download all button.

Why/Project's Benefit/Existing Problem

Since mangas have lots of chapters. it will be easier rather than download chapters one by one

[Feature Request] Better Scrolling.

What feature should be added to Tachidesk-JUI?

Ability to change the way scrolling currently works.

A suggestion- Left and right should change pages of the manga, up and down should scroll a little and Space bar should scroll a page worth like it currently does with wasd||up down left right.

What I really desire is rather a menu that lets me customize the way I want those keys to function.

Why/Project's Benefit/Existing Problem

This will make the JUI more user-friendly.

[Bug] tachidesk jui windows not installing extension's

Device information

  • Tachidesk-JUI version: version 1.2.1
  • Operating System: windows 10 20h2
  • Desktop Environment: windows
  • Server Type: extension
  • Client JVM version: msi version
  • Server JVM version: msi

Steps to reproduce

  1. Download extension
  2. Enjoy

Expected behavior

Extension should install and then be usable

Actual behavior

Doesnt install, when clicked refreshed the page whenever the install button is clicked.

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.