@@ -12,62 +12,62 @@ import io.element.android.libraries.sessionstorage.api.SessionData
12
12
import io.element.android.libraries.sessionstorage.api.SessionStore
13
13
import kotlinx.coroutines.flow.Flow
14
14
import kotlinx.coroutines.flow.MutableStateFlow
15
- import kotlinx.coroutines.flow.asStateFlow
16
15
import kotlinx.coroutines.flow.map
17
16
18
17
class InMemorySessionStore (
19
- initialList : List <SessionData > = emptyList(),
18
+ private val updateUserProfileResult : (String , String? , String? ) -> Unit = { _, _, _ -> error("Not implemented") },
19
+ private val setLatestSessionResult : (String ) -> Unit = { error("Not implemented") },
20
20
) : SessionStore {
21
- private val sessionDataListFlow = MutableStateFlow (initialList )
21
+ private var sessionDataFlow = MutableStateFlow < SessionData ?>( null )
22
22
23
23
override fun isLoggedIn (): Flow <LoggedInState > {
24
- return sessionDataListFlow .map {
25
- if (it.isEmpty() ) {
24
+ return sessionDataFlow .map {
25
+ if (it == null ) {
26
26
LoggedInState .NotLoggedIn
27
27
} else {
28
- it.first().let { sessionData ->
29
- LoggedInState .LoggedIn (
30
- sessionId = sessionData.userId,
31
- isTokenValid = sessionData.isTokenValid,
32
- )
33
- }
28
+ LoggedInState .LoggedIn (
29
+ sessionId = it.userId,
30
+ isTokenValid = it.isTokenValid,
31
+ )
34
32
}
35
33
}
36
34
}
37
35
38
- override fun sessionsFlow (): Flow <List <SessionData >> = sessionDataListFlow.asStateFlow()
36
+ override fun sessionsFlow (): Flow <List <SessionData >> {
37
+ return sessionDataFlow.map { listOfNotNull(it) }
38
+ }
39
39
40
- override suspend fun storeData (sessionData : SessionData ) {
41
- val currentList = sessionDataListFlow.value.toMutableList()
42
- currentList.removeAll { it.userId == sessionData.userId }
43
- currentList.add(sessionData)
44
- sessionDataListFlow.value = currentList
40
+ override suspend fun addSession (sessionData : SessionData ) {
41
+ sessionDataFlow.value = sessionData
45
42
}
46
43
47
44
override suspend fun updateData (sessionData : SessionData ) {
48
- val currentList = sessionDataListFlow.value.toMutableList()
49
- val index = currentList.indexOfFirst { it.userId == sessionData.userId }
50
- if (index != - 1 ) {
51
- currentList[index] = sessionData
52
- sessionDataListFlow.value = currentList
53
- }
45
+ sessionDataFlow.value = sessionData
46
+ }
47
+
48
+ override suspend fun updateUserProfile (sessionId : String , displayName : String? , avatarUrl : String? ) {
49
+ updateUserProfileResult(sessionId, displayName, avatarUrl)
54
50
}
55
51
56
52
override suspend fun getSession (sessionId : String ): SessionData ? {
57
- return sessionDataListFlow .value.firstOrNull { it.userId == sessionId }
53
+ return sessionDataFlow .value.takeIf { it? .userId == sessionId }
58
54
}
59
55
60
56
override suspend fun getAllSessions (): List <SessionData > {
61
- return sessionDataListFlow .value
57
+ return listOfNotNull(sessionDataFlow .value)
62
58
}
63
59
64
60
override suspend fun getLatestSession (): SessionData ? {
65
- return sessionDataListFlow.value.firstOrNull()
61
+ return sessionDataFlow.value
62
+ }
63
+
64
+ override suspend fun setLatestSession (sessionId : String ) {
65
+ setLatestSessionResult(sessionId)
66
66
}
67
67
68
68
override suspend fun removeSession (sessionId : String ) {
69
- val currentList = sessionDataListFlow .value.toMutableList()
70
- currentList.removeAll { it.userId == sessionId }
71
- sessionDataListFlow.value = currentList
69
+ if (sessionDataFlow .value?.userId == sessionId) {
70
+ sessionDataFlow.value = null
71
+ }
72
72
}
73
73
}
0 commit comments