Fix race condition of ComicInfo.xml modification

This commit is contained in:
FooIbar committed 2024-05-21 19:54:41 +08:00
1 parent f0ee88b4d6
commit 48fdaaca0c
2 files changed
+11 -16

No files matched your search

@@ -43,7 +43,6 @@ import com.hippo.ehviewer.util.sendTo
import com.hippo.unifile.UniFile
import com.hippo.unifile.asUniFile
import com.hippo.unifile.openOutputStream
import eu.kanade.tachiyomi.util.lang.withNonCancellableContext
import eu.kanade.tachiyomi.util.system.logcat
import io.ktor.client.plugins.onDownload
import io.ktor.client.statement.HttpResponse
@@ -323,9 +322,7 @@ class SpiderDen(val info: GalleryInfo) {
createFile(COMIC_INFO_FILE)?.also {
runCatching {
if (info !is GalleryDetail && fetchMetadata) {
withNonCancellableContext {
EhEngine.fillGalleryListByApi(listOf(info))
}
EhEngine.fillGalleryListByApi(listOf(info))
}
info.getComicInfo().apply {
write(it)
@@ -244,12 +244,15 @@ class SpiderQueen private constructor(val galleryInfo: GalleryInfo) : CoroutineS
if (archiveJob.isActive) {
archiveJob.join()
}
runCatching {
if (!mSpiderDen.postArchive()) {
if (!mSpiderDen.postArchive()) {
if (mWorkerScope.isDownloadMode) {
mSpiderDen.writeComicInfo()
}
runCatching {
writeSpiderInfoToLocal()
}.onFailure {
logcat(it)
}
}.onFailure {
logcat(it)
}
queenScope.cancel()
}
@@ -483,13 +486,7 @@ class SpiderQueen private constructor(val galleryInfo: GalleryInfo) : CoroutineS
val gid = galleryInfo.gid
return (sQueenMap[gid] ?: SpiderQueen(galleryInfo).also { sQueenMap[gid] = it }).apply {
setMode(mode)
launch {
// Will create download dir if not exists
updateMode()
if (mode == MODE_DOWNLOAD) {
mSpiderDen.writeComicInfo()
}
}
launch { updateMode() }
}
}
@@ -516,7 +513,8 @@ class SpiderQueen private constructor(val galleryInfo: GalleryInfo) : CoroutineS
private val downloadTimeout = Settings.downloadTimeout.seconds
private val delayLock = Mutex()
private var lastRequestTime = TimeSource.Monotonic.markNow()
private var isDownloadMode = false
var isDownloadMode = false
private set
fun cancelDecode(index: Int) {
decoder.cancel(index)