Răsfoiți Sursa

Fix NPE when the process restarts in the reader for downloaded chapters and save page list before killing the process.

inorichi 9 ani în urmă
părinte
comite
9a117f0969

+ 25 - 16
app/src/main/java/eu/kanade/mangafeed/ui/reader/ReaderPresenter.java

@@ -1,6 +1,7 @@
 package eu.kanade.mangafeed.ui.reader;
 
 import android.os.Bundle;
+import android.support.annotation.NonNull;
 
 import java.io.File;
 import java.util.List;
@@ -65,6 +66,22 @@ public class ReaderPresenter extends BasePresenter<ReaderActivity> {
 
         retryPageSubject = PublishSubject.create();
 
+        restartableLatestCache(PRELOAD_NEXT_CHAPTER,
+                this::getPreloadNextChapterObservable,
+                (view, pages) -> {},
+                (view, error) -> Timber.e("An error occurred while preloading a chapter"));
+
+        restartableReplay(GET_PAGE_IMAGES,
+                () -> getPageImagesObservable()
+                        .doOnCompleted(this::preloadNextChapter),
+                (view, page) -> {},
+                (view, error) -> Timber.e("An error occurred while downloading an image"));
+
+        restartableLatestCache(RETRY_IMAGES,
+                this::getRetryPageObservable,
+                (view, page) -> {},
+                (view, error) -> Timber.e("An error occurred while downloading an image"));
+
         restartableLatestCache(GET_PAGE_LIST,
                 () -> getPageListObservable()
                         .doOnNext(pages -> pageList = pages)
@@ -80,22 +97,6 @@ public class ReaderPresenter extends BasePresenter<ReaderActivity> {
                 },
                 (view, error) -> view.onChapterError());
 
-        restartableReplay(GET_PAGE_IMAGES,
-                () -> getPageImagesObservable()
-                        .doOnCompleted(this::preloadNextChapter),
-                (view, page) -> {},
-                (view, error) -> Timber.e("An error occurred while downloading an image"));
-
-        restartableLatestCache(RETRY_IMAGES,
-                this::getRetryPageObservable,
-                (view, page) -> {},
-                (view, error) -> Timber.e("An error occurred while downloading an image"));
-
-        restartableLatestCache(PRELOAD_NEXT_CHAPTER,
-                this::getPreloadNextChapterObservable,
-                (view, pages) -> {},
-                (view, error) -> Timber.e("An error occurred while preloading a chapter"));
-
         registerForStickyEvents();
     }
 
@@ -107,6 +108,14 @@ public class ReaderPresenter extends BasePresenter<ReaderActivity> {
         super.onDestroy();
     }
 
+    @Override
+    protected void onSave(@NonNull Bundle state) {
+        if (pageList != null && !isDownloaded)
+            source.savePageList(chapter.url, pageList);
+
+        super.onSave(state);
+    }
+
     private void onProcessRestart() {
         source = sourceManager.get(sourceId);