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:
parent
e453b984ef
commit
acd2623598
5 changed files with 17 additions and 13 deletions
|
|
@ -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" }
|
||||||
|
|
|
||||||
|
|
@ -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()
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue