From 59caee38a975d8691d04e98c79ebd8c96f66b99c Mon Sep 17 00:00:00 2001 From: YuviPanda Date: Mon, 4 Feb 2013 00:34:59 +0530 Subject: [PATCH] Show failed uploads in my contributions --- commons/res/values/strings.xml | 1 + .../org/wikimedia/commons/UploadService.java | 55 +++++++++---------- .../commons/contributions/Contribution.java | 5 +- .../contributions/ContributionsActivity.java | 21 ++++--- 4 files changed, 43 insertions(+), 39 deletions(-) diff --git a/commons/res/values/strings.xml b/commons/res/values/strings.xml index 5b26c9151..b9201bcca 100644 --- a/commons/res/values/strings.xml +++ b/commons/res/values/strings.xml @@ -38,6 +38,7 @@ My Contributions Queued + Failed Uploading From Gallery Take Photo diff --git a/commons/src/main/java/org/wikimedia/commons/UploadService.java b/commons/src/main/java/org/wikimedia/commons/UploadService.java index 4be4d2fa3..cfa25ac34 100644 --- a/commons/src/main/java/org/wikimedia/commons/UploadService.java +++ b/commons/src/main/java/org/wikimedia/commons/UploadService.java @@ -247,19 +247,7 @@ public class UploadService extends IntentService { result = api.upload(contribution.getFilename(), file, contribution.getDataLength(), contribution.getPageContents(), contribution.getEditSummary(), notificationUpdater); } catch(IOException e) { Log.d("Commons", "I have a network fuckup"); - stopForeground(true); - Notification failureNotification = new NotificationCompat.Builder(this).setAutoCancel(true) - .setSmallIcon(R.drawable.ic_launcher) - .setAutoCancel(true) - .setContentIntent(PendingIntent.getService(getApplicationContext(), 0, intent, 0)) - .setTicker(String.format(getString(R.string.upload_failed_notification_title), contribution.getFilename())) - .setContentTitle(String.format(getString(R.string.upload_failed_notification_title), contribution.getFilename())) - .setContentText(getString(R.string.upload_failed_notification_subtitle)) - .getNotification(); - notificationManager.notify(NOTIFICATION_UPLOAD_FAILED, failureNotification); - - contribution.setState(Contribution.STATE_QUEUED); - contribution.save(); + showFailedNotification(contribution); return; } finally { toUpload--; @@ -271,28 +259,35 @@ public class UploadService extends IntentService { SimpleDateFormat isoFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"); // Assuming MW always gives me UTC - - String descUrl = result.getString("/api/upload/imageinfo/@descriptionurl"); - Date dateUploaded = null; - try { - dateUploaded = isoFormat.parse(result.getString("/api/upload/imageinfo/@timestamp")); - } catch(java.text.ParseException e) { - throw new RuntimeException(e); // Hopefully mediawiki doesn't give me bogus stuff? + String resultStatus = result.getString("/api/upload/@result"); + if(!resultStatus.equals("success")) { + showFailedNotification(contribution); + } else { + Date dateUploaded = null; + try { + dateUploaded = isoFormat.parse(result.getString("/api/upload/imageinfo/@timestamp")); + } catch(java.text.ParseException e) { + throw new RuntimeException(e); // Hopefully mediawiki doesn't give me bogus stuff? + } + contribution.setState(Contribution.STATE_COMPLETED); + contribution.setDateUploaded(dateUploaded); + contribution.save(); } + } - Intent openUploadedPageIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(descUrl)); - Notification doneNotification = new NotificationCompat.Builder(this) - .setAutoCancel(true) + private void showFailedNotification(Contribution contribution) { + stopForeground(true); + Notification failureNotification = new NotificationCompat.Builder(this).setAutoCancel(true) .setSmallIcon(R.drawable.ic_launcher) - .setContentTitle(String.format(getString(R.string.upload_completed_notification_title), contribution.getFilename())) - .setContentText(getString(R.string.upload_completed_notification_text)) - .setTicker(String.format(getString(R.string.upload_completed_notification_title), contribution.getFilename())) - .setContentIntent(PendingIntent.getActivity(this, 0, openUploadedPageIntent, 0)) + .setAutoCancel(true) + .setContentIntent(PendingIntent.getActivity(this, 0, new Intent(this, ContributionsActivity.class), 0)) + .setTicker(String.format(getString(R.string.upload_failed_notification_title), contribution.getFilename())) + .setContentTitle(String.format(getString(R.string.upload_failed_notification_title), contribution.getFilename())) + .setContentText(getString(R.string.upload_failed_notification_subtitle)) .getNotification(); + notificationManager.notify(NOTIFICATION_UPLOAD_FAILED, failureNotification); - notificationManager.notify(notificationTag, NOTIFICATION_DOWNLOAD_COMPLETE, doneNotification); - contribution.setState(Contribution.STATE_COMPLETED); - contribution.setDateUploaded(dateUploaded); + contribution.setState(Contribution.STATE_FAILED); contribution.save(); } } diff --git a/commons/src/main/java/org/wikimedia/commons/contributions/Contribution.java b/commons/src/main/java/org/wikimedia/commons/contributions/Contribution.java index 438ef4ea3..b28bfec21 100644 --- a/commons/src/main/java/org/wikimedia/commons/contributions/Contribution.java +++ b/commons/src/main/java/org/wikimedia/commons/contributions/Contribution.java @@ -14,8 +14,9 @@ public class Contribution extends Media { // No need to be bitwise - they're mutually exclusive public static final int STATE_COMPLETED = -1; - public static final int STATE_QUEUED = 1; - public static final int STATE_IN_PROGRESS = 2; + public static final int STATE_FAILED = 1; + public static final int STATE_QUEUED = 2; + public static final int STATE_IN_PROGRESS = 3; private ContentProviderClient client; private Uri contentUri; diff --git a/commons/src/main/java/org/wikimedia/commons/contributions/ContributionsActivity.java b/commons/src/main/java/org/wikimedia/commons/contributions/ContributionsActivity.java index 201d4bbda..082976820 100644 --- a/commons/src/main/java/org/wikimedia/commons/contributions/ContributionsActivity.java +++ b/commons/src/main/java/org/wikimedia/commons/contributions/ContributionsActivity.java @@ -88,13 +88,20 @@ public class ContributionsActivity extends AuthenticatedActivity implements Load } titleView.setText(cursor.getString(COLUMN_FILENAME)); - if(state == Contribution.STATE_COMPLETED) { - Date uploaded = new Date(cursor.getLong(COLUMN_UPLOADED)); - stateView.setText(SimpleDateFormat.getDateInstance().format(uploaded)); - } else if(state == Contribution.STATE_QUEUED) { - stateView.setText(R.string.contribution_state_queued); - } else if(state == Contribution.STATE_IN_PROGRESS) { - stateView.setText(R.string.contribution_state_in_progress); + switch(state) { + case Contribution.STATE_COMPLETED: + Date uploaded = new Date(cursor.getLong(COLUMN_UPLOADED)); + stateView.setText(SimpleDateFormat.getDateInstance().format(uploaded)); + break; + case Contribution.STATE_QUEUED: + stateView.setText(R.string.contribution_state_queued); + break; + case Contribution.STATE_IN_PROGRESS: + stateView.setText(R.string.contribution_state_in_progress); + break; + case Contribution.STATE_FAILED: + stateView.setText(R.string.contribution_state_failed); + break; } }