Fix message forwarding after SDK API change
Created `Room.fullRoomWithTimeline` helper to always get an initialized timeline with the room object.
This commit is contained in:
parent
a1396ca5a7
commit
038bcc6f94
3 changed files with 35 additions and 7 deletions
|
|
@ -55,6 +55,7 @@ import io.element.android.libraries.matrix.impl.room.RoomSyncSubscriber
|
||||||
import io.element.android.libraries.matrix.impl.room.RustMatrixRoom
|
import io.element.android.libraries.matrix.impl.room.RustMatrixRoom
|
||||||
import io.element.android.libraries.matrix.impl.roomlist.RoomListFactory
|
import io.element.android.libraries.matrix.impl.roomlist.RoomListFactory
|
||||||
import io.element.android.libraries.matrix.impl.roomlist.RustRoomListService
|
import io.element.android.libraries.matrix.impl.roomlist.RustRoomListService
|
||||||
|
import io.element.android.libraries.matrix.impl.roomlist.fullRoomWithTimeline
|
||||||
import io.element.android.libraries.matrix.impl.roomlist.roomOrNull
|
import io.element.android.libraries.matrix.impl.roomlist.roomOrNull
|
||||||
import io.element.android.libraries.matrix.impl.sync.RustSyncService
|
import io.element.android.libraries.matrix.impl.sync.RustSyncService
|
||||||
import io.element.android.libraries.matrix.impl.usersearch.UserProfileMapper
|
import io.element.android.libraries.matrix.impl.usersearch.UserProfileMapper
|
||||||
|
|
@ -270,12 +271,7 @@ class RustMatrixClient(
|
||||||
|
|
||||||
private suspend fun pairOfRoom(roomId: RoomId): Pair<RoomListItem, Room>? {
|
private suspend fun pairOfRoom(roomId: RoomId): Pair<RoomListItem, Room>? {
|
||||||
val cachedRoomListItem = innerRoomListService.roomOrNull(roomId.value)
|
val cachedRoomListItem = innerRoomListService.roomOrNull(roomId.value)
|
||||||
val fullRoom = cachedRoomListItem?.let { roomListItem ->
|
val fullRoom = cachedRoomListItem?.fullRoomWithTimeline(filter = eventFilters)
|
||||||
if (!roomListItem.isTimelineInitialized()) {
|
|
||||||
roomListItem.initTimeline(eventFilters)
|
|
||||||
}
|
|
||||||
roomListItem.fullRoom()
|
|
||||||
}
|
|
||||||
return if (cachedRoomListItem == null || fullRoom == null) {
|
return if (cachedRoomListItem == null || fullRoom == null) {
|
||||||
Timber.d("No room cached for $roomId")
|
Timber.d("No room cached for $roomId")
|
||||||
null
|
null
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@ import io.element.android.libraries.core.coroutine.parallelMap
|
||||||
import io.element.android.libraries.matrix.api.core.EventId
|
import io.element.android.libraries.matrix.api.core.EventId
|
||||||
import io.element.android.libraries.matrix.api.core.RoomId
|
import io.element.android.libraries.matrix.api.core.RoomId
|
||||||
import io.element.android.libraries.matrix.api.room.ForwardEventException
|
import io.element.android.libraries.matrix.api.room.ForwardEventException
|
||||||
|
import io.element.android.libraries.matrix.impl.roomlist.fullRoomWithTimeline
|
||||||
import io.element.android.libraries.matrix.impl.roomlist.roomOrNull
|
import io.element.android.libraries.matrix.impl.roomlist.roomOrNull
|
||||||
import io.element.android.libraries.matrix.impl.timeline.runWithTimelineListenerRegistered
|
import io.element.android.libraries.matrix.impl.timeline.runWithTimelineListenerRegistered
|
||||||
import kotlinx.coroutines.CancellationException
|
import kotlinx.coroutines.CancellationException
|
||||||
|
|
@ -50,7 +51,9 @@ class RoomContentForwarder(
|
||||||
) {
|
) {
|
||||||
val content = fromTimeline.getTimelineEventContentByEventId(eventId.value)
|
val content = fromTimeline.getTimelineEventContentByEventId(eventId.value)
|
||||||
val targetSlidingSyncRooms = toRoomIds.mapNotNull { roomId -> roomListService.roomOrNull(roomId.value) }
|
val targetSlidingSyncRooms = toRoomIds.mapNotNull { roomId -> roomListService.roomOrNull(roomId.value) }
|
||||||
val targetRooms = targetSlidingSyncRooms.mapNotNull { slidingSyncRoom -> slidingSyncRoom.use { it.fullRoom() } }
|
val targetRooms = targetSlidingSyncRooms.map { slidingSyncRoom ->
|
||||||
|
slidingSyncRoom.use { it.fullRoomWithTimeline(null) }
|
||||||
|
}
|
||||||
val failedForwardingTo = mutableSetOf<RoomId>()
|
val failedForwardingTo = mutableSetOf<RoomId>()
|
||||||
targetRooms.parallelMap { room ->
|
targetRooms.parallelMap { room ->
|
||||||
room.use { targetRoom ->
|
room.use { targetRoom ->
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,29 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2024 New Vector Ltd
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package io.element.android.libraries.matrix.impl.roomlist
|
||||||
|
|
||||||
|
import org.matrix.rustcomponents.sdk.Room
|
||||||
|
import org.matrix.rustcomponents.sdk.RoomListItem
|
||||||
|
import org.matrix.rustcomponents.sdk.TimelineEventTypeFilter
|
||||||
|
|
||||||
|
/** Returns a `Room` with an initialized timeline using the given [filter]. */
|
||||||
|
suspend fun RoomListItem.fullRoomWithTimeline(filter: TimelineEventTypeFilter? = null): Room {
|
||||||
|
if (!isTimelineInitialized()) {
|
||||||
|
initTimeline(filter)
|
||||||
|
}
|
||||||
|
return fullRoom()
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue