Convert DownloadInfoListener to callbackFlow
This commit is contained in:
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)
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user