Merge pull request #5678 from element-hq/feature/bma/countAccounts
Introduce new query to count accounts
This commit is contained in:
commit
c800f86b7c
9 changed files with 33 additions and 4 deletions
|
|
@ -349,7 +349,7 @@ class RootFlowNode(
|
||||||
} else {
|
} else {
|
||||||
// wait for the current session to be restored
|
// wait for the current session to be restored
|
||||||
val loggedInFlowNode = attachSession(latestSessionId)
|
val loggedInFlowNode = attachSession(latestSessionId)
|
||||||
if (sessionStore.getAllSessions().size > 1) {
|
if (sessionStore.numberOfSessions() > 1) {
|
||||||
// Several accounts, let the user choose which one to use
|
// Several accounts, let the user choose which one to use
|
||||||
backstack.push(
|
backstack.push(
|
||||||
NavTarget.AccountSelect(
|
NavTarget.AccountSelect(
|
||||||
|
|
@ -379,7 +379,7 @@ class RootFlowNode(
|
||||||
is PermalinkData.FallbackLink -> Unit
|
is PermalinkData.FallbackLink -> Unit
|
||||||
is PermalinkData.RoomEmailInviteLink -> Unit
|
is PermalinkData.RoomEmailInviteLink -> Unit
|
||||||
else -> {
|
else -> {
|
||||||
if (sessionStore.getAllSessions().size > 1) {
|
if (sessionStore.numberOfSessions() > 1) {
|
||||||
// Several accounts, let the user choose which one to use
|
// Several accounts, let the user choose which one to use
|
||||||
backstack.push(
|
backstack.push(
|
||||||
NavTarget.AccountSelect(
|
NavTarget.AccountSelect(
|
||||||
|
|
|
||||||
|
|
@ -90,7 +90,7 @@ class OnBoardingPresenter(
|
||||||
}
|
}
|
||||||
val isAddingAccount by produceState(initialValue = false) {
|
val isAddingAccount by produceState(initialValue = false) {
|
||||||
// We are adding an account if there is at least one session already stored
|
// We are adding an account if there is at least one session already stored
|
||||||
value = sessionStore.getAllSessions().isNotEmpty()
|
value = sessionStore.numberOfSessions() > 0
|
||||||
}
|
}
|
||||||
|
|
||||||
val loginMode by loginHelper.collectLoginMode()
|
val loginMode by loginHelper.collectLoginMode()
|
||||||
|
|
|
||||||
|
|
@ -165,7 +165,7 @@ class DefaultBugReporter(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
val sessionData = sessionStore.getLatestSession()
|
val sessionData = sessionStore.getLatestSession()
|
||||||
val numberOfAccounts = sessionStore.getAllSessions().size
|
val numberOfAccounts = sessionStore.numberOfSessions()
|
||||||
val deviceId = sessionData?.deviceId ?: "undefined"
|
val deviceId = sessionData?.deviceId ?: "undefined"
|
||||||
val userId = sessionData?.userId?.let { UserId(it) }
|
val userId = sessionData?.userId?.let { UserId(it) }
|
||||||
// build the multi part request
|
// build the multi part request
|
||||||
|
|
|
||||||
|
|
@ -58,9 +58,11 @@ class SignedOutPresenterTest {
|
||||||
val initialState = awaitItem()
|
val initialState = awaitItem()
|
||||||
assertThat(initialState.signedOutSession).isEqualTo(aSessionData)
|
assertThat(initialState.signedOutSession).isEqualTo(aSessionData)
|
||||||
assertThat(sessionStore.getAllSessions()).isNotEmpty()
|
assertThat(sessionStore.getAllSessions()).isNotEmpty()
|
||||||
|
assertThat(sessionStore.numberOfSessions()).isEqualTo(1)
|
||||||
initialState.eventSink(SignedOutEvents.SignInAgain)
|
initialState.eventSink(SignedOutEvents.SignInAgain)
|
||||||
assertThat(awaitItem().signedOutSession).isNull()
|
assertThat(awaitItem().signedOutSession).isNull()
|
||||||
assertThat(sessionStore.getAllSessions()).isEmpty()
|
assertThat(sessionStore.getAllSessions()).isEmpty()
|
||||||
|
assertThat(sessionStore.numberOfSessions()).isEqualTo(0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -50,6 +50,11 @@ interface SessionStore {
|
||||||
*/
|
*/
|
||||||
suspend fun getAllSessions(): List<SessionData>
|
suspend fun getAllSessions(): List<SessionData>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the number of sessions.
|
||||||
|
*/
|
||||||
|
suspend fun numberOfSessions(): Int
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the latest session, or null if no session exists.
|
* Get the latest session, or null if no session exists.
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -161,6 +161,15 @@ class DatabaseSessionStore(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override suspend fun numberOfSessions(): Int {
|
||||||
|
return sessionDataMutex.withLock {
|
||||||
|
database.sessionDataQueries.count()
|
||||||
|
.executeAsOneOrNull()
|
||||||
|
?.toInt()
|
||||||
|
?: 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override fun sessionsFlow(): Flow<List<SessionData>> {
|
override fun sessionsFlow(): Flow<List<SessionData>> {
|
||||||
return database.sessionDataQueries.selectAll()
|
return database.sessionDataQueries.selectAll()
|
||||||
.asFlow()
|
.asFlow()
|
||||||
|
|
|
||||||
|
|
@ -47,6 +47,9 @@ SELECT * FROM SessionData ORDER BY lastUsageIndex DESC LIMIT 1;
|
||||||
selectAll:
|
selectAll:
|
||||||
SELECT * FROM SessionData ORDER BY lastUsageIndex DESC;
|
SELECT * FROM SessionData ORDER BY lastUsageIndex DESC;
|
||||||
|
|
||||||
|
count:
|
||||||
|
SELECT count(*) FROM SessionData;
|
||||||
|
|
||||||
selectByUserId:
|
selectByUserId:
|
||||||
SELECT * FROM SessionData WHERE userId = ?;
|
SELECT * FROM SessionData WHERE userId = ?;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -52,6 +52,7 @@ class DatabaseSessionStoreTest {
|
||||||
|
|
||||||
assertThat(database.sessionDataQueries.selectLatest().executeAsOneOrNull()).isEqualTo(aSessionData)
|
assertThat(database.sessionDataQueries.selectLatest().executeAsOneOrNull()).isEqualTo(aSessionData)
|
||||||
assertThat(database.sessionDataQueries.selectAll().executeAsList().size).isEqualTo(1)
|
assertThat(database.sessionDataQueries.selectAll().executeAsList().size).isEqualTo(1)
|
||||||
|
assertThat(database.sessionDataQueries.count().executeAsOneOrNull()).isEqualTo(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
@ -109,6 +110,7 @@ class DatabaseSessionStoreTest {
|
||||||
|
|
||||||
assertThat(foundSession).isEqualTo(aSessionData)
|
assertThat(foundSession).isEqualTo(aSessionData)
|
||||||
assertThat(database.sessionDataQueries.selectAll().executeAsList().size).isEqualTo(2)
|
assertThat(database.sessionDataQueries.selectAll().executeAsList().size).isEqualTo(2)
|
||||||
|
assertThat(database.sessionDataQueries.count().executeAsOneOrNull()).isEqualTo(2)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
@ -196,12 +198,16 @@ class DatabaseSessionStoreTest {
|
||||||
position = 1,
|
position = 1,
|
||||||
lastUsageIndex = 1,
|
lastUsageIndex = 1,
|
||||||
)
|
)
|
||||||
|
assertThat(database.sessionDataQueries.count().executeAsOneOrNull()).isEqualTo(1)
|
||||||
databaseSessionStore.addSession(secondSessionData.toApiModel())
|
databaseSessionStore.addSession(secondSessionData.toApiModel())
|
||||||
assertThat(awaitItem().size).isEqualTo(2)
|
assertThat(awaitItem().size).isEqualTo(2)
|
||||||
|
assertThat(database.sessionDataQueries.count().executeAsOneOrNull()).isEqualTo(2)
|
||||||
databaseSessionStore.removeSession(aSessionData.userId)
|
databaseSessionStore.removeSession(aSessionData.userId)
|
||||||
assertThat(awaitItem().size).isEqualTo(1)
|
assertThat(awaitItem().size).isEqualTo(1)
|
||||||
|
assertThat(database.sessionDataQueries.count().executeAsOneOrNull()).isEqualTo(1)
|
||||||
databaseSessionStore.removeSession(secondSessionData.userId)
|
databaseSessionStore.removeSession(secondSessionData.userId)
|
||||||
assertThat(awaitItem()).isEmpty()
|
assertThat(awaitItem()).isEmpty()
|
||||||
|
assertThat(database.sessionDataQueries.count().executeAsOneOrNull()).isEqualTo(0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -67,6 +67,10 @@ class InMemorySessionStore(
|
||||||
return sessionDataListFlow.value
|
return sessionDataListFlow.value
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override suspend fun numberOfSessions(): Int {
|
||||||
|
return sessionDataListFlow.value.size
|
||||||
|
}
|
||||||
|
|
||||||
override suspend fun getLatestSession(): SessionData? {
|
override suspend fun getLatestSession(): SessionData? {
|
||||||
return sessionDataListFlow.value.firstOrNull()
|
return sessionDataListFlow.value.firstOrNull()
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue