Skip to content

Commit

Permalink
Convert RelationService to suspend (#2449)
Browse files Browse the repository at this point in the history
  • Loading branch information
bmarty committed Mar 2, 2021
1 parent fc46856 commit d2b39e5
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 41 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ interface RelationService {
/**
* Get the edit history of the given event
*/
fun fetchEditHistory(eventId: String, callback: MatrixCallback<List<Event>>)
suspend fun fetchEditHistory(eventId: String): List<Event>

/**
* Reply to an event in the timeline (must be in same room)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -140,13 +140,8 @@ internal class DefaultRelationService @AssistedInject constructor(
return eventSenderProcessor.postEvent(event, cryptoSessionInfoProvider.isRoomEncrypted(roomId))
}

override fun fetchEditHistory(eventId: String, callback: MatrixCallback<List<Event>>) {
val params = FetchEditHistoryTask.Params(roomId, eventId)
fetchEditHistoryTask
.configureWith(params) {
this.callback = callback
}
.executeBy(taskExecutor)
override suspend fun fetchEditHistory(eventId: String): List<Event> {
return fetchEditHistoryTask.execute(FetchEditHistoryTask.Params(roomId, eventId))
}

override fun replyToMessage(eventReplied: TimelineEvent, replyText: CharSequence, autoMarkdown: Boolean): Cancelable? {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
*/
package im.vector.app.features.home.room.detail.timeline.edithistory

import androidx.lifecycle.viewModelScope
import com.airbnb.mvrx.Fail
import com.airbnb.mvrx.FragmentViewModelContext
import com.airbnb.mvrx.Loading
Expand All @@ -28,10 +29,9 @@ import im.vector.app.core.date.VectorDateFormatter
import im.vector.app.core.platform.EmptyAction
import im.vector.app.core.platform.EmptyViewEvents
import im.vector.app.core.platform.VectorViewModel
import org.matrix.android.sdk.api.MatrixCallback
import kotlinx.coroutines.launch
import org.matrix.android.sdk.api.session.Session
import org.matrix.android.sdk.api.session.crypto.MXCryptoError
import org.matrix.android.sdk.api.session.events.model.Event
import org.matrix.android.sdk.api.session.events.model.isReply
import org.matrix.android.sdk.internal.crypto.algorithms.olm.OlmDecryptionResult
import timber.log.Timber
Expand Down Expand Up @@ -68,48 +68,50 @@ class ViewEditHistoryViewModel @AssistedInject constructor(@Assisted

private fun loadHistory() {
setState { copy(editList = Loading()) }
room.fetchEditHistory(eventId, object : MatrixCallback<List<Event>> {
override fun onFailure(failure: Throwable) {

viewModelScope.launch {
val data = try {
room.fetchEditHistory(eventId)
} catch (failure: Throwable) {
setState {
copy(editList = Fail(failure))
}
return@launch
}

override fun onSuccess(data: List<Event>) {
var originalIsReply = false
var originalIsReply = false

val events = data.map { event ->
val timelineID = event.roomId + UUID.randomUUID().toString()
event.also {
// We need to check encryption
if (it.isEncrypted() && it.mxDecryptionResult == null) {
// for now decrypt sync
try {
val result = session.cryptoService().decryptEvent(it, timelineID)
it.mxDecryptionResult = OlmDecryptionResult(
payload = result.clearEvent,
senderKey = result.senderCurve25519Key,
keysClaimed = result.claimedEd25519Key?.let { k -> mapOf("ed25519" to k) },
forwardingCurve25519KeyChain = result.forwardingCurve25519KeyChain
)
} catch (e: MXCryptoError) {
Timber.w("Failed to decrypt event in history")
}
val events = data.map { event ->
val timelineID = event.roomId + UUID.randomUUID().toString()
event.also {
// We need to check encryption
if (it.isEncrypted() && it.mxDecryptionResult == null) {
// for now decrypt sync
try {
val result = session.cryptoService().decryptEvent(it, timelineID)
it.mxDecryptionResult = OlmDecryptionResult(
payload = result.clearEvent,
senderKey = result.senderCurve25519Key,
keysClaimed = result.claimedEd25519Key?.let { k -> mapOf("ed25519" to k) },
forwardingCurve25519KeyChain = result.forwardingCurve25519KeyChain
)
} catch (e: MXCryptoError) {
Timber.w("Failed to decrypt event in history")
}
}

if (event.eventId == it.eventId) {
originalIsReply = it.isReply()
}
if (event.eventId == it.eventId) {
originalIsReply = it.isReply()
}
}
setState {
copy(
editList = Success(events),
isOriginalAReply = originalIsReply
)
}
}
})
setState {
copy(
editList = Success(events),
isOriginalAReply = originalIsReply
)
}
}
}

override fun handle(action: EmptyAction) {
Expand Down

0 comments on commit d2b39e5

Please sign in to comment.