From 9a117f09694253d7c31b750a6a64ba32cc374596 Mon Sep 17 00:00:00 2001 From: inorichi Date: Sat, 19 Dec 2015 16:13:24 +0100 Subject: [PATCH] Fix NPE when the process restarts in the reader for downloaded chapters and save page list before killing the process. --- .../mangafeed/ui/reader/ReaderPresenter.java | 41 +++++++++++-------- 1 file changed, 25 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/eu/kanade/mangafeed/ui/reader/ReaderPresenter.java b/app/src/main/java/eu/kanade/mangafeed/ui/reader/ReaderPresenter.java index 9a6514ebc0..a3c86b99e6 100644 --- a/app/src/main/java/eu/kanade/mangafeed/ui/reader/ReaderPresenter.java +++ b/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 { 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 { }, (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 { 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);