Convert DownloadInfoListener to callbackFlow

This commit is contained in:
tarsin committed 2023-07-03 19:57:28 +08:00
1 parent 1120c23709
commit dfd9af8ee3
4 files changed
+57 -70

No files matched your search

@@ -36,7 +36,9 @@ import com.hippo.ehviewer.yorozuya.SimpleHandler
import com.hippo.ehviewer.yorozuya.collect.LongList
import com.hippo.unifile.UniFile
import eu.kanade.tachiyomi.util.lang.withUIContext
import kotlinx.coroutines.channels.awaitClose
import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.flow.callbackFlow
import kotlinx.coroutines.launch
import splitties.init.appCtx
import splitties.preferences.edit
@@ -254,6 +256,47 @@ object DownloadManager : OnSpiderListener {
}
}
val stateFlow = callbackFlow {
val listener = object : DownloadInfoListener {
override fun onAdd(info: DownloadInfo, list: List<DownloadInfo>, position: Int) {
trySend(info)
list.forEach { trySend(it) }
}
override fun onUpdate(info: DownloadInfo, list: List<DownloadInfo>) {
trySend(info)
}
override fun onUpdateAll() {
// No-op
}
override fun onReload() {
// No-op
}
override fun onChange() {
// No-op
}
override fun onRenameLabel(from: String, to: String) {
// No-op
}
override fun onRemove(info: DownloadInfo, list: List<DownloadInfo>, position: Int) {
trySend(info)
}
override fun onUpdateLabels() {
// No-op
}
}
addDownloadInfoListener(listener)
awaitClose {
removeDownloadInfoListener(listener)
}
}
fun startAllDownload() {
var update = false
// Start all STATE_NONE and STATE_FAILED item
@@ -22,6 +22,11 @@ import androidx.compose.material3.ProvideTextStyle
import androidx.compose.material3.Text
import androidx.compose.material3.contentColorFor
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
@@ -36,6 +41,7 @@ import com.hippo.ehviewer.download.DownloadManager
import com.hippo.ehviewer.ui.tools.CrystalCard
import com.hippo.ehviewer.ui.tools.ElevatedCard
import com.hippo.ehviewer.ui.tools.GalleryListCardRating
import kotlinx.coroutines.flow.collect
@Composable
fun GalleryInfoListItem(
@@ -109,7 +115,13 @@ fun GalleryInfoListItem(
bottom.linkTo(if (showFav) favRef.top else postedRef.top)
},
) {
if (DownloadManager.containDownloadInfo(info.gid)) {
var download by remember(info.gid) { mutableStateOf(DownloadManager.containDownloadInfo(info.gid)) }
LaunchedEffect(info.gid) {
DownloadManager.stateFlow.collect {
if (it.gid == info.gid) download = DownloadManager.containDownloadInfo(info.gid)
}
}
if (download) {
Icon(
Icons.Default.Download,
contentDescription = null,
@@ -129,7 +129,6 @@ import com.hippo.ehviewer.databinding.DialogArchiveListBinding
import com.hippo.ehviewer.databinding.DialogRateBinding
import com.hippo.ehviewer.databinding.DialogTorrentListBinding
import com.hippo.ehviewer.databinding.ItemGalleryCommentBinding
import com.hippo.ehviewer.download.DownloadManager.DownloadInfoListener
import com.hippo.ehviewer.spider.SpiderDen
import com.hippo.ehviewer.spider.SpiderQueen
import com.hippo.ehviewer.spider.SpiderQueen.Companion.MODE_READ
@@ -176,7 +175,7 @@ import splitties.systemservices.downloadManager
import kotlin.math.roundToInt
import com.hippo.ehviewer.download.DownloadManager as ehDownloadManager
class GalleryDetailScene : BaseScene(), DownloadInfoListener {
class GalleryDetailScene : BaseScene() {
private var mDownloadState = 0
private var mAction: String? = null
private var mGid: Long = 0
@@ -396,7 +395,6 @@ class GalleryDetailScene : BaseScene(), DownloadInfoListener {
} else {
getDetailError = getString(R.string.error_cannot_find_gallery)
}
ehDownloadManager.addDownloadInfoListener(this)
(requireActivity() as MainActivity).mShareUrl = galleryDetailUrl
return ComposeView(requireContext()).apply {
setMD3Content {
@@ -814,7 +812,6 @@ class GalleryDetailScene : BaseScene(), DownloadInfoListener {
override fun onDestroyView() {
super.onDestroyView()
ehDownloadManager.removeDownloadInfoListener(this)
(requireActivity() as MainActivity).mShareUrl = null
}
@@ -1213,13 +1210,6 @@ class GalleryDetailScene : BaseScene(), DownloadInfoListener {
}
}
private fun downloadLongClick() {
val galleryInfo = composeBindingGI
if (galleryInfo != null) {
CommonOperations.startDownload(activity as MainActivity, galleryInfo, true)
}
}
private fun showFilterUploaderDialog() {
if (uploader.isNullOrEmpty() || disowned) {
return
@@ -1265,33 +1255,6 @@ class GalleryDetailScene : BaseScene(), DownloadInfoListener {
updateDownloadText()
}
override fun onAdd(info: DownloadInfo, list: List<DownloadInfo>, position: Int) {
updateDownloadState()
}
override fun onUpdate(info: DownloadInfo, list: List<DownloadInfo>) {
updateDownloadState()
}
override fun onUpdateAll() {
updateDownloadState()
}
override fun onReload() {
updateDownloadState()
}
override fun onChange() {
updateDownloadState()
}
override fun onRemove(info: DownloadInfo, list: List<DownloadInfo>, position: Int) {
updateDownloadState()
}
override fun onRenameLabel(from: String, to: String) {}
override fun onUpdateLabels() {}
private fun onModifyFavoritesSuccess() {
if (composeBindingGD != null) {
composeBindingGD!!.isFavorited = composeBindingGD!!.favoriteName != null
@@ -71,13 +71,10 @@ import com.hippo.ehviewer.client.parser.GalleryListParser
import com.hippo.ehviewer.client.parser.GalleryPageUrlParser
import com.hippo.ehviewer.coil.imageRequest
import com.hippo.ehviewer.coil.justDownload
import com.hippo.ehviewer.dao.DownloadInfo
import com.hippo.ehviewer.dao.QuickSearch
import com.hippo.ehviewer.databinding.DrawerListRvBinding
import com.hippo.ehviewer.databinding.ItemDrawerListBinding
import com.hippo.ehviewer.databinding.SceneGalleryListBinding
import com.hippo.ehviewer.download.DownloadManager
import com.hippo.ehviewer.download.DownloadManager.DownloadInfoListener
import com.hippo.ehviewer.ui.doGalleryInfoAction
import com.hippo.ehviewer.ui.legacy.AddDeleteDrawable
import com.hippo.ehviewer.ui.legacy.BaseDialogBuilder
@@ -106,7 +103,6 @@ import java.io.File
import java.time.LocalDateTime
import java.time.ZoneId
import java.time.ZoneOffset
import com.hippo.ehviewer.download.DownloadManager as downloadManager
class GalleryListScene : SearchBarScene(), OnDragHandlerListener, OnClickFabListener, OnExpandListener {
private val mCallback = object : OnBackPressedCallback(false) {
@@ -156,31 +152,6 @@ class GalleryListScene : SearchBarScene(), OnDragHandlerListener, OnClickFabList
}
}
private var mHasFirstRefresh = false
private val mDownloadManager: DownloadManager = downloadManager
@SuppressLint("NotifyDataSetChanged")
private val mDownloadInfoListener: DownloadInfoListener = object : DownloadInfoListener {
override fun onAdd(info: DownloadInfo, list: List<DownloadInfo>, position: Int) {
mAdapter?.notifyDataSetChanged()
}
override fun onUpdate(info: DownloadInfo, list: List<DownloadInfo>) {}
override fun onUpdateAll() {}
override fun onReload() {
mAdapter?.notifyDataSetChanged()
}
override fun onChange() {
mAdapter?.notifyDataSetChanged()
}
override fun onRenameLabel(from: String, to: String) {}
override fun onRemove(info: DownloadInfo, list: List<DownloadInfo>, position: Int) {
mAdapter?.notifyDataSetChanged()
}
override fun onUpdateLabels() {}
}
@SuppressLint("NotifyDataSetChanged")
private val mFavouriteStatusRouterListener: FavouriteStatusRouter.Listener =
@@ -217,7 +188,6 @@ class GalleryListScene : SearchBarScene(), OnDragHandlerListener, OnClickFabList
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
mDownloadManager.addDownloadInfoListener(mDownloadInfoListener)
FavouriteStatusRouter.addListener(mFavouriteStatusRouterListener)
if (savedInstanceState == null) {
onInit()
@@ -255,7 +225,6 @@ class GalleryListScene : SearchBarScene(), OnDragHandlerListener, OnClickFabList
override fun onDestroy() {
super.onDestroy()
mDownloadManager.removeDownloadInfoListener(mDownloadInfoListener)
FavouriteStatusRouter.removeListener(mFavouriteStatusRouterListener)
}