diff --git a/app/src/main/java/eu/kanade/mangafeed/data/models/Page.java b/app/src/main/java/eu/kanade/mangafeed/data/models/Page.java index 2ac2b4f480..076bc33ca0 100644 --- a/app/src/main/java/eu/kanade/mangafeed/data/models/Page.java +++ b/app/src/main/java/eu/kanade/mangafeed/data/models/Page.java @@ -6,6 +6,11 @@ public class Page { private String url; private String imageUrl; private String imagePath; + private int status; + + public static final int DOWNLOAD = 0; + public static final int READY = 1; + public static final int ERROR = 2; public Page(int pageNumber, String url, String imageUrl, String imagePath) { this.pageNumber = pageNumber; @@ -42,6 +47,14 @@ public class Page { this.imagePath = imagePath; } + public int getStatus() { + return status; + } + + public void setStatus(int status) { + this.status = status; + } + @Override public String toString() { return "Page{" + diff --git a/app/src/main/java/eu/kanade/mangafeed/presenter/ReaderPresenter.java b/app/src/main/java/eu/kanade/mangafeed/presenter/ReaderPresenter.java index 1b916e86e6..74037f8a37 100644 --- a/app/src/main/java/eu/kanade/mangafeed/presenter/ReaderPresenter.java +++ b/app/src/main/java/eu/kanade/mangafeed/presenter/ReaderPresenter.java @@ -52,7 +52,7 @@ public class ReaderPresenter extends BasePresenter { restartableReplay(GET_PAGE_IMAGES, this::getPageImagesObservable, (view, page) -> { - view.onImageReady(page); + view.onNextPage(page); if (page.getPageNumber() == savedSelectedPage) { view.setCurrentPage(savedSelectedPage); } @@ -100,9 +100,10 @@ public class ReaderPresenter extends BasePresenter { private Observable getPageImagesObservable() { return Observable.merge( - Observable.from(pageList).filter(page -> page.getImageUrl() != null), - source.getRemainingImageUrlsFromPageList(pageList) - .doOnNext(this::replacePageUrl)) + Observable.from(pageList).filter(page -> page.getImageUrl() != null), + source.getRemainingImageUrlsFromPageList(pageList) + .doOnNext(this::replacePageUrl) + ) .flatMap(this::downloadImage) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()); @@ -115,9 +116,9 @@ public class ReaderPresenter extends BasePresenter { try { File cacheFile = future.get(); page.setImagePath(cacheFile.getCanonicalPath()); - + page.setStatus(Page.READY); } catch (Exception e) { - e.printStackTrace(); + page.setStatus(Page.ERROR); } return Observable.just(page); diff --git a/app/src/main/java/eu/kanade/mangafeed/sources/base/Source.java b/app/src/main/java/eu/kanade/mangafeed/sources/base/Source.java index 0ddc3b8848..0c43b47f8e 100644 --- a/app/src/main/java/eu/kanade/mangafeed/sources/base/Source.java +++ b/app/src/main/java/eu/kanade/mangafeed/sources/base/Source.java @@ -80,9 +80,10 @@ public abstract class Source extends BaseSource { public Observable getRemainingImageUrlsFromPageList(final List pages) { return Observable.from(pages) .filter(page -> page.getImageUrl() == null) + .doOnNext(page -> page.setStatus(Page.DOWNLOAD)) .window(overrideNumberOfConcurrentPageDownloads()) .concatMap(batchedPages -> - batchedPages.concatMap(this::getImageUrlFromPage) + batchedPages.concatMap(this::getImageUrlFromPage) ); } @@ -90,6 +91,10 @@ public abstract class Source extends BaseSource { return mNetworkService .getStringResponse(overrideRemainingPagesUrl(page.getUrl()), mRequestHeaders, null) .flatMap(unparsedHtml -> Observable.just(parseHtmlToImageUrl(unparsedHtml))) + .onErrorResumeNext(e -> { + page.setStatus(Page.ERROR); + return Observable.just(null); + }) .flatMap(imageUrl -> { page.setImageUrl(imageUrl); return Observable.just(page); diff --git a/app/src/main/java/eu/kanade/mangafeed/ui/activity/ReaderActivity.java b/app/src/main/java/eu/kanade/mangafeed/ui/activity/ReaderActivity.java index fa3681a7ba..704b354dec 100644 --- a/app/src/main/java/eu/kanade/mangafeed/ui/activity/ReaderActivity.java +++ b/app/src/main/java/eu/kanade/mangafeed/ui/activity/ReaderActivity.java @@ -71,8 +71,8 @@ public class ReaderActivity extends BaseRxActivity { viewer.onPageListReady(pages); } - public void onImageReady(Page page) { - viewer.onImageReady(page); + public void onNextPage(Page page) { + viewer.onNextPage(page); } public void onPageChanged(int currentPage, int totalPages) { @@ -101,8 +101,7 @@ public class ReaderActivity extends BaseRxActivity { } private BaseViewer getViewer() { - int prefsViewer = prefs.getDefaultViewer(); - switch (prefsViewer) { + switch (prefs.getDefaultViewer()) { case LEFT_TO_RIGHT: return new LeftToRightViewer(this, container); case RIGHT_TO_LEFT: diff --git a/app/src/main/java/eu/kanade/mangafeed/ui/adapter/ReaderPageAdapter.java b/app/src/main/java/eu/kanade/mangafeed/ui/adapter/ReaderPageAdapter.java index 522a0f1bc8..2deb8f5fe3 100644 --- a/app/src/main/java/eu/kanade/mangafeed/ui/adapter/ReaderPageAdapter.java +++ b/app/src/main/java/eu/kanade/mangafeed/ui/adapter/ReaderPageAdapter.java @@ -43,7 +43,7 @@ public class ReaderPageAdapter extends SmartFragmentStatePagerAdapter { ReaderPageFragment fragment = (ReaderPageFragment)getRegisteredFragment(position); if (fragment != null) { - fragment.setPage(page); + fragment.replacePage(page); } } diff --git a/app/src/main/java/eu/kanade/mangafeed/ui/fragment/ReaderPageFragment.java b/app/src/main/java/eu/kanade/mangafeed/ui/fragment/ReaderPageFragment.java index 1ff2e12484..9354175b42 100644 --- a/app/src/main/java/eu/kanade/mangafeed/ui/fragment/ReaderPageFragment.java +++ b/app/src/main/java/eu/kanade/mangafeed/ui/fragment/ReaderPageFragment.java @@ -7,6 +7,7 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ProgressBar; +import android.widget.TextView; import com.davemorrissey.labs.subscaleview.ImageSource; import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView; @@ -18,19 +19,17 @@ import eu.kanade.mangafeed.data.models.Page; import eu.kanade.mangafeed.ui.activity.ReaderActivity; public class ReaderPageFragment extends Fragment { - public static final String URL_ARGUMENT_KEY = "UrlArgumentKey"; @Bind(R.id.page_image_view) SubsamplingScaleImageView imageView; @Bind(R.id.progress) ProgressBar progressBar; + @Bind(R.id.image_error) TextView errorText; - private String imagePath; + private Page page; public static ReaderPageFragment newInstance(Page page) { - ReaderPageFragment newInstance = new ReaderPageFragment(); - Bundle arguments = new Bundle(); - arguments.putString(URL_ARGUMENT_KEY, page.getImagePath()); - newInstance.setArguments(arguments); - return newInstance; + ReaderPageFragment fragment = new ReaderPageFragment(); + fragment.setPage(page); + return fragment; } @Override @@ -38,26 +37,32 @@ public class ReaderPageFragment extends Fragment { super.onCreate(savedInstanceState); setRetainInstance(true); + } - Bundle arguments = getArguments(); - if (arguments != null) { - if (arguments.containsKey(URL_ARGUMENT_KEY)) { - imagePath = arguments.getString(URL_ARGUMENT_KEY); - } - } + public void replacePage(Page page) { + this.page = page; + loadImage(); } public void setPage(Page page) { - if (!page.getImageUrl().equals(imagePath)) { - imagePath = page.getImagePath(); - loadImage(); - } + this.page = page; } private void loadImage() { - if (imagePath != null) { - progressBar.setVisibility(View.GONE); - imageView.setImage(ImageSource.uri(imagePath).tilingDisabled()); + if (page == null) + return; + + switch (page.getStatus()) { + case (Page.READY): + imageView.setImage(ImageSource.uri(page.getImagePath()).tilingDisabled()); + progressBar.setVisibility(View.GONE); + break; + case (Page.DOWNLOAD): + progressBar.setVisibility(View.VISIBLE); + break; + case (Page.ERROR): + progressBar.setVisibility(View.GONE); + errorText.setVisibility(View.VISIBLE); } } @@ -73,8 +78,6 @@ public class ReaderPageFragment extends Fragment { imageView.setOnTouchListener((v, motionEvent) -> ((ReaderActivity) getActivity()).onImageTouch(motionEvent)); - progressBar.setVisibility(View.VISIBLE); - loadImage(); return view; diff --git a/app/src/main/java/eu/kanade/mangafeed/ui/viewer/VerticalViewer.java b/app/src/main/java/eu/kanade/mangafeed/ui/viewer/VerticalViewer.java index 4c5b652d1e..cda338966b 100644 --- a/app/src/main/java/eu/kanade/mangafeed/ui/viewer/VerticalViewer.java +++ b/app/src/main/java/eu/kanade/mangafeed/ui/viewer/VerticalViewer.java @@ -59,7 +59,7 @@ public class VerticalViewer extends BaseViewer { } @Override - public void onImageReady(Page page) { + public void onNextPage(Page page) { adapter.replacePage(getPosFromPage(page), page); } diff --git a/app/src/main/java/eu/kanade/mangafeed/ui/viewer/WebtoonViewer.java b/app/src/main/java/eu/kanade/mangafeed/ui/viewer/WebtoonViewer.java index 97159b1106..574061134a 100644 --- a/app/src/main/java/eu/kanade/mangafeed/ui/viewer/WebtoonViewer.java +++ b/app/src/main/java/eu/kanade/mangafeed/ui/viewer/WebtoonViewer.java @@ -34,7 +34,7 @@ public class WebtoonViewer extends BaseViewer { } @Override - public void onImageReady(Page page) { + public void onNextPage(Page page) { adapter.setPage(getPosFromPage(page), page); } diff --git a/app/src/main/java/eu/kanade/mangafeed/ui/viewer/base/BaseViewer.java b/app/src/main/java/eu/kanade/mangafeed/ui/viewer/base/BaseViewer.java index e8d8992867..d3b89a710a 100644 --- a/app/src/main/java/eu/kanade/mangafeed/ui/viewer/base/BaseViewer.java +++ b/app/src/main/java/eu/kanade/mangafeed/ui/viewer/base/BaseViewer.java @@ -33,6 +33,6 @@ public abstract class BaseViewer { public abstract int getTotalPages(); public abstract void onPageListReady(List pages); - public abstract void onImageReady(Page page); + public abstract void onNextPage(Page page); public abstract boolean onImageTouch(MotionEvent motionEvent); } diff --git a/app/src/main/java/eu/kanade/mangafeed/ui/viewer/base/ViewPagerViewer.java b/app/src/main/java/eu/kanade/mangafeed/ui/viewer/base/ViewPagerViewer.java index 34245bbda6..21cac584bf 100644 --- a/app/src/main/java/eu/kanade/mangafeed/ui/viewer/base/ViewPagerViewer.java +++ b/app/src/main/java/eu/kanade/mangafeed/ui/viewer/base/ViewPagerViewer.java @@ -72,7 +72,7 @@ public abstract class ViewPagerViewer extends BaseViewer { } @Override - public void onImageReady(Page page) { + public void onNextPage(Page page) { adapter.replacePage(getPosFromPage(page), page); } diff --git a/app/src/main/res/layout/fragment_page.xml b/app/src/main/res/layout/fragment_page.xml index 5f48d4f042..14945aebdc 100644 --- a/app/src/main/res/layout/fragment_page.xml +++ b/app/src/main/res/layout/fragment_page.xml @@ -13,6 +13,15 @@ android:layout_gravity="center_vertical|center_horizontal" android:visibility="gone" /> - + + + \ No newline at end of file