diff --git a/server/src/main/kotlin/ir/armor/tachidesk/impl/util/CachedImageResponse.kt b/server/src/main/kotlin/ir/armor/tachidesk/impl/util/CachedImageResponse.kt index 2a8e424a..e8eb2c06 100644 --- a/server/src/main/kotlin/ir/armor/tachidesk/impl/util/CachedImageResponse.kt +++ b/server/src/main/kotlin/ir/armor/tachidesk/impl/util/CachedImageResponse.kt @@ -23,8 +23,9 @@ object CachedImageResponse { } private fun findFileNameStartingWith(directoryPath: String, fileName: String): String? { + val target = "$fileName." File(directoryPath).listFiles().forEach { file -> - if (file.name.startsWith("$fileName.")) + if (file.name.startsWith(target)) return "$directoryPath/${file.name}" } return null diff --git a/server/src/main/kotlin/ir/armor/tachidesk/server/JavalinSetup.kt b/server/src/main/kotlin/ir/armor/tachidesk/server/JavalinSetup.kt index 6192df0b..594a6343 100644 --- a/server/src/main/kotlin/ir/armor/tachidesk/server/JavalinSetup.kt +++ b/server/src/main/kotlin/ir/armor/tachidesk/server/JavalinSetup.kt @@ -36,9 +36,8 @@ import ir.armor.tachidesk.impl.backup.legacy.LegacyBackupImport.restoreLegacyBac import ir.armor.tachidesk.server.internal.About.getAbout import ir.armor.tachidesk.server.util.openInBrowser import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.future.future +import kotlinx.coroutines.newFixedThreadPoolContext import mu.KotlinLogging import java.io.IOException import java.text.SimpleDateFormat @@ -55,7 +54,9 @@ import kotlin.concurrent.thread object JavalinSetup { private val logger = KotlinLogging.logger {} - private val scope = CoroutineScope(SupervisorJob() + Dispatchers.Default) + + @kotlinx.coroutines.ObsoleteCoroutinesApi + private val scope = CoroutineScope(newFixedThreadPoolContext(200, "javalin-future")) private fun future(block: suspend CoroutineScope.() -> T): CompletableFuture { return scope.future(block = block) diff --git a/webUI/react/src/components/navbar/ReaderNavBar.tsx b/webUI/react/src/components/navbar/ReaderNavBar.tsx index c3f674fd..23e9ced3 100644 --- a/webUI/react/src/components/navbar/ReaderNavBar.tsx +++ b/webUI/react/src/components/navbar/ReaderNavBar.tsx @@ -46,7 +46,7 @@ const useStyles = (settings: IReaderSettings) => makeStyles((theme: Theme) => ({ position: settings.staticNav ? 'sticky' : 'fixed', top: 0, left: 0, - minWidth: '300px', + width: '300px', height: '100vh', overflowY: 'auto', backgroundColor: '#0a0b0b', diff --git a/webUI/react/src/components/reader/pager/PagedPager.tsx b/webUI/react/src/components/reader/pager/PagedPager.tsx index 3ac8bdfb..3fd24748 100644 --- a/webUI/react/src/components/reader/pager/PagedPager.tsx +++ b/webUI/react/src/components/reader/pager/PagedPager.tsx @@ -7,7 +7,7 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ import { makeStyles } from '@material-ui/core/styles'; -import React, { useEffect } from 'react'; +import React, { useEffect, useRef } from 'react'; import { useHistory } from 'react-router-dom'; import Page from '../Page'; @@ -30,11 +30,12 @@ export default function PagedReader(props: IReaderProps) { const classes = useStyles(); const history = useHistory(); + const pageRef = useRef(null); + function nextPage() { if (curPage < pages.length - 1) { setCurPage(curPage + 1); } else if (settings.loadNextonEnding) { - setCurPage(0); history.push(`/manga/${manga.id}/chapter/${chapter.index + 1}`); } } @@ -66,16 +67,16 @@ export default function PagedReader(props: IReaderProps) { useEffect(() => { document.addEventListener('keyup', keyboardControl, false); - document.addEventListener('click', clickControl); + pageRef.current?.addEventListener('click', clickControl); return () => { document.removeEventListener('keyup', keyboardControl); - document.removeEventListener('click', clickControl); + pageRef.current?.removeEventListener('click', clickControl); }; - }, [curPage]); + }, [curPage, pageRef]); return ( -
+
{ setChapter(initialChapter); + setCurPage(0); client.get(`/api/v1/manga/${mangaId}/chapter/${chapterIndex}`) .then((response) => response.data) .then((data:IChapter) => {