mirror of
https://github.com/Novaloop-AG/element-x-android.git
synced 2026-11-03 06:55:41 +00:00
Merge pull request #7373 from hayaksi1/fix/5794-account-data-api
Expose global account data get and set on MatrixClient
This commit is contained in:
+10
@@ -211,6 +211,16 @@ interface MatrixClient : UrlContentFetcher {
|
|||||||
*/
|
*/
|
||||||
suspend fun addRecentEmoji(emoji: String): Result<Unit>
|
suspend fun addRecentEmoji(emoji: String): Result<Unit>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the raw JSON content of the global account data event of type [eventType], or null if it is not set.
|
||||||
|
*/
|
||||||
|
suspend fun getAccountData(eventType: String): Result<String?>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the global account data event of type [eventType] to the raw JSON [content].
|
||||||
|
*/
|
||||||
|
suspend fun setAccountData(eventType: String, content: String): Result<Unit>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Marks the room with the provided [roomId] as read, sending a fully read receipt for [eventId].
|
* Marks the room with the provided [roomId] as read, sending a fully read receipt for [eventId].
|
||||||
*
|
*
|
||||||
|
|||||||
+12
@@ -825,6 +825,18 @@ class RustMatrixClient(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override suspend fun getAccountData(eventType: String): Result<String?> = withContext(sessionDispatcher) {
|
||||||
|
runCatchingExceptions {
|
||||||
|
innerClient.accountData(eventType)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override suspend fun setAccountData(eventType: String, content: String): Result<Unit> = withContext(sessionDispatcher) {
|
||||||
|
runCatchingExceptions {
|
||||||
|
innerClient.setAccountData(eventType, content)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override suspend fun canLinkNewDevice(): Result<Boolean> = withContext(sessionDispatcher) {
|
override suspend fun canLinkNewDevice(): Result<Boolean> = withContext(sessionDispatcher) {
|
||||||
runCatchingExceptions {
|
runCatchingExceptions {
|
||||||
innerClient.isLoginWithQrCodeSupported()
|
innerClient.isLoginWithQrCodeSupported()
|
||||||
|
|||||||
+27
@@ -44,6 +44,9 @@ import org.matrix.rustcomponents.sdk.StoreSizes
|
|||||||
import org.matrix.rustcomponents.sdk.UserProfile
|
import org.matrix.rustcomponents.sdk.UserProfile
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
|
private const val AN_ACCOUNT_DATA_EVENT_TYPE = "org.example.custom"
|
||||||
|
private const val AN_ACCOUNT_DATA_CONTENT = """{"key":"value"}"""
|
||||||
|
|
||||||
class RustMatrixClientTest {
|
class RustMatrixClientTest {
|
||||||
@Test
|
@Test
|
||||||
fun `ensure that sessionId and deviceId can be retrieved from the client`() = runTest {
|
fun `ensure that sessionId and deviceId can be retrieved from the client`() = runTest {
|
||||||
@@ -139,6 +142,30 @@ class RustMatrixClientTest {
|
|||||||
assertThat(createParameters?.historyVisibilityOverride).isEqualTo(RoomHistoryVisibility.Invited)
|
assertThat(createParameters?.historyVisibilityOverride).isEqualTo(RoomHistoryVisibility.Invited)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `getAccountData returns the raw content provided by the client`() = runTest {
|
||||||
|
val accountDataResult = lambdaRecorder<String, String?> { AN_ACCOUNT_DATA_CONTENT }
|
||||||
|
val client = createRustMatrixClient(
|
||||||
|
client = FakeFfiClient(accountDataResult = accountDataResult)
|
||||||
|
)
|
||||||
|
|
||||||
|
assertThat(client.getAccountData(AN_ACCOUNT_DATA_EVENT_TYPE).getOrThrow()).isEqualTo(AN_ACCOUNT_DATA_CONTENT)
|
||||||
|
accountDataResult.assertions().isCalledOnce().with(value(AN_ACCOUNT_DATA_EVENT_TYPE))
|
||||||
|
client.destroy()
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `setAccountData forwards the event type and the raw content to the client`() = runTest {
|
||||||
|
val setAccountDataResult = lambdaRecorder<String, String, Unit> { _, _ -> }
|
||||||
|
val client = createRustMatrixClient(
|
||||||
|
client = FakeFfiClient(setAccountDataResult = setAccountDataResult)
|
||||||
|
)
|
||||||
|
|
||||||
|
assertThat(client.setAccountData(AN_ACCOUNT_DATA_EVENT_TYPE, AN_ACCOUNT_DATA_CONTENT).isSuccess).isTrue()
|
||||||
|
setAccountDataResult.assertions().isCalledOnce().with(value(AN_ACCOUNT_DATA_EVENT_TYPE), value(AN_ACCOUNT_DATA_CONTENT))
|
||||||
|
client.destroy()
|
||||||
|
}
|
||||||
|
|
||||||
private fun TestScope.createRustMatrixClient(
|
private fun TestScope.createRustMatrixClient(
|
||||||
client: Client = FakeFfiClient(),
|
client: Client = FakeFfiClient(),
|
||||||
sessionStore: SessionStore = InMemorySessionStore(
|
sessionStore: SessionStore = InMemorySessionStore(
|
||||||
|
|||||||
+10
@@ -56,6 +56,8 @@ class FakeFfiClient(
|
|||||||
private val getStoreSizesResult: () -> StoreSizes = { lambdaError() },
|
private val getStoreSizesResult: () -> StoreSizes = { lambdaError() },
|
||||||
private val createRoomResult: (CreateRoomParameters) -> String = { lambdaError() },
|
private val createRoomResult: (CreateRoomParameters) -> String = { lambdaError() },
|
||||||
private val homeserverCapabilities: HomeserverCapabilities = FakeFfiHomeserverCapabilities(),
|
private val homeserverCapabilities: HomeserverCapabilities = FakeFfiHomeserverCapabilities(),
|
||||||
|
private val accountDataResult: (String) -> String? = { lambdaError() },
|
||||||
|
private val setAccountDataResult: (String, String) -> Unit = { _, _ -> lambdaError() },
|
||||||
private val isUserStatusSupportedResult: () -> Boolean = { false },
|
private val isUserStatusSupportedResult: () -> Boolean = { false },
|
||||||
private val subscribeToOwnProfileResult: (ProfileListener) -> Unit = {},
|
private val subscribeToOwnProfileResult: (ProfileListener) -> Unit = {},
|
||||||
private val closeResult: () -> Unit = {},
|
private val closeResult: () -> Unit = {},
|
||||||
@@ -124,5 +126,13 @@ class FakeFfiClient(
|
|||||||
return homeserverCapabilities
|
return homeserverCapabilities
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override suspend fun accountData(eventType: String): String? = simulateLongTask {
|
||||||
|
accountDataResult(eventType)
|
||||||
|
}
|
||||||
|
|
||||||
|
override suspend fun setAccountData(eventType: String, content: String) = simulateLongTask {
|
||||||
|
setAccountDataResult(eventType, content)
|
||||||
|
}
|
||||||
|
|
||||||
override fun close() = closeResult()
|
override fun close() = closeResult()
|
||||||
}
|
}
|
||||||
|
|||||||
+10
@@ -124,6 +124,8 @@ class FakeMatrixClient(
|
|||||||
private val getJoinedRoomIdsResult: () -> Result<Set<RoomId>> = { Result.success(emptySet()) },
|
private val getJoinedRoomIdsResult: () -> Result<Set<RoomId>> = { Result.success(emptySet()) },
|
||||||
private val getRecentEmojisLambda: () -> Result<List<String>> = { Result.success(emptyList()) },
|
private val getRecentEmojisLambda: () -> Result<List<String>> = { Result.success(emptyList()) },
|
||||||
private val addRecentEmojiLambda: (String) -> Result<Unit> = { Result.success(Unit) },
|
private val addRecentEmojiLambda: (String) -> Result<Unit> = { Result.success(Unit) },
|
||||||
|
private val getAccountDataLambda: (String) -> Result<String?> = { lambdaError() },
|
||||||
|
private val setAccountDataLambda: (String, String) -> Result<Unit> = { _, _ -> lambdaError() },
|
||||||
private val markRoomAsFullyReadResult: (RoomId, EventId) -> Result<Unit> = { _, _ -> lambdaError() },
|
private val markRoomAsFullyReadResult: (RoomId, EventId) -> Result<Unit> = { _, _ -> lambdaError() },
|
||||||
private val markAllRoomsAsReadResult: () -> Result<Unit> = { Result.success(Unit) },
|
private val markAllRoomsAsReadResult: () -> Result<Unit> = { Result.success(Unit) },
|
||||||
private val performDatabaseVacuumLambda: () -> Result<Unit> = { lambdaError() },
|
private val performDatabaseVacuumLambda: () -> Result<Unit> = { lambdaError() },
|
||||||
@@ -413,6 +415,14 @@ class FakeMatrixClient(
|
|||||||
return getRecentEmojisLambda()
|
return getRecentEmojisLambda()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override suspend fun getAccountData(eventType: String): Result<String?> {
|
||||||
|
return getAccountDataLambda(eventType)
|
||||||
|
}
|
||||||
|
|
||||||
|
override suspend fun setAccountData(eventType: String, content: String): Result<Unit> {
|
||||||
|
return setAccountDataLambda(eventType, content)
|
||||||
|
}
|
||||||
|
|
||||||
override suspend fun markRoomAsFullyRead(roomId: RoomId, eventId: EventId): Result<Unit> {
|
override suspend fun markRoomAsFullyRead(roomId: RoomId, eventId: EventId): Result<Unit> {
|
||||||
return markRoomAsFullyReadResult(roomId, eventId)
|
return markRoomAsFullyReadResult(roomId, eventId)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user