@@ -18,6 +18,7 @@ package im.vector.app.features.home.room.detail
18
18
19
19
import android.net.Uri
20
20
import androidx.annotation.IdRes
21
+ import androidx.core.net.toUri
21
22
import androidx.lifecycle.asFlow
22
23
import com.airbnb.mvrx.Async
23
24
import com.airbnb.mvrx.Fail
@@ -84,6 +85,7 @@ import kotlinx.coroutines.flow.onEach
84
85
import kotlinx.coroutines.launch
85
86
import kotlinx.coroutines.withContext
86
87
import org.matrix.android.sdk.api.MatrixPatterns
88
+ import org.matrix.android.sdk.api.MatrixUrls.isMxcUrl
87
89
import org.matrix.android.sdk.api.extensions.orFalse
88
90
import org.matrix.android.sdk.api.extensions.tryOrNull
89
91
import org.matrix.android.sdk.api.query.QueryStringValue
@@ -111,6 +113,8 @@ import org.matrix.android.sdk.api.session.room.model.Membership
111
113
import org.matrix.android.sdk.api.session.room.model.RoomMemberSummary
112
114
import org.matrix.android.sdk.api.session.room.model.RoomSummary
113
115
import org.matrix.android.sdk.api.session.room.model.localecho.RoomLocalEcho
116
+ import org.matrix.android.sdk.api.session.room.model.message.MessageContent
117
+ import org.matrix.android.sdk.api.session.room.model.message.MessageWithAttachmentContent
114
118
import org.matrix.android.sdk.api.session.room.model.message.getFileUrl
115
119
import org.matrix.android.sdk.api.session.room.model.relation.RelationDefaultContent
116
120
import org.matrix.android.sdk.api.session.room.model.tombstone.RoomTombstoneContent
@@ -1074,18 +1078,17 @@ class TimelineViewModel @AssistedInject constructor(
1074
1078
1075
1079
private fun handleCancel (action : RoomDetailAction .CancelSend ) {
1076
1080
if (room == null ) return
1077
- if (action.force) {
1078
- room.sendService().cancelSend(action.eventId)
1079
- return
1080
- }
1081
- val targetEventId = action.eventId
1082
- room.getTimelineEvent(targetEventId)?.let {
1083
- // State must be in one of the sending states
1084
- if (! it.root.sendState.isSending()) {
1085
- Timber .e(" Cannot cancel message, it is not sending" )
1086
- return
1081
+ // State must be in one of the sending states
1082
+ if (action.force || action.event.root.sendState.isSending()) {
1083
+ room.sendService().cancelSend(action.event.eventId)
1084
+
1085
+ val clearContent = action.event.root.getClearContent()
1086
+ val messageContent = clearContent?.toModel<MessageContent >() as ? MessageWithAttachmentContent
1087
+ messageContent?.getFileUrl()?.takeIf { ! it.isMxcUrl() }?.let {
1088
+ _viewEvents .post(RoomDetailViewEvents .RevokeFilePermission (it.toUri()))
1087
1089
}
1088
- room.sendService().cancelSend(targetEventId)
1090
+ } else {
1091
+ Timber .e(" Cannot cancel message, it is not sending" )
1089
1092
}
1090
1093
}
1091
1094
0 commit comments