Procházet zdrojové kódy

Merge pull request #396 from sonudoo/download-interruption-android-bugfix

Bug fix for download interruption promise rejection
Travis Nuttall před 4 roky
rodič
revize
4305ef8175
No account linked to committer's email address

+ 13
- 3
android/src/main/java/com/RNFetchBlob/RNFetchBlobReq.java Zobrazit soubor

530
                 }
530
                 }
531
                 break;
531
                 break;
532
             case FileStorage:
532
             case FileStorage:
533
+                ResponseBody responseBody = resp.body();
534
+
533
                 try {
535
                 try {
534
                     // In order to write response data to `destPath` we have to invoke this method.
536
                     // In order to write response data to `destPath` we have to invoke this method.
535
                     // It uses customized response body which is able to report download progress
537
                     // It uses customized response body which is able to report download progress
536
                     // and write response data to destination path.
538
                     // and write response data to destination path.
537
-                    resp.body().bytes();
539
+                    responseBody.bytes();
538
                 } catch (Exception ignored) {
540
                 } catch (Exception ignored) {
539
 //                    ignored.printStackTrace();
541
 //                    ignored.printStackTrace();
540
                 }
542
                 }
541
-                this.destPath = this.destPath.replace("?append=true", "");
542
-                callback.invoke(null, RNFetchBlobConst.RNFB_RESPONSE_PATH, this.destPath);
543
+
544
+                RNFetchBlobFileResp rnFetchBlobFileResp = (RNFetchBlobFileResp) responseBody;
545
+
546
+                if(rnFetchBlobFileResp != null && rnFetchBlobFileResp.isDownloadComplete() == false){
547
+                    callback.invoke("RNFetchBlob failed. Download interrupted.", null);
548
+                }
549
+                else {
550
+                    this.destPath = this.destPath.replace("?append=true", "");
551
+                    callback.invoke(null, RNFetchBlobConst.RNFB_RESPONSE_PATH, this.destPath);
552
+                }
543
                 break;
553
                 break;
544
             default:
554
             default:
545
                 try {
555
                 try {

+ 4
- 0
android/src/main/java/com/RNFetchBlob/Response/RNFetchBlobFileResp.java Zobrazit soubor

68
         return originalBody.contentLength();
68
         return originalBody.contentLength();
69
     }
69
     }
70
 
70
 
71
+    public boolean isDownloadComplete() {
72
+        return bytesDownloaded == contentLength();
73
+    }
74
+
71
     @Override
75
     @Override
72
     public BufferedSource source() {
76
     public BufferedSource source() {
73
         ProgressReportingSource countable = new ProgressReportingSource();
77
         ProgressReportingSource countable = new ProgressReportingSource();