add manga data to download queue object (#244)

* add manga data to download queue object

* fix lint erro
This commit is contained in:
Aria Moradi
2021-11-07 21:32:57 +03:30
committed by GitHub
parent 35238b3da1
commit 3d7953d977
4 changed files with 14 additions and 7 deletions
@@ -10,6 +10,7 @@ package suwayomi.tachidesk.manga.controller
import io.javalin.http.Context
import io.javalin.websocket.WsConfig
import suwayomi.tachidesk.manga.impl.download.DownloadManager
import suwayomi.tachidesk.server.JavalinSetup.future
object DownloadController {
/** Download queue stats */
@@ -52,9 +53,11 @@ object DownloadController {
val chapterIndex = ctx.pathParam("chapterIndex").toInt()
val mangaId = ctx.pathParam("mangaId").toInt()
DownloadManager.enqueue(chapterIndex, mangaId)
ctx.status(200)
ctx.future(
future {
DownloadManager.enqueue(chapterIndex, mangaId)
}
)
}
/** delete chapter from download queue */
@@ -12,6 +12,7 @@ import io.javalin.websocket.WsMessageContext
import org.jetbrains.exposed.sql.and
import org.jetbrains.exposed.sql.select
import org.jetbrains.exposed.sql.transactions.transaction
import suwayomi.tachidesk.manga.impl.Manga.getManga
import suwayomi.tachidesk.manga.impl.download.model.DownloadChapter
import suwayomi.tachidesk.manga.impl.download.model.DownloadState.Downloading
import suwayomi.tachidesk.manga.impl.download.model.DownloadStatus
@@ -69,7 +70,7 @@ object DownloadManager {
)
}
fun enqueue(chapterIndex: Int, mangaId: Int) {
suspend fun enqueue(chapterIndex: Int, mangaId: Int) {
if (downloadQueue.none { it.mangaId == mangaId && it.chapterIndex == chapterIndex }) {
downloadQueue.add(
DownloadChapter(
@@ -80,7 +81,8 @@ object DownloadManager {
ChapterTable.select { (ChapterTable.manga eq mangaId) and (ChapterTable.sourceOrder eq chapterIndex) }
.first()
}
)
),
manga = getManga(mangaId)
)
)
start()
@@ -50,7 +50,7 @@ class Downloader(private val downloadQueue: CopyOnWriteArrayList<DownloadChapter
download.chapter = runBlocking { getChapter(download.chapterIndex, download.mangaId) }
step()
val pageCount = download.chapter!!.pageCount
val pageCount = download.chapter.pageCount
for (pageNum in 0 until pageCount) {
runBlocking { getPageImage(download.mangaId, download.chapterIndex, pageNum) }
// TODO: retry on error with 2,4,8 seconds of wait
@@ -9,12 +9,14 @@ package suwayomi.tachidesk.manga.impl.download.model
import suwayomi.tachidesk.manga.impl.download.model.DownloadState.Queued
import suwayomi.tachidesk.manga.model.dataclass.ChapterDataClass
import suwayomi.tachidesk.manga.model.dataclass.MangaDataClass
class DownloadChapter(
val chapterIndex: Int,
val mangaId: Int,
var chapter: ChapterDataClass,
var manga: MangaDataClass,
var state: DownloadState = Queued,
var progress: Float = 0f,
var tries: Int = 0,
var chapter: ChapterDataClass? = null,
)