Makes sure NotificationService is suspendable

This commit is contained in:
ganfra 2023-07-28 17:56:17 +02:00
parent 42f0474dd2
commit a60364d304
4 changed files with 9 additions and 6 deletions

View file

@ -21,5 +21,5 @@ import io.element.android.libraries.matrix.api.core.RoomId
import io.element.android.libraries.matrix.api.core.SessionId import io.element.android.libraries.matrix.api.core.SessionId
interface NotificationService { interface NotificationService {
fun getNotification(userId: SessionId, roomId: RoomId, eventId: EventId, filterByPushRules: Boolean): Result<NotificationData?> suspend fun getNotification(userId: SessionId, roomId: RoomId, eventId: EventId, filterByPushRules: Boolean): Result<NotificationData?>
} }

View file

@ -103,7 +103,7 @@ class RustMatrixClient constructor(
builder.finish() builder.finish()
} }
private val notificationService = RustNotificationService(sessionId, notificationClient, clock) private val notificationService = RustNotificationService(sessionId, notificationClient, dispatchers, clock)
private val isLoggingOut = AtomicBoolean(false) private val isLoggingOut = AtomicBoolean(false)

View file

@ -16,29 +16,32 @@
package io.element.android.libraries.matrix.impl.notification package io.element.android.libraries.matrix.impl.notification
import io.element.android.libraries.core.coroutine.CoroutineDispatchers
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.core.SessionId import io.element.android.libraries.matrix.api.core.SessionId
import io.element.android.libraries.matrix.api.notification.NotificationData import io.element.android.libraries.matrix.api.notification.NotificationData
import io.element.android.libraries.matrix.api.notification.NotificationService import io.element.android.libraries.matrix.api.notification.NotificationService
import io.element.android.services.toolbox.api.systemclock.SystemClock import io.element.android.services.toolbox.api.systemclock.SystemClock
import kotlinx.coroutines.withContext
import org.matrix.rustcomponents.sdk.NotificationClient import org.matrix.rustcomponents.sdk.NotificationClient
import org.matrix.rustcomponents.sdk.use import org.matrix.rustcomponents.sdk.use
class RustNotificationService( class RustNotificationService(
sessionId: SessionId, sessionId: SessionId,
private val notificationClient: NotificationClient, private val notificationClient: NotificationClient,
private val dispatchers: CoroutineDispatchers,
clock: SystemClock, clock: SystemClock,
) : NotificationService { ) : NotificationService {
private val notificationMapper: NotificationMapper = NotificationMapper(sessionId, clock) private val notificationMapper: NotificationMapper = NotificationMapper(sessionId, clock)
override fun getNotification( override suspend fun getNotification(
userId: SessionId, userId: SessionId,
roomId: RoomId, roomId: RoomId,
eventId: EventId, eventId: EventId,
filterByPushRules: Boolean, filterByPushRules: Boolean,
): Result<NotificationData?> { ): Result<NotificationData?> = withContext(dispatchers.io) {
return runCatching { runCatching {
val item = notificationClient.getNotificationWithSlidingSync(roomId.value, eventId.value) val item = notificationClient.getNotificationWithSlidingSync(roomId.value, eventId.value)
item?.use { item?.use {
notificationMapper.map(eventId, roomId, it) notificationMapper.map(eventId, roomId, it)

View file

@ -23,7 +23,7 @@ import io.element.android.libraries.matrix.api.notification.NotificationData
import io.element.android.libraries.matrix.api.notification.NotificationService import io.element.android.libraries.matrix.api.notification.NotificationService
class FakeNotificationService : NotificationService { class FakeNotificationService : NotificationService {
override fun getNotification(userId: SessionId, roomId: RoomId, eventId: EventId, filterByPushRules: Boolean): Result<NotificationData?> { override suspend fun getNotification(userId: SessionId, roomId: RoomId, eventId: EventId, filterByPushRules: Boolean): Result<NotificationData?> {
return Result.success(null) return Result.success(null)
} }
} }