From aa4327c4da0a02dcfd7b94c310fb966c1f028f54 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 6 Mar 2020 15:15:02 +0100 Subject: [PATCH 1/5] Add doc and log error from the workers --- .../internal/session/content/UploadContentWorker.kt | 4 +++- .../android/internal/session/group/GetGroupDataWorker.kt | 2 ++ .../internal/session/pushers/AddHttpPusherWorker.kt | 2 ++ .../internal/session/room/relation/SendRelationWorker.kt | 3 +++ .../internal/session/room/send/EncryptEventWorker.kt | 6 +++--- .../room/send/MultipleEventSendingDispatcherWorker.kt | 6 +++--- .../internal/session/room/send/RedactEventWorker.kt | 3 +++ .../internal/session/room/send/SendEventWorker.kt | 6 +++--- .../android/internal/session/sync/job/SyncWorker.kt | 6 ++++-- .../android/internal/worker/SessionWorkerParams.kt | 9 ++++++++- 10 files changed, 34 insertions(+), 13 deletions(-) diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/content/UploadContentWorker.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/content/UploadContentWorker.kt index 1dde25fd78..d389efc560 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/content/UploadContentWorker.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/content/UploadContentWorker.kt @@ -69,12 +69,14 @@ internal class UploadContentWorker(val context: Context, params: WorkerParameter override suspend fun doWork(): Result { val params = WorkerParamsFactory.fromData(inputData) ?: return Result.success() + .also { Timber.e("Unable to parse work parameters") } + Timber.v("Starting upload media work with params $params") if (params.lastFailureMessage != null) { // Transmit the error - Timber.v("Stop upload media work due to input failure") return Result.success(inputData) + .also { Timber.e("Work cancelled due to input error from parent") } } val sessionComponent = getSessionComponent(params.sessionId) ?: return Result.success() diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/group/GetGroupDataWorker.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/group/GetGroupDataWorker.kt index 93705774e6..5d63c0bcc0 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/group/GetGroupDataWorker.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/group/GetGroupDataWorker.kt @@ -23,6 +23,7 @@ import com.squareup.moshi.JsonClass import im.vector.matrix.android.internal.worker.SessionWorkerParams import im.vector.matrix.android.internal.worker.WorkerParamsFactory import im.vector.matrix.android.internal.worker.getSessionComponent +import timber.log.Timber import javax.inject.Inject internal class GetGroupDataWorker(context: Context, params: WorkerParameters) : CoroutineWorker(context, params) { @@ -39,6 +40,7 @@ internal class GetGroupDataWorker(context: Context, params: WorkerParameters) : override suspend fun doWork(): Result { val params = WorkerParamsFactory.fromData(inputData) ?: return Result.failure() + .also { Timber.e("Unable to parse work parameters") } val sessionComponent = getSessionComponent(params.sessionId) ?: return Result.success() sessionComponent.inject(this) diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/pushers/AddHttpPusherWorker.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/pushers/AddHttpPusherWorker.kt index adb4bf32c2..ecc39cfdc2 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/pushers/AddHttpPusherWorker.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/pushers/AddHttpPusherWorker.kt @@ -31,6 +31,7 @@ import im.vector.matrix.android.internal.worker.SessionWorkerParams import im.vector.matrix.android.internal.worker.WorkerParamsFactory import im.vector.matrix.android.internal.worker.getSessionComponent import org.greenrobot.eventbus.EventBus +import timber.log.Timber import javax.inject.Inject internal class AddHttpPusherWorker(context: Context, params: WorkerParameters) @@ -50,6 +51,7 @@ internal class AddHttpPusherWorker(context: Context, params: WorkerParameters) override suspend fun doWork(): Result { val params = WorkerParamsFactory.fromData(inputData) ?: return Result.failure() + .also { Timber.e("Unable to parse work parameters") } val sessionComponent = getSessionComponent(params.sessionId) ?: return Result.success() sessionComponent.inject(this) diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/relation/SendRelationWorker.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/relation/SendRelationWorker.kt index 5857eaa89b..9a8f1a7dc6 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/relation/SendRelationWorker.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/relation/SendRelationWorker.kt @@ -31,6 +31,7 @@ import im.vector.matrix.android.internal.worker.SessionWorkerParams import im.vector.matrix.android.internal.worker.WorkerParamsFactory import im.vector.matrix.android.internal.worker.getSessionComponent import org.greenrobot.eventbus.EventBus +import timber.log.Timber import javax.inject.Inject // TODO This is not used. Delete? @@ -51,10 +52,12 @@ internal class SendRelationWorker(context: Context, params: WorkerParameters) : override suspend fun doWork(): Result { val params = WorkerParamsFactory.fromData(inputData) ?: return Result.failure() + .also { Timber.e("Unable to parse work parameters") } if (params.lastFailureMessage != null) { // Transmit the error return Result.success(inputData) + .also { Timber.e("Work cancelled due to input error from parent") } } val sessionComponent = getSessionComponent(params.sessionId) ?: return Result.success() diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/send/EncryptEventWorker.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/send/EncryptEventWorker.kt index 72f5ee56b8..c1528e3ae2 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/send/EncryptEventWorker.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/send/EncryptEventWorker.kt @@ -50,14 +50,14 @@ internal class EncryptEventWorker(context: Context, params: WorkerParameters) override suspend fun doWork(): Result { Timber.v("Start Encrypt work") val params = WorkerParamsFactory.fromData(inputData) - ?: return Result.success().also { - Timber.e("Work cancelled due to input error from parent") - } + ?: return Result.success() + .also { Timber.e("Unable to parse work parameters") } Timber.v("Start Encrypt work for event ${params.event.eventId}") if (params.lastFailureMessage != null) { // Transmit the error return Result.success(inputData) + .also { Timber.e("Work cancelled due to input error from parent") } } val sessionComponent = getSessionComponent(params.sessionId) ?: return Result.success() diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/send/MultipleEventSendingDispatcherWorker.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/send/MultipleEventSendingDispatcherWorker.kt index 03db817dd6..1f89430d27 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/send/MultipleEventSendingDispatcherWorker.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/send/MultipleEventSendingDispatcherWorker.kt @@ -53,13 +53,13 @@ internal class MultipleEventSendingDispatcherWorker(context: Context, params: Wo override suspend fun doWork(): Result { Timber.v("Start dispatch sending multiple event work") val params = WorkerParamsFactory.fromData(inputData) - ?: return Result.success().also { - Timber.e("Work cancelled due to input error from parent") - } + ?: return Result.success() + .also { Timber.e("Unable to parse work parameters") } if (params.lastFailureMessage != null) { // Transmit the error return Result.success(inputData) + .also { Timber.e("Work cancelled due to input error from parent") } } val sessionComponent = getSessionComponent(params.sessionId) ?: return Result.success() diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/send/RedactEventWorker.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/send/RedactEventWorker.kt index 3ff318aa8a..473f23910c 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/send/RedactEventWorker.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/send/RedactEventWorker.kt @@ -26,6 +26,7 @@ import im.vector.matrix.android.internal.worker.SessionWorkerParams import im.vector.matrix.android.internal.worker.WorkerParamsFactory import im.vector.matrix.android.internal.worker.getSessionComponent import org.greenrobot.eventbus.EventBus +import timber.log.Timber import javax.inject.Inject internal class RedactEventWorker(context: Context, params: WorkerParameters) : CoroutineWorker(context, params) { @@ -46,10 +47,12 @@ internal class RedactEventWorker(context: Context, params: WorkerParameters) : C override suspend fun doWork(): Result { val params = WorkerParamsFactory.fromData(inputData) ?: return Result.failure() + .also { Timber.e("Unable to parse work parameters") } if (params.lastFailureMessage != null) { // Transmit the error return Result.success(inputData) + .also { Timber.e("Work cancelled due to input error from parent") } } val sessionComponent = getSessionComponent(params.sessionId) ?: return Result.success() diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/send/SendEventWorker.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/send/SendEventWorker.kt index 69d288a932..ab8fd39c3d 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/send/SendEventWorker.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/send/SendEventWorker.kt @@ -49,9 +49,8 @@ internal class SendEventWorker(context: Context, override suspend fun doWork(): Result { val params = WorkerParamsFactory.fromData(inputData) - ?: return Result.success().also { - Timber.e("Work cancelled due to input error from parent") - } + ?: return Result.success() + .also { Timber.e("Unable to parse work parameters") } val sessionComponent = getSessionComponent(params.sessionId) ?: return Result.success() sessionComponent.inject(this) @@ -65,6 +64,7 @@ internal class SendEventWorker(context: Context, localEchoUpdater.updateSendState(event.eventId, SendState.UNDELIVERED) // Transmit the error return Result.success(inputData) + .also { Timber.e("Work cancelled due to input error from parent") } } return try { sendEvent(event) diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/sync/job/SyncWorker.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/sync/job/SyncWorker.kt index c844db8d33..531a18a08c 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/sync/job/SyncWorker.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/sync/job/SyncWorker.kt @@ -53,7 +53,10 @@ internal class SyncWorker(context: Context, override suspend fun doWork(): Result { Timber.i("Sync work starting") - val params = WorkerParamsFactory.fromData(inputData) ?: return Result.success() + val params = WorkerParamsFactory.fromData(inputData) + ?: return Result.success() + .also { Timber.e("Unable to parse work parameters") } + val sessionComponent = getSessionComponent(params.sessionId) ?: return Result.success() sessionComponent.inject(this) return runCatching { @@ -76,7 +79,6 @@ internal class SyncWorker(context: Context, } companion object { - private const val BG_SYNC_WORK_NAME = "BG_SYNCP" fun requireBackgroundSync(workManagerProvider: WorkManagerProvider, sessionId: String, serverTimeout: Long = 0) { diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/worker/SessionWorkerParams.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/worker/SessionWorkerParams.kt index c05367cf10..3cbe6c7866 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/worker/SessionWorkerParams.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/worker/SessionWorkerParams.kt @@ -16,9 +16,16 @@ package im.vector.matrix.android.internal.worker +/** + * Note about the Worker usage: + * The workers we chain, or when using the append strategy, should never return Result.Failure(), else the chain will be broken forever + */ interface SessionWorkerParams { val sessionId: String - // Null is no error occurs. When chaining Workers, first step is to check that there is no lastFailureMessage from the previous workers + /** + * Null when no error occurs. When chaining Workers, first step is to check that there is no lastFailureMessage from the previous workers + * If it is the case, the worker should just transmit the error and shouldn't do anything else + */ val lastFailureMessage: String? } From d1db17f2447fa7cb511ca9bca2ee343eec47bdd9 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 6 Mar 2020 15:45:26 +0100 Subject: [PATCH 2/5] Add doc on workers --- .../crypto/verification/SendVerificationMessageWorker.kt | 4 ++++ .../android/internal/session/content/UploadContentWorker.kt | 4 ++++ .../android/internal/session/group/GetGroupDataWorker.kt | 4 ++++ .../android/internal/session/room/send/EncryptEventWorker.kt | 4 ++++ .../session/room/send/MultipleEventSendingDispatcherWorker.kt | 4 ++++ .../android/internal/session/room/send/RedactEventWorker.kt | 4 ++++ .../android/internal/session/room/send/SendEventWorker.kt | 4 ++++ .../matrix/android/internal/session/sync/job/SyncWorker.kt | 4 ++++ 8 files changed, 32 insertions(+) diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/SendVerificationMessageWorker.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/SendVerificationMessageWorker.kt index 2b049e0061..0d5387bbe0 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/SendVerificationMessageWorker.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/SendVerificationMessageWorker.kt @@ -30,6 +30,10 @@ import im.vector.matrix.android.internal.worker.getSessionComponent import timber.log.Timber import javax.inject.Inject +/** + * Possible previous worker: None + * Possible next worker : None + */ internal class SendVerificationMessageWorker(context: Context, params: WorkerParameters) : CoroutineWorker(context, params) { diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/content/UploadContentWorker.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/content/UploadContentWorker.kt index d389efc560..e82728da7e 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/content/UploadContentWorker.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/content/UploadContentWorker.kt @@ -51,6 +51,10 @@ private data class NewImageAttributes( val newFileSize: Int ) +/** + * Possible previous worker: None + * Possible next worker : Always [MultipleEventSendingDispatcherWorker] + */ internal class UploadContentWorker(val context: Context, params: WorkerParameters) : CoroutineWorker(context, params) { @JsonClass(generateAdapter = true) diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/group/GetGroupDataWorker.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/group/GetGroupDataWorker.kt index 5d63c0bcc0..bb33212f9c 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/group/GetGroupDataWorker.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/group/GetGroupDataWorker.kt @@ -26,6 +26,10 @@ import im.vector.matrix.android.internal.worker.getSessionComponent import timber.log.Timber import javax.inject.Inject +/** + * Possible previous worker: None + * Possible next worker : None + */ internal class GetGroupDataWorker(context: Context, params: WorkerParameters) : CoroutineWorker(context, params) { @JsonClass(generateAdapter = true) diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/send/EncryptEventWorker.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/send/EncryptEventWorker.kt index c1528e3ae2..7155d65f9c 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/send/EncryptEventWorker.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/send/EncryptEventWorker.kt @@ -32,6 +32,10 @@ import im.vector.matrix.android.internal.worker.getSessionComponent import timber.log.Timber import javax.inject.Inject +/** + * Possible previous worker: None + * Possible next worker : Always [SendEventWorker] + */ internal class EncryptEventWorker(context: Context, params: WorkerParameters) : CoroutineWorker(context, params) { diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/send/MultipleEventSendingDispatcherWorker.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/send/MultipleEventSendingDispatcherWorker.kt index 1f89430d27..44a8bc444a 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/send/MultipleEventSendingDispatcherWorker.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/send/MultipleEventSendingDispatcherWorker.kt @@ -24,6 +24,7 @@ import androidx.work.WorkerParameters import com.squareup.moshi.JsonClass import im.vector.matrix.android.api.session.events.model.Event import im.vector.matrix.android.internal.di.WorkManagerProvider +import im.vector.matrix.android.internal.session.content.UploadContentWorker import im.vector.matrix.android.internal.session.room.timeline.TimelineSendEventWorkCommon import im.vector.matrix.android.internal.worker.SessionWorkerParams import im.vector.matrix.android.internal.worker.WorkerParamsFactory @@ -35,6 +36,9 @@ import javax.inject.Inject /** * This worker creates a new work for each events passed in parameter + * + * Possible previous worker: Always [UploadContentWorker] + * Possible next worker : None, but it will post new work to send events, encrypted or not */ internal class MultipleEventSendingDispatcherWorker(context: Context, params: WorkerParameters) : CoroutineWorker(context, params) { diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/send/RedactEventWorker.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/send/RedactEventWorker.kt index 473f23910c..7e0b665d63 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/send/RedactEventWorker.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/send/RedactEventWorker.kt @@ -29,6 +29,10 @@ import org.greenrobot.eventbus.EventBus import timber.log.Timber import javax.inject.Inject +/** + * Possible previous worker: None + * Possible next worker : None + */ internal class RedactEventWorker(context: Context, params: WorkerParameters) : CoroutineWorker(context, params) { @JsonClass(generateAdapter = true) diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/send/SendEventWorker.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/send/SendEventWorker.kt index ab8fd39c3d..d55b9665f6 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/send/SendEventWorker.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/send/SendEventWorker.kt @@ -32,6 +32,10 @@ import org.greenrobot.eventbus.EventBus import timber.log.Timber import javax.inject.Inject +/** + * Possible previous worker: [EncryptEventWorker] or first worker + * Possible next worker : None + */ internal class SendEventWorker(context: Context, params: WorkerParameters) : CoroutineWorker(context, params) { diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/sync/job/SyncWorker.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/sync/job/SyncWorker.kt index 531a18a08c..ab4e1938ce 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/sync/job/SyncWorker.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/sync/job/SyncWorker.kt @@ -35,6 +35,10 @@ import javax.inject.Inject private const val DEFAULT_LONG_POOL_TIMEOUT = 0L +/** + * Possible previous worker: None + * Possible next worker : None + */ internal class SyncWorker(context: Context, workerParameters: WorkerParameters ) : CoroutineWorker(context, workerParameters) { From ccd9d2961d329a21e75c5fce5ab658c94fa05384 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 6 Mar 2020 15:45:39 +0100 Subject: [PATCH 3/5] Cleanup --- .../android/internal/session/group/GroupSummaryUpdater.kt | 4 ++-- .../internal/session/room/send/DefaultSendService.kt | 7 +++---- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/group/GroupSummaryUpdater.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/group/GroupSummaryUpdater.kt index 3ca5a03822..9808b584aa 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/group/GroupSummaryUpdater.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/group/GroupSummaryUpdater.kt @@ -69,13 +69,13 @@ internal class GroupSummaryUpdater @Inject constructor( val workData = WorkerParamsFactory.toData(getGroupDataWorkerParams) - val sendWork = workManagerProvider.matrixOneTimeWorkRequestBuilder() + val getGroupWork = workManagerProvider.matrixOneTimeWorkRequestBuilder() .setInputData(workData) .setConstraints(WorkManagerProvider.workConstraints) .build() workManagerProvider.workManager - .beginUniqueWork(GET_GROUP_DATA_WORKER, ExistingWorkPolicy.APPEND, sendWork) + .beginUniqueWork(GET_GROUP_DATA_WORKER, ExistingWorkPolicy.APPEND, getGroupWork) .enqueue() } diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/send/DefaultSendService.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/send/DefaultSendService.kt index a99337695a..1037b7c79c 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/send/DefaultSendService.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/send/DefaultSendService.kt @@ -228,7 +228,7 @@ internal class DefaultSendService @AssistedInject constructor( keys.forEach { isRoomEncrypted -> // Should never be empty val localEchoes = get(isRoomEncrypted).orEmpty() - val uploadWork = createUploadMediaWork(localEchoes, attachment, isRoomEncrypted, compressBeforeSending, startChain = true) + val uploadWork = createUploadMediaWork(localEchoes, attachment, isRoomEncrypted, compressBeforeSending) val dispatcherWork = createMultipleEventDispatcherWork(isRoomEncrypted) @@ -293,14 +293,13 @@ internal class DefaultSendService @AssistedInject constructor( private fun createUploadMediaWork(allLocalEchos: List, attachment: ContentAttachmentData, isRoomEncrypted: Boolean, - compressBeforeSending: Boolean, - startChain: Boolean): OneTimeWorkRequest { + compressBeforeSending: Boolean): OneTimeWorkRequest { val uploadMediaWorkerParams = UploadContentWorker.Params(sessionId, allLocalEchos, attachment, isRoomEncrypted, compressBeforeSending) val uploadWorkData = WorkerParamsFactory.toData(uploadMediaWorkerParams) return workManagerProvider.matrixOneTimeWorkRequestBuilder() .setConstraints(WorkManagerProvider.workConstraints) - .startChain(startChain) + .startChain(true) .setInputData(uploadWorkData) .setBackoffCriteria(BackoffPolicy.LINEAR, WorkManagerProvider.BACKOFF_DELAY, TimeUnit.MILLISECONDS) .build() From cb4752812aa1b445e5524179da3ee8c392a57b0e Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 6 Mar 2020 15:53:55 +0100 Subject: [PATCH 4/5] Hide private key --- .../verification/SendVerificationMessageWorker.kt | 10 +++++++++- .../verification/VerificationTransportRoomMessage.kt | 6 +++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/SendVerificationMessageWorker.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/SendVerificationMessageWorker.kt index 0d5387bbe0..95376fb0cc 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/SendVerificationMessageWorker.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/SendVerificationMessageWorker.kt @@ -52,7 +52,7 @@ internal class SendVerificationMessageWorker(context: Context, lateinit var cryptoService: CryptoService override suspend fun doWork(): Result { - val errorOutputData = Data.Builder().putBoolean("failed", true).build() + val errorOutputData = Data.Builder().putBoolean(OUTPUT_KEY_FAILED, true).build() val params = WorkerParamsFactory.fromData(inputData) ?: return Result.success(errorOutputData) @@ -80,4 +80,12 @@ internal class SendVerificationMessageWorker(context: Context, } } } + + companion object { + private const val OUTPUT_KEY_FAILED = "failed" + + fun hasFailed(outputData: Data): Boolean { + return outputData.getBoolean(SendVerificationMessageWorker.OUTPUT_KEY_FAILED, false) + } + } } diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationTransportRoomMessage.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationTransportRoomMessage.kt index 7a6e3b40ac..75f5ecb034 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationTransportRoomMessage.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationTransportRoomMessage.kt @@ -22,8 +22,8 @@ import androidx.work.ExistingWorkPolicy import androidx.work.Operation import androidx.work.WorkInfo import im.vector.matrix.android.R -import im.vector.matrix.android.api.session.crypto.verification.ValidVerificationInfoRequest import im.vector.matrix.android.api.session.crypto.verification.CancelCode +import im.vector.matrix.android.api.session.crypto.verification.ValidVerificationInfoRequest import im.vector.matrix.android.api.session.crypto.verification.VerificationTxState import im.vector.matrix.android.api.session.events.model.Content import im.vector.matrix.android.api.session.events.model.Event @@ -115,7 +115,7 @@ internal class VerificationTransportRoomMessage( ?.filter { it.state == WorkInfo.State.SUCCEEDED } ?.firstOrNull { it.id == enqueueInfo.second } ?.let { wInfo -> - if (wInfo.outputData.getBoolean("failed", false)) { + if (SendVerificationMessageWorker.hasFailed(wInfo.outputData)) { Timber.e("## SAS verification [${tx?.transactionId}] failed to send verification message in state : ${tx?.state}") tx?.cancel(onErrorReason) } else { @@ -196,7 +196,7 @@ internal class VerificationTransportRoomMessage( ?.filter { it.state == WorkInfo.State.SUCCEEDED } ?.firstOrNull { it.id == workRequest.id } ?.let { wInfo -> - if (wInfo.outputData.getBoolean("failed", false)) { + if (SendVerificationMessageWorker.hasFailed(wInfo.outputData)) { callback(null, null) } else if (wInfo.outputData.getString(localId) != null) { callback(wInfo.outputData.getString(localId), validInfo) From a8e19f3cc94ba9c6787e1b4d0e8f9078335c3f3e Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 6 Mar 2020 15:57:49 +0100 Subject: [PATCH 5/5] Understanding things --- .../crypto/verification/VerificationTransport.kt | 3 +++ .../verification/VerificationTransportRoomMessage.kt | 9 ++++++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationTransport.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationTransport.kt index cedcf2865d..081e1f9ec5 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationTransport.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationTransport.kt @@ -34,6 +34,9 @@ internal interface VerificationTransport { onErrorReason: CancelCode, onDone: (() -> Unit)?) + /** + * @param callback will be called with eventId and ValidVerificationInfoRequest in case of success + */ fun sendVerificationRequest(supportedMethods: List, localId: String, otherUserId: String, diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationTransportRoomMessage.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationTransportRoomMessage.kt index 75f5ecb034..c0fbe2e41f 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationTransportRoomMessage.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/VerificationTransportRoomMessage.kt @@ -198,10 +198,13 @@ internal class VerificationTransportRoomMessage( ?.let { wInfo -> if (SendVerificationMessageWorker.hasFailed(wInfo.outputData)) { callback(null, null) - } else if (wInfo.outputData.getString(localId) != null) { - callback(wInfo.outputData.getString(localId), validInfo) } else { - callback(null, null) + val eventId = wInfo.outputData.getString(localId) + if (eventId != null) { + callback(eventId, validInfo) + } else { + callback(null, null) + } } workLiveData.removeObserver(this) }