Skip to content

Commit b2ac38d

Browse files
authored
fix(CrossAppLogin): Filter out already connected accounts (#458)
2 parents 5e55ba6 + 3bf040c commit b2ac38d

File tree

1 file changed

+12
-4
lines changed

1 file changed

+12
-4
lines changed

CrossAppLogin/src/main/kotlin/com/infomaniak/core/login/crossapp/CrossAppLoginImpl.kt

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import com.infomaniak.core.login.crossapp.internal.ChannelMessageHandler
3232
import com.infomaniak.core.login.crossapp.internal.DisposableMessage
3333
import com.infomaniak.core.login.crossapp.internal.certificates.AppCertificateChecker
3434
import com.infomaniak.core.login.crossapp.internal.deviceid.SharedDeviceIdManager
35+
import com.infomaniak.lib.core.room.UserDatabase
3536
import com.infomaniak.lib.core.utils.SentryLog
3637
import kotlinx.coroutines.CoroutineScope
3738
import kotlinx.coroutines.Dispatchers
@@ -40,6 +41,7 @@ import kotlinx.coroutines.awaitAll
4041
import kotlinx.coroutines.awaitCancellation
4142
import kotlinx.coroutines.channels.Channel
4243
import kotlinx.coroutines.flow.SharedFlow
44+
import kotlinx.coroutines.flow.first
4345
import kotlinx.coroutines.invoke
4446
import kotlinx.serialization.ExperimentalSerializationApi
4547
import kotlinx.serialization.decodeFromByteArray
@@ -69,10 +71,16 @@ internal class CrossAppLoginImpl(
6971
}.awaitAll()
7072
}
7173

72-
return lists.flatten().groupBy { it.email }.map { (_, externalAccounts) ->
73-
val account = externalAccounts.firstOrNull { it.isCurrentlySelectedInAnApp } ?: externalAccounts.first()
74-
account.copy(tokens = externalAccounts.flatMapTo(mutableSetOf()) { it.tokens })
75-
}.sortedBy { it.isCurrentlySelectedInAnApp } // false comes before true, so selected accounts will be last in the list.
74+
val alreadyConnectedEmails = UserDatabase().userDao().allUsers.first().map { it.email }
75+
76+
return lists.flatten()
77+
.filter { it.email !in alreadyConnectedEmails }
78+
.groupBy { it.email }
79+
.map { (_, externalAccounts) ->
80+
val account = externalAccounts.firstOrNull { it.isCurrentlySelectedInAnApp } ?: externalAccounts.first()
81+
account.copy(tokens = externalAccounts.flatMapTo(mutableSetOf()) { it.tokens })
82+
}
83+
.sortedBy { it.isCurrentlySelectedInAnApp } // false comes before true, so selected accounts will be last in the list.
7684
}
7785

7886
@ExperimentalUuidApi

0 commit comments

Comments
 (0)