Ensure that the Rust room is not closed while the driver needs it. (#4694)

This commit is contained in:
Benoit Marty
2025-05-08 09:33:35 +02:00
committed by GitHub
parent 62a1d1bcb9
commit 0e74fe7062
3 changed files with 4 additions and 1 deletions

View File

@@ -48,7 +48,6 @@ class DefaultCallWidgetProvider @Inject constructor(
).getOrThrow()
val driver = room.getWidgetDriver(widgetSettings).getOrThrow()
room.destroy()
CallWidgetProvider.GetWidgetResult(
driver = driver,

View File

@@ -595,6 +595,7 @@ class JoinedRustRoom(
RustWidgetDriver(
widgetSettings = widgetSettings,
room = innerRoom,
joinedRustRoom = this,
widgetCapabilitiesProvider = object : WidgetCapabilitiesProvider {
override fun acquireCapabilities(capabilities: WidgetCapabilities): WidgetCapabilities {
return getElementCallRequiredPermissions(sessionId.value, baseRoom.deviceId.value)

View File

@@ -9,6 +9,7 @@ package io.element.android.libraries.matrix.impl.widget
import io.element.android.libraries.matrix.api.widget.MatrixWidgetDriver
import io.element.android.libraries.matrix.api.widget.MatrixWidgetSettings
import io.element.android.libraries.matrix.impl.room.JoinedRustRoom
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
@@ -24,6 +25,7 @@ import kotlin.coroutines.coroutineContext
class RustWidgetDriver(
widgetSettings: MatrixWidgetSettings,
private val room: Room,
private val joinedRustRoom: JoinedRustRoom,
private val widgetCapabilitiesProvider: WidgetCapabilitiesProvider,
) : MatrixWidgetDriver {
// It's important to have extra capacity here to make sure we don't drop any messages
@@ -69,5 +71,6 @@ class RustWidgetDriver(
override fun close() {
receiveMessageJob?.cancel()
driverAndHandle.driver.close()
joinedRustRoom.destroy()
}
}