Yuvipanda has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/125985

Change subject: Fix crash when loading unreachable image
......................................................................

Fix crash when loading unreachable image

Also fixes crashes that happen when using Saved Pages with
images that are not in the WebView cache

Bug: 63890
Change-Id: Ia1b0f534b0c07c0fd584db31c4354d67ed703576
---
M wikipedia/assets/bundle-test.js
M wikipedia/assets/bundle.js
M wikipedia/src/main/java/org/wikipedia/Utils.java
M wikipedia/src/main/java/org/wikipedia/savedpages/SavePageTask.java
M www/js/main.js
M www/js/transforms.js
6 files changed, 36 insertions(+), 7 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/apps/android/wikipedia 
refs/changes/85/125985/1

diff --git a/wikipedia/assets/bundle-test.js b/wikipedia/assets/bundle-test.js
index 18114f7..d459a6a 100644
--- a/wikipedia/assets/bundle-test.js
+++ b/wikipedia/assets/bundle-test.js
@@ -50,7 +50,7 @@
     licenseText.innerHTML = payload.licenseHTML;
 });
 
-bridge.registerListener( "requestImagesList", function () {
+bridge.registerListener( "requestImagesList", function() {
     var imageURLs = [];
     var images = document.querySelectorAll( "img" );
     for ( var i = 0; i < images.length; i++ ) {
@@ -59,6 +59,12 @@
     bridge.sendMessage( "imagesListResponse", { "images": imageURLs });
 } );
 
+bridge.registerListener( "replaceImageSrc", function( payload ) {
+    var img = document.querySelector( "img[src='" + payload.originalURL + "']" 
);
+    img.setAttribute( "src", payload.newURL );
+    img.setAttribute( "data-old-src", payload.originalURL );
+} );
+
 bridge.registerListener( "hideEditButtons", function() {
     document.getElementsByTagName( "html" )[0].classList.add( "no-editing" );
 } );
diff --git a/wikipedia/assets/bundle.js b/wikipedia/assets/bundle.js
index 40a1a11..47a6185 100644
--- a/wikipedia/assets/bundle.js
+++ b/wikipedia/assets/bundle.js
@@ -98,13 +98,19 @@
     licenseText.innerHTML = payload.licenseHTML;
 });
 
-bridge.registerListener( "requestImagesList", function () {
+bridge.registerListener( "requestImagesList", function() {
     var imageURLs = [];
     var images = document.querySelectorAll( "img" );
     for ( var i = 0; i < images.length; i++ ) {
         imageURLs.push( images[i].src );
     }
     bridge.sendMessage( "imagesListResponse", { "images": imageURLs });
+} );
+
+bridge.registerListener( "replaceImageSrc", function( payload ) {
+    var img = document.querySelector( "img[src='" + payload.originalURL + "']" 
);
+    img.setAttribute( "src", payload.newURL );
+    img.setAttribute( "data-old-src", payload.originalURL );
 } );
 
 bridge.registerListener( "hideEditButtons", function() {
@@ -287,6 +293,8 @@
             var resp = bridge.sendMessage( "imageUrlToFilePath", { "imageUrl": 
img.src } );
             console.log( "new filepath is " + resp.filePath );
             img.src = "file://" + resp.filePath;
+        } else {
+            // If it *is* a file URL and also failed to load, just do nothing
         }
     }
     for ( var i = 0; i < images.length; i++ ) {
diff --git a/wikipedia/src/main/java/org/wikipedia/Utils.java 
b/wikipedia/src/main/java/org/wikipedia/Utils.java
index bec0eca..ea7ed45 100644
--- a/wikipedia/src/main/java/org/wikipedia/Utils.java
+++ b/wikipedia/src/main/java/org/wikipedia/Utils.java
@@ -137,7 +137,7 @@
     /**
      * Add some utility methods to a communuication bridge, that can be called 
synchronously from JS
      */
-    public static void addUtilityMethodsToBridge(final Context context, 
CommunicationBridge bridge) {
+    public static void addUtilityMethodsToBridge(final Context context, final 
CommunicationBridge bridge) {
         bridge.addListener("imageUrlToFilePath", new 
CommunicationBridge.JSEventListener() {
             @Override
             public void onMessage(String messageType, JSONObject 
messagePayload) {
@@ -145,9 +145,9 @@
                 JSONObject ret = new JSONObject();
                 try {
                     File imageFile = new File(context.getFilesDir(), 
imageUrlToFileName(imageUrl));
-                    ret.put("filePath", imageFile.getAbsolutePath());
-                    // FIXME: THIS IS BROKEN NOW!!!1
-                    throw new RuntimeException("FIX THIS YUVI!");
+                    ret.put("originalURL", imageUrl);
+                    ret.put("newURL", imageFile.getAbsolutePath());
+                    bridge.sendMessage("replaceImageSrc", ret);
                 } catch (JSONException e) {
                     // stupid, stupid, stupid
                     throw new RuntimeException(e);
diff --git a/wikipedia/src/main/java/org/wikipedia/savedpages/SavePageTask.java 
b/wikipedia/src/main/java/org/wikipedia/savedpages/SavePageTask.java
index 1531961..dba56bc 100644
--- a/wikipedia/src/main/java/org/wikipedia/savedpages/SavePageTask.java
+++ b/wikipedia/src/main/java/org/wikipedia/savedpages/SavePageTask.java
@@ -62,6 +62,13 @@
                                 imagesDownloadedLatch.countDown();
                                 Log.d("Wikipedia", "Downloaded image " + 
imageUrl);
                             }
+
+                            @Override
+                            public void onCatch(Throwable caught) {
+                                // Do nothing for now. An image failed to 
download, but that is usually OK
+                                // FIXME: Make this more robust
+                                imagesDownloadedLatch.countDown();
+                            }
                         }.execute();
                     } else {
                         imagesDownloadedLatch.countDown();
diff --git a/www/js/main.js b/www/js/main.js
index a8f5464..9bce75a 100644
--- a/www/js/main.js
+++ b/www/js/main.js
@@ -11,7 +11,7 @@
     licenseText.innerHTML = payload.licenseHTML;
 });
 
-bridge.registerListener( "requestImagesList", function () {
+bridge.registerListener( "requestImagesList", function() {
     var imageURLs = [];
     var images = document.querySelectorAll( "img" );
     for ( var i = 0; i < images.length; i++ ) {
@@ -20,6 +20,12 @@
     bridge.sendMessage( "imagesListResponse", { "images": imageURLs });
 } );
 
+bridge.registerListener( "replaceImageSrc", function( payload ) {
+    var img = document.querySelector( "img[src='" + payload.originalURL + "']" 
);
+    img.setAttribute( "src", payload.newURL );
+    img.setAttribute( "data-old-src", payload.originalURL );
+} );
+
 bridge.registerListener( "hideEditButtons", function() {
     document.getElementsByTagName( "html" )[0].classList.add( "no-editing" );
 } );
diff --git a/www/js/transforms.js b/www/js/transforms.js
index 89d4817..a3ceb33 100644
--- a/www/js/transforms.js
+++ b/www/js/transforms.js
@@ -27,6 +27,8 @@
             var resp = bridge.sendMessage( "imageUrlToFilePath", { "imageUrl": 
img.src } );
             console.log( "new filepath is " + resp.filePath );
             img.src = "file://" + resp.filePath;
+        } else {
+            // If it *is* a file URL and also failed to load, just do nothing
         }
     }
     for ( var i = 0; i < images.length; i++ ) {

-- 
To view, visit https://gerrit.wikimedia.org/r/125985
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ia1b0f534b0c07c0fd584db31c4354d67ed703576
Gerrit-PatchSet: 1
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Yuvipanda <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to