From f2f94c4a936649f4b72b35c1cba12255ab84ea3f Mon Sep 17 00:00:00 2001 From: Benoit Marty <benoitm@matrix.org> Date: Mon, 17 Feb 2020 17:56:11 +0100 Subject: [PATCH] Reduce code duplication --- .../session/room/send/DefaultSendService.kt | 67 +++++++------------ 1 file changed, 23 insertions(+), 44 deletions(-) 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 15494728c3..a99337695a 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 @@ -221,55 +221,34 @@ internal class DefaultSendService @AssistedInject constructor( * We use the roomId of the local echo event */ private fun internalSendMedia(allLocalEchoes: List<Event>, attachment: ContentAttachmentData, compressBeforeSending: Boolean): Cancelable { - val splitLocalEchoes = allLocalEchoes.groupBy { cryptoService.isRoomEncrypted(it.roomId!!) } - - val encryptedLocalEchoes = splitLocalEchoes[true].orEmpty() - val clearLocalEchoes = splitLocalEchoes[false].orEmpty() - val cancelableBag = CancelableBag() - if (encryptedLocalEchoes.isNotEmpty()) { - val uploadWork = createUploadMediaWork(encryptedLocalEchoes, attachment, true, compressBeforeSending, startChain = true) + allLocalEchoes.groupBy { cryptoService.isRoomEncrypted(it.roomId!!) } + .apply { + keys.forEach { isRoomEncrypted -> + // Should never be empty + val localEchoes = get(isRoomEncrypted).orEmpty() + val uploadWork = createUploadMediaWork(localEchoes, attachment, isRoomEncrypted, compressBeforeSending, startChain = true) - val dispatcherWork = createMultipleEventDispatcherWork(true) + val dispatcherWork = createMultipleEventDispatcherWork(isRoomEncrypted) - workManagerProvider.workManager - .beginUniqueWork(buildWorkName(UPLOAD_WORK), ExistingWorkPolicy.APPEND, uploadWork) - .then(dispatcherWork) - .enqueue() - .also { operation -> - operation.result.addListener(Runnable { - if (operation.result.isCancelled) { - Timber.e("CHAIN WAS CANCELLED") - } else if (operation.state.value is Operation.State.FAILURE) { - Timber.e("CHAIN DID FAIL") - } - }, workerFutureListenerExecutor) + workManagerProvider.workManager + .beginUniqueWork(buildWorkName(UPLOAD_WORK), ExistingWorkPolicy.APPEND, uploadWork) + .then(dispatcherWork) + .enqueue() + .also { operation -> + operation.result.addListener(Runnable { + if (operation.result.isCancelled) { + Timber.e("CHAIN WAS CANCELLED") + } else if (operation.state.value is Operation.State.FAILURE) { + Timber.e("CHAIN DID FAIL") + } + }, workerFutureListenerExecutor) + } + + cancelableBag.add(CancelableWork(workManagerProvider.workManager, dispatcherWork.id)) } - - cancelableBag.add(CancelableWork(workManagerProvider.workManager, dispatcherWork.id)) - } - - if (clearLocalEchoes.isNotEmpty()) { - val uploadWork = createUploadMediaWork(clearLocalEchoes, attachment, false, compressBeforeSending, startChain = true) - val dispatcherWork = createMultipleEventDispatcherWork(false) - - workManagerProvider.workManager - .beginUniqueWork(buildWorkName(UPLOAD_WORK), ExistingWorkPolicy.APPEND, uploadWork) - .then(dispatcherWork) - .enqueue() - .also { operation -> - operation.result.addListener(Runnable { - if (operation.result.isCancelled) { - Timber.e("CHAIN WAS CANCELLED") - } else if (operation.state.value is Operation.State.FAILURE) { - Timber.e("CHAIN DID FAIL") - } - }, workerFutureListenerExecutor) - } - - cancelableBag.add(CancelableWork(workManagerProvider.workManager, dispatcherWork.id)) - } + } return cancelableBag }