Add default error message when attachment worker fails

This commit is contained in:
Zorica Stojchevska 2022-10-24 20:32:52 +02:00 committed by Zorica Stojchevska
parent 5e8a9cc516
commit 4484890cf4
2 changed files with 16 additions and 5 deletions

View File

@ -20,6 +20,7 @@
package ch.protonmail.android.usecase.compose
import androidx.work.WorkInfo
import ch.protonmail.android.R
import ch.protonmail.android.activities.messageDetails.repository.MessageDetailsRepository
import ch.protonmail.android.api.models.DatabaseProvider
import ch.protonmail.android.attachments.KEY_OUTPUT_RESULT_UPLOAD_ATTACHMENTS_ERROR
@ -31,6 +32,7 @@ import ch.protonmail.android.core.Constants.MessageLocationType.DRAFT
import ch.protonmail.android.crypto.AddressCrypto
import ch.protonmail.android.data.local.model.Message
import ch.protonmail.android.utils.notifier.UserNotifier
import ch.protonmail.android.utils.resources.StringResourceResolver
import ch.protonmail.android.worker.drafts.CreateDraftWorker
import ch.protonmail.android.worker.drafts.CreateDraftWorkerErrors
import ch.protonmail.android.worker.drafts.KEY_OUTPUT_RESULT_SAVE_DRAFT_ERROR_ENUM
@ -54,7 +56,8 @@ class SaveDraft @Inject constructor(
private val databaseProvider: DatabaseProvider,
private val createDraftWorker: CreateDraftWorker.Enqueuer,
private val uploadAttachmentsWorker: UploadAttachmentsWorker.Enqueuer,
private val userNotifier: UserNotifier
private val userNotifier: UserNotifier,
private val stringResourceResolver: StringResourceResolver,
) {
suspend operator fun invoke(
@ -143,9 +146,10 @@ class SaveDraft @Inject constructor(
.filter { it?.state?.isFinished == true }
.map {
if (it?.state == WorkInfo.State.FAILED) {
val errorMessage = requireNotNull(
it.outputData.getString(KEY_OUTPUT_RESULT_UPLOAD_ATTACHMENTS_ERROR)
)
val errorMessage = it.outputData.getString(KEY_OUTPUT_RESULT_UPLOAD_ATTACHMENTS_ERROR)
?: "${stringResourceResolver(R.string.attachment_failed)} ${localDraft.subject}"
Timber.e("SaveDraft failed permanently for ${localDraft.messageId}. $errorMessage")
userNotifier.showAttachmentUploadError(errorMessage, localDraft.subject)
return@map SaveDraftResult.UploadDraftAttachmentsFailed
}

View File

@ -22,6 +22,7 @@ package ch.protonmail.android.usecase.compose
import androidx.work.Data
import androidx.work.WorkInfo
import androidx.work.workDataOf
import ch.protonmail.android.R
import ch.protonmail.android.activities.messageDetails.repository.MessageDetailsRepository
import ch.protonmail.android.api.models.DatabaseProvider
import ch.protonmail.android.attachments.KEY_OUTPUT_RESULT_UPLOAD_ATTACHMENTS_ERROR
@ -40,6 +41,7 @@ import ch.protonmail.android.pendingaction.data.PendingActionDao
import ch.protonmail.android.pendingaction.data.model.PendingSend
import ch.protonmail.android.usecase.compose.SaveDraft.SaveDraftParameters
import ch.protonmail.android.utils.notifier.UserNotifier
import ch.protonmail.android.utils.resources.StringResourceResolver
import ch.protonmail.android.worker.drafts.CreateDraftWorker.Enqueuer
import ch.protonmail.android.worker.drafts.CreateDraftWorkerErrors
import ch.protonmail.android.worker.drafts.KEY_OUTPUT_RESULT_SAVE_DRAFT_ERROR_ENUM
@ -84,6 +86,10 @@ class SaveDraftTest : CoroutinesTest {
private val userId = UserId("Id")
private val stringResourceResolver: StringResourceResolver = mockk {
every { this@mockk.invoke(R.string.attachment_failed) } returns "Error"
}
private val saveDraft = SaveDraft(
addressCryptoFactory = addressCryptoFactory,
messageDetailsRepository = messageDetailsRepository,
@ -91,7 +97,8 @@ class SaveDraftTest : CoroutinesTest {
databaseProvider = databaseProcess,
createDraftWorker = createDraftScheduler,
uploadAttachmentsWorker = uploadAttachmentsWorkerEnqueuer,
userNotifier = userNotifier
userNotifier = userNotifier,
stringResourceResolver = stringResourceResolver
)
@Test