suwayomi / suwayomi-jui Goto Github PK
View Code? Open in Web Editor NEWA Suwayomi-Server client built in Compose Multiplatform
License: Mozilla Public License 2.0
A Suwayomi-Server client built in Compose Multiplatform
License: Mozilla Public License 2.0
Add a Dutch translation to the Weblate project.
My mother tongue is Dutch and I would like to translate and use it in my own language.
Provide an option in the settings to download comics to the Tachidesk-Server
Download the manga to Tachidesk-Server on the Android client instead of saving it to the phone, which can reduce the occupancy of the phone's storage and better manage the manga
Listening for volume up (previous) and volume down (forward) to navigate pages.
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.
The manga page should have a well designed menu that displays the information in an easily readable format.
It looks like crap currently
Allow setting the datafolder of the underlying server, maybe by default
Allows separation of standalone Tachidesk-Servers
deb support is fine. But, it will be wonderful to cover multiple distributions. So, snap/appimage will be great
not all user use debian based distributions. So, universal packaging like snap/appimage will be great
After the reader finishes loading, the cpu usage should be lower.
After the reader finishes loading the image and waiting for a few minutes, the cpu usage is still high(about 20%).
Also no more log in the rolling.log during high cpu usage after loading.
Should start client app with window.
Error window, followed with error entry in log (see below) and app exit.
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.
Is their anyway to change the download location of manga from sources
Adding smooth scrolling will increase overall user experience when navigating through the app and also in the reader.
ability to change different directory like tachiyomi
Suppose, we are out of space on specific drive. we can switch to different partition to solve the problem
The reader should have a double pages mode that allows displaying 2 pages at a time.
It allows a better manga feel when the images will be displayed side by side.
A simple user authentication using username & password or only password before entering the app.
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.
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).
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.
Would you serve it please.
It doesn't crash.
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".
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.
Category should be reorganized
Category is in its original position
Nothing much
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.
Sources list/grid should have a well designed menu that allows easy navigation
It looks like crap currently
Upon finishing a manga, it gets stuck with this and does not mark the chapter as read as well.
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.
Automatically load the next chapter after the user finishes the current chapter
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.
Support for pinephone
Pinephone runs on aarch64 and has 1440ร720 screen
When installing say the app needs at least Java 8, or install it
App is installed even when no JRE is available
For the deb file I have experimented with what is needed, which can probably turned into a script
ar x tachidesk-jui_1.2.1-1_amd64.deb
control.tar.xz/control.tar/./control
line 9 which defaults to Depends: libc6, libexpat1, libuuid1, xdg-utils, zlib1g
and add java8-runtime-headless
ar rcs tachidesk-jui_1.2.1-1_amd64.deb debian-binary ./control.tar.gz ./data.tar.xz
Adding chocolatey installation into the documentation
It helps with installation like the other packages
A option to hide 18+ sources and extensions should be added for those who have no need to see them.
Will allow more users to choose to use the app if they dont have to deal with 18+ stuff.
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.
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.
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).
View the section for select a manga
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
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
Selection of multiple chapters or a range of chapters to download.
Downloading of multiple chapters or a whole series would be made easier.
A Flatpak build would be nice.
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)
Scrollbars need to be added to every menu that supports scrolling.
Users without a mouse with a scrollwheel literally cannot scroll at all.
I hope you can customize the download folder
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
Tachidesk connecting to the server
Connection to the server fails.
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
Prevent the app from opening an new pop-up.
Allows a new pop-ups to open and pop-up windows start flickering.
This is not an issue with the reader (could open multiple chapters) but only in the setting.
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.
Makes manga more readable and useful for people who want to manage their windows a certain way for productivity.
To view new chaps
A text appears saying 'No chapters found'
Every certain period of time the app should check for updates
Will help users keep updated
Hello, may I ask why I have downloaded many comics, but the library list is still empty
A section that logs manga that you've read.
A very traditional history similar to Tachiyomi which can read the data in Tachiyomi backups.
Enhance the experience of using Tachidesk.
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.
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.
download all button.
Since mangas have lots of chapters. it will be easier rather than download chapters one by one
Is it possible to replace the included tachidesk jar with the more updated version in the main repo?
I tried to just edit it with 7zip but it fails with 'not a valid jar' as expected.
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.
This will make the JUI more user-friendly.
Extension should install and then be usable
Doesnt install, when clicked refreshed the page whenever the install button is clicked.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.