17
17
*/
18
18
package com.wire.kalium.logic.feature.user
19
19
20
+ import com.wire.kalium.logger.KaliumLogger
20
21
import com.wire.kalium.logic.CoreFailure
21
22
import com.wire.kalium.logic.StorageFailure
22
23
import com.wire.kalium.logic.configuration.UserConfigRepository
23
24
import com.wire.kalium.logic.data.client.Client
24
25
import com.wire.kalium.logic.data.client.ClientRepository
25
26
import com.wire.kalium.logic.data.client.isActive
27
+ import com.wire.kalium.logic.data.conversation.ClientId
26
28
import com.wire.kalium.logic.data.featureConfig.MLSMigrationModel
27
29
import com.wire.kalium.logic.data.featureConfig.Status
30
+ import com.wire.kalium.logic.data.id.CurrentClientIdProvider
28
31
import com.wire.kalium.logic.data.user.SupportedProtocol
29
32
import com.wire.kalium.logic.data.user.UserRepository
30
33
import com.wire.kalium.logic.feature.mlsmigration.hasMigrationEnded
@@ -33,7 +36,6 @@ import com.wire.kalium.logic.functional.Either
33
36
import com.wire.kalium.logic.functional.flatMap
34
37
import com.wire.kalium.logic.functional.flatMapLeft
35
38
import com.wire.kalium.logic.functional.map
36
- import com.wire.kalium.logic.kaliumLogger
37
39
import kotlinx.datetime.Instant
38
40
39
41
/* *
@@ -47,17 +49,19 @@ internal class UpdateSelfUserSupportedProtocolsUseCaseImpl(
47
49
private val clientsRepository : ClientRepository ,
48
50
private val userRepository : UserRepository ,
49
51
private val userConfigRepository : UserConfigRepository ,
50
- private val featureSupport : FeatureSupport
52
+ private val featureSupport : FeatureSupport ,
53
+ private val currentClientIdProvider : CurrentClientIdProvider ,
54
+ private val logger : KaliumLogger
51
55
) : UpdateSelfUserSupportedProtocolsUseCase {
52
56
53
57
override suspend operator fun invoke (): Either <CoreFailure , Boolean > {
54
58
return if (! featureSupport.isMLSSupported) {
55
- kaliumLogger .d(" Skip updating supported protocols, since MLS is not supported." )
59
+ logger .d(" Skip updating supported protocols, since MLS is not supported." )
56
60
Either .Right (false )
57
61
} else {
58
62
(userRepository.getSelfUser()?.let { selfUser ->
59
63
selfSupportedProtocols().flatMap { newSupportedProtocols ->
60
- kaliumLogger .i(
64
+ logger .i(
61
65
" Updating supported protocols = $newSupportedProtocols previously = ${selfUser.supportedProtocols} "
62
66
)
63
67
if (newSupportedProtocols != selfUser.supportedProtocols) {
@@ -68,11 +72,12 @@ internal class UpdateSelfUserSupportedProtocolsUseCaseImpl(
68
72
}.flatMapLeft {
69
73
when (it) {
70
74
is StorageFailure .DataNotFound -> {
71
- kaliumLogger .w(
75
+ logger .w(
72
76
" Skip updating supported protocols since additional protocols are not configured"
73
77
)
74
78
Either .Right (false )
75
79
}
80
+
76
81
else -> Either .Left (it)
77
82
}
78
83
}
@@ -81,33 +86,48 @@ internal class UpdateSelfUserSupportedProtocolsUseCaseImpl(
81
86
}
82
87
83
88
private suspend fun selfSupportedProtocols (): Either <CoreFailure , Set <SupportedProtocol >> =
84
- clientsRepository.selfListOfClients ().flatMap { selfClients ->
85
- userConfigRepository.getMigrationConfiguration()
86
- .flatMapLeft { if (it is StorageFailure . DataNotFound ) Either . Right ( MIGRATION_CONFIGURATION_DISABLED ) else Either . Left (it) }
87
- .flatMap { migrationConfiguration ->
88
- userConfigRepository.getSupportedProtocols().map { supportedProtocols ->
89
- val selfSupportedProtocols = mutableSetOf< SupportedProtocol >( )
90
- if (proteusIsSupported(supportedProtocols, migrationConfiguration)) {
91
- selfSupportedProtocols.add( SupportedProtocol . PROTEUS )
89
+ currentClientIdProvider ().flatMap { currentClientId ->
90
+ clientsRepository.selfListOfClients().flatMap { selfClients ->
91
+ userConfigRepository.getMigrationConfiguration()
92
+ .flatMapLeft {
93
+ if (it is StorageFailure . DataNotFound ) {
94
+ Either . Right ( MIGRATION_CONFIGURATION_DISABLED )
95
+ } else {
96
+ Either . Left (it )
92
97
}
98
+ }
99
+ .flatMap { migrationConfiguration ->
100
+ userConfigRepository.getSupportedProtocols().map { supportedProtocols ->
101
+ val selfSupportedProtocols = mutableSetOf<SupportedProtocol >()
102
+ if (proteusIsSupported(supportedProtocols, migrationConfiguration)) {
103
+ selfSupportedProtocols.add(SupportedProtocol .PROTEUS )
104
+ }
93
105
94
- if (mlsIsSupported(supportedProtocols, migrationConfiguration, selfClients)) {
95
- selfSupportedProtocols.add(SupportedProtocol .MLS )
106
+ if (mlsIsSupported(supportedProtocols, migrationConfiguration, selfClients, currentClientId)) {
107
+ selfSupportedProtocols.add(SupportedProtocol .MLS )
108
+ }
109
+ selfSupportedProtocols
96
110
}
97
- selfSupportedProtocols
98
111
}
99
- }
112
+ }
100
113
}
101
114
102
115
private fun mlsIsSupported (
103
116
supportedProtocols : Set <SupportedProtocol >,
104
117
migrationConfiguration : MLSMigrationModel ,
105
- selfClients : List <Client >
118
+ selfClients : List <Client >,
119
+ selfClientId : ClientId
106
120
): Boolean {
107
121
val mlsIsSupported = supportedProtocols.contains(SupportedProtocol .MLS )
108
122
val mlsMigrationHasEnded = migrationConfiguration.hasMigrationEnded()
109
- val allSelfClientsAreMLSCapable = selfClients.filter { it.isActive }.all { it.isMLSCapable }
110
- kaliumLogger.d(
123
+ val allSelfClientsAreMLSCapable = selfClients
124
+ .filter { it.isActive || it.id == selfClientId }
125
+ .ifEmpty {
126
+ logger.w(" user has 0 active clients" )
127
+ emptyList()
128
+ }.all { it.isMLSCapable }
129
+
130
+ logger.d(
111
131
" mls is supported = $mlsIsSupported , " +
112
132
" all active self clients are mls capable = $allSelfClientsAreMLSCapable " +
113
133
" migration has ended = $mlsMigrationHasEnded "
@@ -121,7 +141,7 @@ internal class UpdateSelfUserSupportedProtocolsUseCaseImpl(
121
141
): Boolean {
122
142
val proteusIsSupported = supportedProtocols.contains(SupportedProtocol .PROTEUS )
123
143
val mlsMigrationHasEnded = migrationConfiguration.hasMigrationEnded()
124
- kaliumLogger .d(
144
+ logger .d(
125
145
" proteus is supported = $proteusIsSupported , " +
126
146
" migration has ended = $mlsMigrationHasEnded "
127
147
)
0 commit comments