|
|
|
@ -21,12 +21,11 @@ import io.element.android.libraries.matrix.api.core.EventId
@@ -21,12 +21,11 @@ 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.room.ForwardEventException |
|
|
|
|
import io.element.android.libraries.matrix.impl.roomlist.roomOrNull |
|
|
|
|
import io.element.android.libraries.matrix.impl.timeline.runWithTimelineListenerRegistered |
|
|
|
|
import kotlinx.coroutines.CancellationException |
|
|
|
|
import kotlinx.coroutines.withTimeout |
|
|
|
|
import org.matrix.rustcomponents.sdk.Room |
|
|
|
|
import org.matrix.rustcomponents.sdk.RoomListService |
|
|
|
|
import org.matrix.rustcomponents.sdk.TimelineDiff |
|
|
|
|
import org.matrix.rustcomponents.sdk.TimelineListener |
|
|
|
|
import kotlin.time.Duration.Companion.milliseconds |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
@ -56,16 +55,14 @@ class RoomContentForwarder(
@@ -56,16 +55,14 @@ class RoomContentForwarder(
|
|
|
|
|
val failedForwardingTo = mutableSetOf<RoomId>() |
|
|
|
|
targetRooms.parallelMap { room -> |
|
|
|
|
room.use { targetRoom -> |
|
|
|
|
val result = runCatching { |
|
|
|
|
runCatching { |
|
|
|
|
// Sending a message requires a registered timeline listener |
|
|
|
|
targetRoom.addTimelineListener(NoOpTimelineListener) |
|
|
|
|
targetRoom.runWithTimelineListenerRegistered { |
|
|
|
|
withTimeout(timeoutMs.milliseconds) { |
|
|
|
|
targetRoom.send(content) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
// After sending, we remove the timeline |
|
|
|
|
targetRoom.removeTimeline() |
|
|
|
|
result |
|
|
|
|
} |
|
|
|
|
}.onFailure { |
|
|
|
|
failedForwardingTo.add(RoomId(room.id())) |
|
|
|
|
if (it is CancellationException) { |
|
|
|
@ -78,8 +75,4 @@ class RoomContentForwarder(
@@ -78,8 +75,4 @@ class RoomContentForwarder(
|
|
|
|
|
throw ForwardEventException(toRoomIds.toList()) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private object NoOpTimelineListener : TimelineListener { |
|
|
|
|
override fun onUpdate(diff: List<TimelineDiff>) = Unit |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|