Skip to content

Commit 9294e3d

Browse files
committed
Fix: ArticleRepository isSyncing logic
1 parent ad65f62 commit 9294e3d

File tree

1 file changed

+17
-6
lines changed

1 file changed

+17
-6
lines changed

app/src/main/java/com/saulhdev/feeder/db/ArticleRepository.kt

+17-6
Original file line numberDiff line numberDiff line change
@@ -19,21 +19,26 @@
1919
package com.saulhdev.feeder.db
2020

2121
import android.content.Context
22+
import androidx.work.WorkInfo
2223
import androidx.work.WorkManager
2324
import com.saulhdev.feeder.db.dao.insertOrUpdate
2425
import com.saulhdev.feeder.db.models.Feed
2526
import com.saulhdev.feeder.db.models.FeedArticle
2627
import com.saulhdev.feeder.db.models.FeedItemIdWithLink
2728
import com.saulhdev.feeder.sdk.FeedItem
29+
import com.saulhdev.feeder.sync.FeedSyncer
2830
import kotlinx.coroutines.CoroutineName
2931
import kotlinx.coroutines.CoroutineScope
3032
import kotlinx.coroutines.Dispatchers
3133
import kotlinx.coroutines.ExperimentalCoroutinesApi
3234
import kotlinx.coroutines.flow.Flow
35+
import kotlinx.coroutines.flow.SharingStarted
36+
import kotlinx.coroutines.flow.StateFlow
3337
import kotlinx.coroutines.flow.combine
3438
import kotlinx.coroutines.flow.debounce
35-
import kotlinx.coroutines.flow.distinctUntilChanged
39+
import kotlinx.coroutines.flow.map
3640
import kotlinx.coroutines.flow.mapLatest
41+
import kotlinx.coroutines.flow.stateIn
3742
import kotlinx.coroutines.launch
3843
import kotlinx.coroutines.plus
3944
import kotlinx.coroutines.withContext
@@ -88,14 +93,20 @@ class ArticleRepository(context: Context) {
8893
return feedSourceDao.getFeedById(id)
8994
}
9095

91-
val isSyncing: Flow<Boolean>
92-
get() = workManager.getWorkInfosByTagFlow("FeedSyncer")
93-
.mapLatest {
96+
val isSyncing: StateFlow<Boolean> =
97+
workManager.getWorkInfosByTagFlow(FeedSyncer::class.qualifiedName!!)
98+
.map {
9499
workManager.pruneWork()
95-
it.any { work -> !work.state.isFinished }
100+
it.any { work ->
101+
work.state == WorkInfo.State.RUNNING || work.state == WorkInfo.State.BLOCKED
102+
}
96103
}
97-
.distinctUntilChanged()
98104
.debounce(1000L)
105+
.stateIn(
106+
scope,
107+
SharingStarted.Lazily,
108+
false
109+
)
99110

100111
fun setCurrentlySyncingOn(feedId: Long, syncing: Boolean) {
101112
scope.launch {

0 commit comments

Comments
 (0)