From 4441ea2c5dfc199b74cef93350926abcbe3e12f5 Mon Sep 17 00:00:00 2001 From: tarsin Date: Wed, 12 Jul 2023 09:58:31 +0800 Subject: [PATCH] Suspend DownloadDirnameDao load --- app/src/main/java/com/hippo/ehviewer/EhDB.kt | 3 +-- .../com/hippo/ehviewer/dao/DownloadDirnameDao.kt | 2 +- .../com/hippo/ehviewer/download/DownloadManager.kt | 6 +++--- .../java/com/hippo/ehviewer/spider/SpiderDen.kt | 14 ++++++-------- .../java/com/hippo/ehviewer/spider/SpiderQueen.kt | 1 + .../com/hippo/ehviewer/ui/scene/DownloadsScene.kt | 8 ++++---- .../hippo/ehviewer/ui/scene/GalleryDetailScene.kt | 4 ++-- 7 files changed, 18 insertions(+), 20 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/EhDB.kt b/app/src/main/java/com/hippo/ehviewer/EhDB.kt index b583cd645..d54542e34 100644 --- a/app/src/main/java/com/hippo/ehviewer/EhDB.kt +++ b/app/src/main/java/com/hippo/ehviewer/EhDB.kt @@ -69,8 +69,7 @@ object EhDB { db.downloadsDao().delete(downloadInfo) } - @Synchronized - fun getDownloadDirname(gid: Long): String? { + suspend fun getDownloadDirname(gid: Long): String? { val dao = db.downloadDirnameDao() val raw = dao.load(gid) return raw?.dirname diff --git a/app/src/main/java/com/hippo/ehviewer/dao/DownloadDirnameDao.kt b/app/src/main/java/com/hippo/ehviewer/dao/DownloadDirnameDao.kt index a2d81e9b9..b3ca5d7d0 100644 --- a/app/src/main/java/com/hippo/ehviewer/dao/DownloadDirnameDao.kt +++ b/app/src/main/java/com/hippo/ehviewer/dao/DownloadDirnameDao.kt @@ -8,7 +8,7 @@ import androidx.room.Update @Dao interface DownloadDirnameDao { @Query("SELECT * FROM DOWNLOAD_DIRNAME WHERE GID = :gid") - fun load(gid: Long): DownloadDirname? + suspend fun load(gid: Long): DownloadDirname? @Update suspend fun update(downloadDirname: DownloadDirname) diff --git a/app/src/main/java/com/hippo/ehviewer/download/DownloadManager.kt b/app/src/main/java/com/hippo/ehviewer/download/DownloadManager.kt index d503dee10..47f201489 100644 --- a/app/src/main/java/com/hippo/ehviewer/download/DownloadManager.kt +++ b/app/src/main/java/com/hippo/ehviewer/download/DownloadManager.kt @@ -25,9 +25,9 @@ import com.hippo.ehviewer.client.data.GalleryInfo import com.hippo.ehviewer.dao.DownloadInfo import com.hippo.ehviewer.dao.DownloadLabel import com.hippo.ehviewer.image.Image -import com.hippo.ehviewer.spider.SpiderDen import com.hippo.ehviewer.spider.SpiderQueen import com.hippo.ehviewer.spider.SpiderQueen.OnSpiderListener +import com.hippo.ehviewer.spider.getGalleryDownloadDir import com.hippo.ehviewer.spider.readCompatFromUniFile import com.hippo.ehviewer.spider.write import com.hippo.ehviewer.util.AppConfig @@ -589,8 +589,8 @@ object DownloadManager : OnSpiderListener { } } - private fun resetReadingProgress(gid: Long) { - val downloadDir = SpiderDen.getGalleryDownloadDir(gid) ?: return + private suspend fun resetReadingProgress(gid: Long) { + val downloadDir = getGalleryDownloadDir(gid) ?: return val file = downloadDir.findFile(SpiderQueen.SPIDER_INFO_FILENAME) ?: return val spiderInfo = readCompatFromUniFile(file) ?: return spiderInfo.startPage = 0 diff --git a/app/src/main/java/com/hippo/ehviewer/spider/SpiderDen.kt b/app/src/main/java/com/hippo/ehviewer/spider/SpiderDen.kt index 86693be4a..87a0a7ea0 100644 --- a/app/src/main/java/com/hippo/ehviewer/spider/SpiderDen.kt +++ b/app/src/main/java/com/hippo/ehviewer/spider/SpiderDen.kt @@ -46,7 +46,7 @@ import com.hippo.ehviewer.EhApplication.Companion.imageCache as sCache class SpiderDen(private val mGalleryInfo: GalleryInfo) { private val mGid = mGalleryInfo.gid - var downloadDir: UniFile? = getGalleryDownloadDir(mGid)?.takeIf { it.isDirectory } + var downloadDir: UniFile? = null @Volatile @SpiderQueen.Mode @@ -261,13 +261,6 @@ class SpiderDen(private val mGalleryInfo: GalleryInfo) { override fun close() {} } } - - companion object { - fun getGalleryDownloadDir(gid: Long): UniFile? { - val dirname = EhDB.getDownloadDirname(gid) ?: return null - return downloadLocation.subFile(dirname) - } - } } private val COMPAT_IMAGE_EXTENSIONS = SUPPORT_IMAGE_EXTENSIONS + ".jpeg" @@ -295,3 +288,8 @@ suspend fun GalleryInfo.putToDownloadDir() { val dirname = FileUtils.sanitizeFilename("$gid-$title") EhDB.putDownloadDirname(gid, dirname) } + +suspend fun getGalleryDownloadDir(gid: Long): UniFile? { + val dirname = EhDB.getDownloadDirname(gid) ?: return null + return downloadLocation.subFile(dirname) +} diff --git a/app/src/main/java/com/hippo/ehviewer/spider/SpiderQueen.kt b/app/src/main/java/com/hippo/ehviewer/spider/SpiderQueen.kt index 1f450e25b..f6af6c540 100644 --- a/app/src/main/java/com/hippo/ehviewer/spider/SpiderQueen.kt +++ b/app/src/main/java/com/hippo/ehviewer/spider/SpiderQueen.kt @@ -224,6 +224,7 @@ class SpiderQueen private constructor(val galleryInfo: GalleryInfo) : CoroutineS private val prepareJob = launchIO { doPrepare() } private suspend fun doPrepare() { + mSpiderDen.downloadDir = getGalleryDownloadDir(galleryInfo.gid)?.takeIf { it.isDirectory } mSpiderInfo = readSpiderInfoFromLocal() ?: readSpiderInfoFromInternet() ?: return mPageStateArray = IntArray(mSpiderInfo.pages) notifyGetPages(mSpiderInfo.pages) diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/DownloadsScene.kt b/app/src/main/java/com/hippo/ehviewer/ui/scene/DownloadsScene.kt index 59cbe0ec3..7b082dfc5 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/DownloadsScene.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/DownloadsScene.kt @@ -74,7 +74,7 @@ import com.hippo.ehviewer.download.DownloadManager.DownloadInfoListener import com.hippo.ehviewer.download.DownloadService import com.hippo.ehviewer.download.DownloadService.Companion.clear import com.hippo.ehviewer.ktbuilder.imageRequest -import com.hippo.ehviewer.spider.SpiderDen +import com.hippo.ehviewer.spider.getGalleryDownloadDir import com.hippo.ehviewer.spider.putToDownloadDir import com.hippo.ehviewer.ui.legacy.AutoStaggeredGridLayoutManager import com.hippo.ehviewer.ui.legacy.BaseDialogBuilder @@ -778,7 +778,7 @@ class DownloadsScene : val files = arrayOfNulls(mDownloadInfoList.size) for ((i, info) in mDownloadInfoList.withIndex()) { // Put file - files[i] = SpiderDen.getGalleryDownloadDir(info.gid) + files[i] = getGalleryDownloadDir(info.gid) // Remove download path EhDB.removeDownloadDirname(info.gid) } @@ -864,9 +864,9 @@ class DownloadsScene : Spacer(modifier = Modifier.height(height).fillMaxWidth()) } lifecycleScope.launchIO { - val downloadDir = SpiderDen.getGalleryDownloadDir(info.gid) ?: run { + val downloadDir = getGalleryDownloadDir(info.gid) ?: run { info.putToDownloadDir() - SpiderDen.getGalleryDownloadDir(info.gid)!! + getGalleryDownloadDir(info.gid)!! } downloadDir.ensureDir() val thumbLocation = downloadDir.subFile(".thumb")!! diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.kt b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.kt index c2ea1417b..4267a0365 100755 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.kt @@ -130,9 +130,9 @@ import com.hippo.ehviewer.databinding.DialogRateBinding import com.hippo.ehviewer.databinding.DialogTorrentListBinding import com.hippo.ehviewer.databinding.ItemGalleryCommentBinding import com.hippo.ehviewer.ktbuilder.imageRequest -import com.hippo.ehviewer.spider.SpiderDen import com.hippo.ehviewer.spider.SpiderQueen import com.hippo.ehviewer.spider.SpiderQueen.Companion.MODE_READ +import com.hippo.ehviewer.spider.getGalleryDownloadDir import com.hippo.ehviewer.ui.CommonOperations import com.hippo.ehviewer.ui.GalleryInfoBottomSheet import com.hippo.ehviewer.ui.MainActivity @@ -1273,7 +1273,7 @@ class GalleryDetailScene : BaseScene() { if (checked) { lifecycleScope.launchIO { runCatching { - val file = SpiderDen.getGalleryDownloadDir(mGalleryInfo.gid) + val file = getGalleryDownloadDir(mGalleryInfo.gid) EhDB.removeDownloadDirname(mGalleryInfo.gid) file?.delete() }