@@ -24,23 +24,30 @@ import kotlinx.coroutines.flow.SharingStarted
2424import kotlinx.coroutines.flow.StateFlow
2525import kotlinx.coroutines.flow.distinctUntilChanged
2626import kotlinx.coroutines.flow.map
27+ import kotlinx.coroutines.flow.onEach
2728import kotlinx.coroutines.flow.stateIn
2829import org.matrix.rustcomponents.sdk.RoomListService
2930import org.matrix.rustcomponents.sdk.RoomListServiceState
31+ import timber.log.Timber
32+ import java.util.concurrent.atomic.AtomicBoolean
3033
3134class RustSyncService (
3235 private val roomListService : RoomListService ,
3336 sessionCoroutineScope : CoroutineScope
3437) : SyncService {
3538
39+ private val isSyncing = AtomicBoolean (false )
40+
3641 override fun startSync () = runCatching {
37- if (! roomListService.isSyncing()) {
42+ if (isSyncing.compareAndSet(false , true )) {
43+ Timber .v(" Start sync" )
3844 roomListService.sync()
3945 }
4046 }
4147
4248 override fun stopSync () = runCatching {
43- if (roomListService.isSyncing()) {
49+ if (isSyncing.compareAndSet(true , false )) {
50+ Timber .v(" Stop sync" )
4451 roomListService.stopSync()
4552 }
4653 }
@@ -49,6 +56,10 @@ class RustSyncService(
4956 roomListService
5057 .stateFlow()
5158 .map(RoomListServiceState ::toSyncState)
59+ .onEach { state ->
60+ Timber .v(" Sync state=$state " )
61+ isSyncing.set(state == SyncState .Syncing )
62+ }
5263 .distinctUntilChanged()
53- .stateIn(sessionCoroutineScope, SharingStarted .WhileSubscribed () , SyncState .Idle )
64+ .stateIn(sessionCoroutineScope, SharingStarted .Eagerly , SyncState .Idle )
5465}
0 commit comments