chore(recents): Use flow to set refresh state

This commit is contained in:
Ahmad Ansori Palembani 2024-06-21 18:52:54 +07:00
parent a2a0a7e79e
commit 2416037615
Signed by: null2264
GPG key ID: BA64F8B60AF3EFB6
2 changed files with 15 additions and 10 deletions

View file

@ -66,8 +66,10 @@ import kotlinx.coroutines.awaitAll
import kotlinx.coroutines.channels.BufferOverflow import kotlinx.coroutines.channels.BufferOverflow
import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.ensureActive import kotlinx.coroutines.ensureActive
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.asSharedFlow import kotlinx.coroutines.flow.asSharedFlow
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.sync.Semaphore import kotlinx.coroutines.sync.Semaphore
@ -677,6 +679,12 @@ class LibraryUpdateJob(private val context: Context, workerParams: WorkerParamet
WorkManager.getInstance(context).cancelAllWorkByTag(TAG) WorkManager.getInstance(context).cancelAllWorkByTag(TAG)
} }
fun isRunningFlow(context: Context): Flow<Boolean> {
return WorkManager.getInstance(context).getWorkInfosByTagFlow(TAG).map { list ->
list.any { it.state == WorkInfo.State.RUNNING }
}
}
fun isRunning(context: Context): Boolean { fun isRunning(context: Context): Boolean {
val list = WorkManager.getInstance(context).getWorkInfosByTag(TAG).get() val list = WorkManager.getInstance(context).getWorkInfosByTag(TAG).get()
return list.any { it.state == WorkInfo.State.RUNNING } return list.any { it.state == WorkInfo.State.RUNNING }

View file

@ -87,6 +87,8 @@ import eu.kanade.tachiyomi.util.view.snack
import eu.kanade.tachiyomi.util.view.updateGradiantBGRadius import eu.kanade.tachiyomi.util.view.updateGradiantBGRadius
import eu.kanade.tachiyomi.util.view.withFadeTransaction import eu.kanade.tachiyomi.util.view.withFadeTransaction
import eu.kanade.tachiyomi.widget.LinearLayoutManagerAccurateOffset import eu.kanade.tachiyomi.widget.LinearLayoutManagerAccurateOffset
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch
import java.util.* import java.util.*
import kotlin.math.max import kotlin.math.max
@ -381,7 +383,11 @@ class RecentsController(bundle: Bundle? = null) :
} }
}, },
) )
binding.swipeRefresh.isRefreshing = LibraryUpdateJob.isRunning(view.context) viewScope.launch {
LibraryUpdateJob.isRunningFlow(view.context).collectLatest {
binding.swipeRefresh.isRefreshing = it
}
}
binding.swipeRefresh.setOnRefreshListener { binding.swipeRefresh.setOnRefreshListener {
if (!LibraryUpdateJob.isRunning(view.context)) { if (!LibraryUpdateJob.isRunning(view.context)) {
snack?.dismiss() snack?.dismiss()
@ -401,14 +407,6 @@ class RecentsController(bundle: Bundle? = null) :
) )
} }
} }
addCallback(
object : BaseTransientBottomBar.BaseCallback<Snackbar>() {
override fun onDismissed(transientBottomBar: Snackbar?, event: Int) {
super.onDismissed(transientBottomBar, event)
binding.swipeRefresh.isRefreshing = LibraryUpdateJob.isRunning(view.context)
}
},
)
} }
LibraryUpdateJob.startNow(view.context) LibraryUpdateJob.startNow(view.context)
} }
@ -576,7 +574,6 @@ class RecentsController(bundle: Bundle? = null) :
} }
binding.progress.isVisible = false binding.progress.isVisible = false
binding.recentsFrameLayout.alpha = 1f binding.recentsFrameLayout.alpha = 1f
binding.swipeRefresh.isRefreshing = LibraryUpdateJob.isRunning(view!!.context)
adapter.removeAllScrollableHeaders() adapter.removeAllScrollableHeaders()
adapter.updateDataSet(recents) adapter.updateDataSet(recents)
adapter.onLoadMoreComplete(null) adapter.onLoadMoreComplete(null)