From ae93c075973b61d5a03b9842fa4bd1e0698bfb6f Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 6 Dec 2022 15:01:47 +0100 Subject: [PATCH] Do not propagate failure if saving the filter server side fails. This will be retried later. --- .../session/filter/GetCurrentFilterTask.kt | 2 +- .../internal/session/filter/SaveFilterTask.kt | 18 +++++++++++------- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/filter/GetCurrentFilterTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/filter/GetCurrentFilterTask.kt index e88f286e27..76805c5c51 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/filter/GetCurrentFilterTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/filter/GetCurrentFilterTask.kt @@ -42,7 +42,7 @@ internal class DefaultGetCurrentFilterTask @Inject constructor( return when (storedFilterBody) { currentFilterBody -> storedFilterId ?: storedFilterBody - else -> saveFilter(currentFilter) + else -> saveFilter(currentFilter) ?: currentFilterBody } } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/filter/SaveFilterTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/filter/SaveFilterTask.kt index 82d5ff4d2f..0223cd3ee7 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/filter/SaveFilterTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/filter/SaveFilterTask.kt @@ -16,6 +16,7 @@ package org.matrix.android.sdk.internal.session.filter +import org.matrix.android.sdk.api.extensions.tryOrNull import org.matrix.android.sdk.internal.di.UserId import org.matrix.android.sdk.internal.network.GlobalErrorReceiver import org.matrix.android.sdk.internal.network.executeRequest @@ -24,8 +25,9 @@ import javax.inject.Inject /** * Save a filter, in db and if any changes, upload to the server. + * Return the filterId if uploading to the server is successful, else return null. */ -internal interface SaveFilterTask : Task { +internal interface SaveFilterTask : Task { data class Params( val filter: Filter @@ -39,18 +41,20 @@ internal class DefaultSaveFilterTask @Inject constructor( private val globalErrorReceiver: GlobalErrorReceiver, ) : SaveFilterTask { - override suspend fun execute(params: SaveFilterTask.Params): String { + override suspend fun execute(params: SaveFilterTask.Params): String? { val filter = params.filter - val filterResponse = executeRequest(globalErrorReceiver) { - // TODO auto retry - filterAPI.uploadFilter(userId, filter) + val filterResponse = tryOrNull { + executeRequest(globalErrorReceiver) { + filterAPI.uploadFilter(userId, filter) + } } + val filterId = filterResponse?.filterId filterRepository.storeSyncFilter( filter = filter, - filterId = filterResponse.filterId, + filterId = filterId.orEmpty(), roomEventFilter = FilterFactory.createDefaultRoomFilter() ) - return filterResponse.filterId + return filterId } }