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)

This commit is contained in:
Ashish 2021-09-16 13:27:58 +05:30 committed by GitHub
parent 553a1d983e
commit 9238a208ba
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 25 additions and 10 deletions

View file

@ -218,13 +218,13 @@ public class UploadClient {
CommonsApplication.DEFAULT_EDIT_SUMMARY, CommonsApplication.DEFAULT_EDIT_SUMMARY,
uniqueFileName, uniqueFileName,
fileKey).map(uploadResponse -> { fileKey).map(uploadResponse -> {
UploadResponse uploadResult = gson final UploadResponse uploadResult = gson
.fromJson(uploadResponse, UploadResponse.class); .fromJson(uploadResponse, UploadResponse.class);
if (uploadResult.getUpload() == null) { if (uploadResult.getUpload() == null) {
final MwException exception = gson final MwException exception = gson
.fromJson(uploadResponse, MwException.class); .fromJson(uploadResponse, MwException.class);
Timber.e(exception, "Error in uploading file from stash"); Timber.e(exception, "Error in uploading file from stash");
throw new RuntimeException(exception.getErrorCode()); throw new Exception(exception.getErrorCode());
} }
return uploadResult.getUpload(); return uploadResult.getUpload();
}); });

View file

@ -1,3 +1,3 @@
package fr.free.nrw.commons.upload package fr.free.nrw.commons.upload
class UploadResponse(val upload: UploadResult) class UploadResponse(val upload: UploadResult?)

View file

@ -21,6 +21,7 @@ import fr.free.nrw.commons.contributions.ContributionDao
import fr.free.nrw.commons.di.ApplicationlessInjection import fr.free.nrw.commons.di.ApplicationlessInjection
import fr.free.nrw.commons.location.LatLng import fr.free.nrw.commons.location.LatLng
import fr.free.nrw.commons.media.MediaClient 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.StashUploadState
import fr.free.nrw.commons.upload.UploadClient import fr.free.nrw.commons.upload.UploadClient
import fr.free.nrw.commons.upload.UploadResult import fr.free.nrw.commons.upload.UploadResult
@ -265,7 +266,9 @@ class UploadWorker(var appContext: Context, workerParams: WorkerParameters) :
//Upload the file to stash //Upload the file to stash
val stashUploadResult = uploadClient.uploadFileToStash( val stashUploadResult = uploadClient.uploadFileToStash(
appContext, filename, contribution, notificationProgressUpdater appContext, filename, contribution, notificationProgressUpdater
).blockingSingle() ).onErrorReturn{
return@onErrorReturn StashUploadResult(StashUploadState.FAILED,fileKey = null)
}.blockingSingle()
when (stashUploadResult.state) { when (stashUploadResult.state) {
StashUploadState.SUCCESS -> { StashUploadState.SUCCESS -> {
@ -278,9 +281,11 @@ class UploadWorker(var appContext: Context, workerParams: WorkerParameters) :
//Upload the file from stash //Upload the file from stash
val uploadResult = uploadClient.uploadFileFromStash( val uploadResult = uploadClient.uploadFileFromStash(
contribution, uniqueFileName, stashUploadResult.fileKey contribution, uniqueFileName, stashUploadResult.fileKey
).blockingSingle() ).onErrorReturn {
return@onErrorReturn null
}.blockingSingle()
if (uploadResult.isSuccessful()) { if (null != uploadResult && uploadResult.isSuccessful()) {
Timber.d( Timber.d(
"Stash Upload success..proceeding to make wikidata edit" "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") Timber.e("Upload from stash failed for contribution : $filename")
showFailedNotification(contribution) showFailedNotification(contribution)
contribution.state=Contribution.STATE_FAILED contribution.state=Contribution.STATE_FAILED
contributionDao.saveSynchronous(contribution)
if (STASH_ERROR_CODES.contains(exception.message)) { if (STASH_ERROR_CODES.contains(exception.message)) {
clearChunks(contribution) clearChunks(contribution)
} }

View file

@ -31,11 +31,20 @@ public class MwException extends RuntimeException {
return error; return error;
} }
@Nullable public String getTitle() { @Nullable
return error.getTitle(); public String getTitle() {
if (error != null) {
return error.getTitle();
}
return errors != null ? errors.get(0).getTitle() : null;
} }
@Override @Nullable public String getMessage() { @Override
return error.getDetails(); @Nullable
public String getMessage() {
if (error != null) {
return error.getDetails();
}
return errors != null ? errors.get(0).getDetails() : null;
} }
} }