Skip to content

Commit cc4a8d4

Browse files
committed
rust sdk : handle api breaks for 0.2.59
1 parent d68afd2 commit cc4a8d4

File tree

12 files changed

+55
-24
lines changed

12 files changed

+55
-24
lines changed

features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverPresenter.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import io.element.android.libraries.matrix.api.core.RoomAlias
2323
import io.element.android.libraries.matrix.api.room.alias.ResolvedRoomAlias
2424
import kotlinx.coroutines.CoroutineScope
2525
import kotlinx.coroutines.launch
26+
import kotlin.jvm.optionals.getOrElse
2627

2728
class RoomAliasResolverPresenter @AssistedInject constructor(
2829
@Assisted private val roomAlias: RoomAlias,
@@ -57,7 +58,9 @@ class RoomAliasResolverPresenter @AssistedInject constructor(
5758

5859
private fun CoroutineScope.resolveAlias(resolveState: MutableState<AsyncData<ResolvedRoomAlias>>) = launch {
5960
suspend {
60-
matrixClient.resolveRoomAlias(roomAlias).getOrThrow()
61+
matrixClient.resolveRoomAlias(roomAlias)
62+
.getOrThrow()
63+
.getOrElse { error("Failed to resolve room alias $roomAlias") }
6164
}.runCatchingUpdatingState(resolveState)
6265
}
6366
}

features/roomaliasresolver/impl/src/test/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverPresenterTest.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import io.element.android.tests.testutils.WarmUpRule
2424
import kotlinx.coroutines.test.runTest
2525
import org.junit.Rule
2626
import org.junit.Test
27+
import java.util.Optional
2728

2829
class RoomAliasResolverPresenterTest {
2930
@get:Rule
@@ -42,7 +43,7 @@ class RoomAliasResolverPresenterTest {
4243

4344
@Test
4445
fun `present - resolve alias to roomId`() = runTest {
45-
val result = aResolvedRoomAlias()
46+
val result = Optional.of(aResolvedRoomAlias())
4647
val client = FakeMatrixClient(
4748
resolveRoomAliasResult = { Result.success(result) }
4849
)
@@ -54,7 +55,7 @@ class RoomAliasResolverPresenterTest {
5455
assertThat(awaitItem().resolveState.isLoading()).isTrue()
5556
val resultState = awaitItem()
5657
assertThat(resultState.roomAlias).isEqualTo(A_ROOM_ALIAS)
57-
assertThat(resultState.resolveState.dataOrNull()).isEqualTo(result)
58+
assertThat(resultState.resolveState.dataOrNull()).isEqualTo(result.get())
5859
}
5960
}
6061

features/roomdirectory/impl/src/main/kotlin/io/element/android/features/roomdirectory/impl/root/RoomDirectoryPresenter.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ import kotlinx.coroutines.flow.flowOn
2828
import kotlinx.coroutines.flow.map
2929
import javax.inject.Inject
3030

31+
private const val SEARCH_BATCH_SIZE = 20
32+
3133
class RoomDirectoryPresenter @Inject constructor(
3234
private val dispatchers: CoroutineDispatchers,
3335
private val roomDirectoryService: RoomDirectoryService,
@@ -51,7 +53,7 @@ class RoomDirectoryPresenter @Inject constructor(
5153
loadingMore = false
5254
// debounce search query
5355
delay(300)
54-
roomDirectoryList.filter(searchQuery, 20)
56+
roomDirectoryList.filter(filter = searchQuery, batchSize = SEARCH_BATCH_SIZE, viaServerName = null)
5557
}
5658
LaunchedEffect(loadingMore) {
5759
if (loadingMore) {

features/roomdirectory/impl/src/test/kotlin/io/element/android/features/roomdirectory/impl/root/RoomDirectoryPresenterTest.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ import org.junit.Test
8181

8282
@Test
8383
fun `present - emit search event`() = runTest {
84-
val filterLambda = lambdaRecorder { _: String?, _: Int ->
84+
val filterLambda = lambdaRecorder { _: String?, _: Int, _: String? ->
8585
Result.success(Unit)
8686
}
8787
val roomDirectoryList = FakeRoomDirectoryList(filterLambda = filterLambda)
@@ -99,7 +99,7 @@ import org.junit.Test
9999
}
100100
assert(filterLambda)
101101
.isCalledOnce()
102-
.with(value("test"), any())
102+
.with(value("test"), any(), value(null))
103103
}
104104

105105
@Test

libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/MatrixClient.kt

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,14 @@ interface MatrixClient : Closeable {
108108

109109
suspend fun trackRecentlyVisitedRoom(roomId: RoomId): Result<Unit>
110110
suspend fun getRecentlyVisitedRooms(): Result<List<RoomId>>
111-
suspend fun resolveRoomAlias(roomAlias: RoomAlias): Result<ResolvedRoomAlias>
111+
112+
/**
113+
* Resolves the given room alias to a roomID (and a list of servers), if possible.
114+
* @param roomAlias the room alias to resolve
115+
* @return the resolved room alias if any, an empty result if not found,or an error if the resolution failed.
116+
*
117+
*/
118+
suspend fun resolveRoomAlias(roomAlias: RoomAlias): Result<Optional<ResolvedRoomAlias>>
112119

113120
/**
114121
* Enables or disables the sending queue, according to the given parameter.

libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/roomdirectory/RoomDirectoryList.kt

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,22 @@ package io.element.android.libraries.matrix.api.roomdirectory
1010
import kotlinx.coroutines.flow.Flow
1111

1212
interface RoomDirectoryList {
13-
suspend fun filter(filter: String?, batchSize: Int): Result<Unit>
13+
/**
14+
* Starts a filtered search for the server.
15+
* If the filter is not provided it will search for all the rooms. You can specify a batch_size to control the number of rooms to fetch per request.
16+
* If the via_server is not provided it will search in the current homeserver by default.
17+
* This method will clear the current search results and start a new one
18+
*/
19+
suspend fun filter(filter: String?, batchSize: Int, viaServerName: String?): Result<Unit>
20+
21+
/**
22+
* Load more rooms from the current search results.
23+
*/
1424
suspend fun loadMore(): Result<Unit>
25+
26+
/**
27+
* The current search results as a state flow.
28+
*/
1529
val state: Flow<State>
1630

1731
data class State(

libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,6 @@ import kotlinx.collections.immutable.ImmutableList
7171
import kotlinx.collections.immutable.persistentListOf
7272
import kotlinx.collections.immutable.toPersistentList
7373
import kotlinx.coroutines.CoroutineScope
74-
import kotlinx.coroutines.ExperimentalCoroutinesApi
7574
import kotlinx.coroutines.TimeoutCancellationException
7675
import kotlinx.coroutines.cancel
7776
import kotlinx.coroutines.channels.Channel
@@ -112,7 +111,6 @@ import org.matrix.rustcomponents.sdk.RoomPreset as RustRoomPreset
112111
import org.matrix.rustcomponents.sdk.RoomVisibility as RustRoomVisibility
113112
import org.matrix.rustcomponents.sdk.SyncService as ClientSyncService
114113

115-
@OptIn(ExperimentalCoroutinesApi::class)
116114
class RustMatrixClient(
117115
private val client: Client,
118116
private val baseDirectory: File,
@@ -420,13 +418,15 @@ class RustMatrixClient(
420418
}
421419
}
422420

423-
override suspend fun resolveRoomAlias(roomAlias: RoomAlias): Result<ResolvedRoomAlias> = withContext(sessionDispatcher) {
421+
override suspend fun resolveRoomAlias(roomAlias: RoomAlias): Result<Optional<ResolvedRoomAlias>> = withContext(sessionDispatcher) {
424422
runCatching {
425-
val result = client.resolveRoomAlias(roomAlias.value)
426-
ResolvedRoomAlias(
427-
roomId = RoomId(result.roomId),
428-
servers = result.servers,
429-
)
423+
val result = client.resolveRoomAlias(roomAlias.value)?.let {
424+
ResolvedRoomAlias(
425+
roomId = RoomId(it.roomId),
426+
servers = it.servers,
427+
)
428+
}
429+
Optional.ofNullable(result)
430430
}
431431
}
432432

libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/roomdirectory/RustRoomDirectoryList.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,9 @@ class RustRoomDirectoryList(
4141
.launchIn(coroutineScope)
4242
}
4343

44-
override suspend fun filter(filter: String?, batchSize: Int): Result<Unit> {
44+
override suspend fun filter(filter: String?, batchSize: Int, viaServerName: String?): Result<Unit> {
4545
return execute {
46-
inner.search(filter = filter, batchSize = batchSize.toUInt())
46+
inner.search(filter = filter, batchSize = batchSize.toUInt(), viaServerName = viaServerName)
4747
}
4848
}
4949

libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/fixtures/fakes/FakeRustRoomDirectorySearch.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ class FakeRustRoomDirectorySearch(
2121
return isAtLastPage
2222
}
2323

24-
override suspend fun search(filter: String?, batchSize: UInt) = simulateLongTask { }
24+
override suspend fun search(filter: String?, batchSize: UInt, viaServerName: String?) = simulateLongTask { }
2525
override suspend fun nextPage() = simulateLongTask { }
2626

2727
private var listener: RoomDirectorySearchEntriesListener? = null

libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/roomdirectory/RustRoomDirectoryListTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ class RustRoomDirectoryListTest {
3636
// Let the mxCallback be ready
3737
runCurrent()
3838
sut.state.test {
39-
sut.filter("", 20)
39+
sut.filter(filter = "", batchSize = 20, viaServerName = null)
4040
roomDirectorySearch.emitResult(
4141
listOf(
4242
RoomDirectorySearchEntryUpdate.Append(listOf(aRustRoomDescription()))

0 commit comments

Comments
 (0)