Update dependency org.matrix.rustcomponents:sdk-android to v0.1.38 (#1015)

* Update dependency org.matrix.rustcomponents:sdk-android to v0.1.38

* Fix API breaks

* Use `roomListItem.avatarUrl` if possible

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Jorge Martín <jorgem@element.io>
This commit is contained in:
renovate[bot] 2023-08-01 12:29:36 +02:00 committed by GitHub
parent e453b984ef
commit acd2623598
5 changed files with 17 additions and 13 deletions

View file

@ -145,7 +145,7 @@ jsoup = { module = "org.jsoup:jsoup", version.ref = "jsoup" }
appyx_core = { module = "com.bumble.appyx:core", version.ref = "appyx" } appyx_core = { module = "com.bumble.appyx:core", version.ref = "appyx" }
molecule-runtime = { module = "app.cash.molecule:molecule-runtime", version.ref = "molecule" } molecule-runtime = { module = "app.cash.molecule:molecule-runtime", version.ref = "molecule" }
timber = "com.jakewharton.timber:timber:5.0.1" timber = "com.jakewharton.timber:timber:5.0.1"
matrix_sdk = "org.matrix.rustcomponents:sdk-android:0.1.37" matrix_sdk = "org.matrix.rustcomponents:sdk-android:0.1.38"
sqldelight-driver-android = { module = "com.squareup.sqldelight:android-driver", version.ref = "sqldelight" } sqldelight-driver-android = { module = "com.squareup.sqldelight:android-driver", version.ref = "sqldelight" }
sqldelight-driver-jvm = { module = "com.squareup.sqldelight:sqlite-driver", version.ref = "sqldelight" } sqldelight-driver-jvm = { module = "com.squareup.sqldelight:sqlite-driver", version.ref = "sqldelight" }
sqldelight-coroutines = { module = "com.squareup.sqldelight:coroutines-extensions", version.ref = "sqldelight" } sqldelight-coroutines = { module = "com.squareup.sqldelight:coroutines-extensions", version.ref = "sqldelight" }

View file

@ -20,6 +20,7 @@ import io.element.android.libraries.core.bool.orFalse
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.core.UserId
import io.element.android.libraries.matrix.api.notification.NotificationContent import io.element.android.libraries.matrix.api.notification.NotificationContent
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.room.RoomMembershipState import io.element.android.libraries.matrix.api.room.RoomMembershipState
@ -39,6 +40,8 @@ class NotificationMapper(
roomId: RoomId, roomId: RoomId,
notificationItem: NotificationItem notificationItem: NotificationItem
): NotificationData { ): NotificationData {
notificationItem.event.use { (it as NotificationEvent.Timeline).event }
val senderId = UserId(notificationItem.senderInfo.senderId)
return notificationItem.use { item -> return notificationItem.use { item ->
NotificationData( NotificationData(
eventId = eventId, eventId = eventId,
@ -50,8 +53,8 @@ class NotificationMapper(
isDirect = item.roomInfo.isDirect, isDirect = item.roomInfo.isDirect,
isEncrypted = item.roomInfo.isEncrypted.orFalse(), isEncrypted = item.roomInfo.isEncrypted.orFalse(),
isNoisy = item.isNoisy.orFalse(), isNoisy = item.isNoisy.orFalse(),
timestamp = item.timestamp() ?: clock.epochMillis(), timestamp = item.timestamp(clock),
content = item.event.use(notificationContentMapper::map), content = item.event.use { notificationContentMapper.map(senderId, it) },
contentUrl = null, contentUrl = null,
) )
} }
@ -63,9 +66,9 @@ class NotificationContentMapper(
) { ) {
private val timelineEventToNotificationContentMapper = TimelineEventToNotificationContentMapper() private val timelineEventToNotificationContentMapper = TimelineEventToNotificationContentMapper()
fun map(notificationEvent: NotificationEvent): NotificationContent = fun map(senderId: UserId, notificationEvent: NotificationEvent): NotificationContent =
when (notificationEvent) { when (notificationEvent) {
is NotificationEvent.Timeline -> timelineEventToNotificationContentMapper.map(notificationEvent.event) is NotificationEvent.Timeline -> timelineEventToNotificationContentMapper.map(senderId, notificationEvent.event)
is NotificationEvent.Invite -> NotificationContent.StateEvent.RoomMemberContent( is NotificationEvent.Invite -> NotificationContent.StateEvent.RoomMemberContent(
userId = sessionId.value, userId = sessionId.value,
membershipState = RoomMembershipState.INVITE, membershipState = RoomMembershipState.INVITE,
@ -73,6 +76,8 @@ class NotificationContentMapper(
} }
} }
private fun NotificationItem.timestamp(): Long? { private fun NotificationItem.timestamp(clock: SystemClock): Long {
return (this.event as? NotificationEvent.Timeline)?.event?.timestamp()?.toLong() // FIXME we can't get the timestamp from the notification item anymore, so we need to fake it
// return (this.event as? NotificationEvent.Timeline)?.event?.timestamp()?.toLong()
return clock.epochMillis()
} }

View file

@ -42,7 +42,7 @@ class RustNotificationService(
filterByPushRules: Boolean, filterByPushRules: Boolean,
): Result<NotificationData?> = withContext(dispatchers.io) { ): Result<NotificationData?> = withContext(dispatchers.io) {
runCatching { runCatching {
val item = notificationClient.getNotificationWithSlidingSync(roomId.value, eventId.value) val item = notificationClient.getNotification(roomId.value, eventId.value)
item?.use { item?.use {
notificationMapper.map(eventId, roomId, it) notificationMapper.map(eventId, roomId, it)
} }

View file

@ -22,16 +22,15 @@ import io.element.android.libraries.matrix.impl.room.RoomMemberMapper
import io.element.android.libraries.matrix.impl.timeline.item.event.EventMessageMapper import io.element.android.libraries.matrix.impl.timeline.item.event.EventMessageMapper
import org.matrix.rustcomponents.sdk.MessageLikeEventContent import org.matrix.rustcomponents.sdk.MessageLikeEventContent
import org.matrix.rustcomponents.sdk.StateEventContent import org.matrix.rustcomponents.sdk.StateEventContent
import org.matrix.rustcomponents.sdk.TimelineEvent
import org.matrix.rustcomponents.sdk.TimelineEventType import org.matrix.rustcomponents.sdk.TimelineEventType
import org.matrix.rustcomponents.sdk.use import org.matrix.rustcomponents.sdk.use
import javax.inject.Inject import javax.inject.Inject
class TimelineEventToNotificationContentMapper @Inject constructor() { class TimelineEventToNotificationContentMapper @Inject constructor() {
fun map(timelineEvent: TimelineEvent): NotificationContent { fun map(senderId: UserId, timelineEventType: TimelineEventType): NotificationContent {
return timelineEvent.use { return timelineEventType.use {
it.eventType().toContent(senderId = UserId(timelineEvent.senderId())) it.toContent(senderId = senderId)
} }
} }
} }

View file

@ -140,7 +140,7 @@ class RustMatrixRoom(
override val avatarUrl: String? override val avatarUrl: String?
get() { get() {
return innerRoom.avatarUrl() return roomListItem.avatarUrl() ?: innerRoom.avatarUrl()
} }
override val isEncrypted: Boolean override val isEncrypted: Boolean