From 9238a208ba1d680c6a23c45c25ce385ceee61d70 Mon Sep 17 00:00:00 2001 From: Ashish Date: Thu, 16 Sep 2021 13:27:58 +0530 Subject: [PATCH] Fixes #4601 - 1. Handle possible exceptions in upload file from stash 2. Modify MWException, as error is nullable, update getTitle and getMessage to rever that (#4627) --- .../free/nrw/commons/upload/UploadClient.java | 4 ++-- .../free/nrw/commons/upload/UploadResponse.kt | 2 +- .../nrw/commons/upload/worker/UploadWorker.kt | 12 +++++++++--- .../wikipedia/dataclient/mwapi/MwException.java | 17 +++++++++++++---- 4 files changed, 25 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/upload/UploadClient.java b/app/src/main/java/fr/free/nrw/commons/upload/UploadClient.java index 7bc686008..0577ee39d 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/UploadClient.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/UploadClient.java @@ -218,13 +218,13 @@ public class UploadClient { CommonsApplication.DEFAULT_EDIT_SUMMARY, uniqueFileName, fileKey).map(uploadResponse -> { - UploadResponse uploadResult = gson + final UploadResponse uploadResult = gson .fromJson(uploadResponse, UploadResponse.class); if (uploadResult.getUpload() == null) { final MwException exception = gson .fromJson(uploadResponse, MwException.class); Timber.e(exception, "Error in uploading file from stash"); - throw new RuntimeException(exception.getErrorCode()); + throw new Exception(exception.getErrorCode()); } return uploadResult.getUpload(); }); diff --git a/app/src/main/java/fr/free/nrw/commons/upload/UploadResponse.kt b/app/src/main/java/fr/free/nrw/commons/upload/UploadResponse.kt index 28f83b669..ff9dcc5b7 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/UploadResponse.kt +++ b/app/src/main/java/fr/free/nrw/commons/upload/UploadResponse.kt @@ -1,3 +1,3 @@ package fr.free.nrw.commons.upload -class UploadResponse(val upload: UploadResult) \ No newline at end of file +class UploadResponse(val upload: UploadResult?) \ No newline at end of file diff --git a/app/src/main/java/fr/free/nrw/commons/upload/worker/UploadWorker.kt b/app/src/main/java/fr/free/nrw/commons/upload/worker/UploadWorker.kt index fc179f634..1993c8ea5 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/worker/UploadWorker.kt +++ b/app/src/main/java/fr/free/nrw/commons/upload/worker/UploadWorker.kt @@ -21,6 +21,7 @@ import fr.free.nrw.commons.contributions.ContributionDao import fr.free.nrw.commons.di.ApplicationlessInjection import fr.free.nrw.commons.location.LatLng import fr.free.nrw.commons.media.MediaClient +import fr.free.nrw.commons.upload.StashUploadResult import fr.free.nrw.commons.upload.StashUploadState import fr.free.nrw.commons.upload.UploadClient import fr.free.nrw.commons.upload.UploadResult @@ -265,7 +266,9 @@ class UploadWorker(var appContext: Context, workerParams: WorkerParameters) : //Upload the file to stash val stashUploadResult = uploadClient.uploadFileToStash( appContext, filename, contribution, notificationProgressUpdater - ).blockingSingle() + ).onErrorReturn{ + return@onErrorReturn StashUploadResult(StashUploadState.FAILED,fileKey = null) + }.blockingSingle() when (stashUploadResult.state) { StashUploadState.SUCCESS -> { @@ -278,9 +281,11 @@ class UploadWorker(var appContext: Context, workerParams: WorkerParameters) : //Upload the file from stash val uploadResult = uploadClient.uploadFileFromStash( contribution, uniqueFileName, stashUploadResult.fileKey - ).blockingSingle() + ).onErrorReturn { + return@onErrorReturn null + }.blockingSingle() - if (uploadResult.isSuccessful()) { + if (null != uploadResult && uploadResult.isSuccessful()) { Timber.d( "Stash Upload success..proceeding to make wikidata edit" ) @@ -313,6 +318,7 @@ class UploadWorker(var appContext: Context, workerParams: WorkerParameters) : Timber.e("Upload from stash failed for contribution : $filename") showFailedNotification(contribution) contribution.state=Contribution.STATE_FAILED + contributionDao.saveSynchronous(contribution) if (STASH_ERROR_CODES.contains(exception.message)) { clearChunks(contribution) } diff --git a/data-client/src/main/java/org/wikipedia/dataclient/mwapi/MwException.java b/data-client/src/main/java/org/wikipedia/dataclient/mwapi/MwException.java index 51af36196..146b3cdba 100644 --- a/data-client/src/main/java/org/wikipedia/dataclient/mwapi/MwException.java +++ b/data-client/src/main/java/org/wikipedia/dataclient/mwapi/MwException.java @@ -31,11 +31,20 @@ public class MwException extends RuntimeException { return error; } - @Nullable public String getTitle() { - return error.getTitle(); + @Nullable + public String getTitle() { + if (error != null) { + return error.getTitle(); + } + return errors != null ? errors.get(0).getTitle() : null; } - @Override @Nullable public String getMessage() { - return error.getDetails(); + @Override + @Nullable + public String getMessage() { + if (error != null) { + return error.getDetails(); + } + return errors != null ? errors.get(0).getDetails() : null; } }