@@ -28,13 +28,13 @@ import com.wire.kalium.logger.obfuscateDomain
2828import com.wire.kalium.logger.obfuscateId
2929import com.wire.kalium.logic.CoreLogic
3030import com.wire.kalium.logic.data.user.UserId
31+ import com.wire.kalium.logic.feature.session.GetAllSessionsResult
3132import kotlinx.coroutines.awaitCancellation
3233import kotlinx.coroutines.coroutineScope
3334import kotlinx.coroutines.delay
3435import kotlinx.coroutines.flow.collectLatest
3536import kotlinx.coroutines.flow.combine
3637import kotlinx.coroutines.flow.distinctUntilChanged
37- import kotlinx.coroutines.flow.filter
3838import kotlinx.coroutines.flow.map
3939import kotlinx.coroutines.launch
4040import javax.inject.Inject
@@ -58,32 +58,32 @@ class SyncLifecycleManager @Inject constructor(
5858 * Should be called only once on a global level
5959 */
6060 suspend fun observeAppLifecycle () {
61- coreLogic.getGlobalScope().observeValidAccounts ()
62- .filter { pairs -> pairs.isNotEmpty() }
63- .map { pairs ->
64- pairs.map { (selfUser, _) ->
65- selfUser.id
61+ coreLogic.getGlobalScope().observeAllValidSessionsFlow ()
62+ .map { result ->
63+ when (result) {
64+ is GetAllSessionsResult . Success -> result.sessions
65+ is GetAllSessionsResult . Failure -> emptyList()
6666 }
67- }.combine(currentScreenManager.isAppVisibleFlow(), ::Pair )
67+ }
68+ .combine(currentScreenManager.isAppVisibleFlow()) { accounts, isAppVisible ->
69+ accounts to isAppVisible
70+ }
6871 .distinctUntilChanged()
69- .collectLatest { (userIds, isAppVisible) ->
70- if (isAppVisible) {
71- logger.i(
72- " App moved to foreground, " +
73- " starting sync requests for users: ${userIds.joinToString { it.value.obfuscateId() }} "
74- )
75- coroutineScope {
76- userIds.forEach { userId ->
77- launch {
78- logger.i(" !!!!! Starting foreground sync request for user ${userId.value.obfuscateId()} ." )
79- coreLogic.getSessionScope(userId).syncExecutor.request {
80- awaitCancellation()
81- }
72+ .collectLatest { (accounts, isAppVisible) ->
73+ if (! isAppVisible) {
74+ logger.i(" Not running foreground sync request for users, as App is not visible." )
75+ return @collectLatest
76+ }
77+ coroutineScope {
78+ accounts.forEach { accountInfo ->
79+ val userId = accountInfo.userId
80+ launch {
81+ logger.i(" !!!!! Starting foreground sync request for user ${userId.value.obfuscateId()} ." )
82+ coreLogic.getSessionScope(userId).syncExecutor.request {
83+ awaitCancellation()
8284 }
8385 }
8486 }
85- } else {
86- logger.i(" App moved to background, no longer running foreground sync requests for users." )
8787 }
8888 }
8989 }
0 commit comments