Allow manual retries of images (needs improvement)
This commit is contained in:
@@ -15,6 +15,7 @@ import eu.kanade.mangafeed.data.download.DownloadManager;
|
||||
import eu.kanade.mangafeed.data.preference.PreferencesHelper;
|
||||
import eu.kanade.mangafeed.data.source.base.Source;
|
||||
import eu.kanade.mangafeed.data.source.model.Page;
|
||||
import eu.kanade.mangafeed.event.RetryPageEvent;
|
||||
import eu.kanade.mangafeed.event.SourceMangaChapterEvent;
|
||||
import eu.kanade.mangafeed.ui.base.presenter.BasePresenter;
|
||||
import eu.kanade.mangafeed.util.EventBusHook;
|
||||
@@ -23,6 +24,7 @@ import rx.Observable;
|
||||
import rx.Subscription;
|
||||
import rx.android.schedulers.AndroidSchedulers;
|
||||
import rx.schedulers.Schedulers;
|
||||
import rx.subjects.PublishSubject;
|
||||
import timber.log.Timber;
|
||||
|
||||
public class ReaderPresenter extends BasePresenter<ReaderActivity> {
|
||||
@@ -40,21 +42,29 @@ public class ReaderPresenter extends BasePresenter<ReaderActivity> {
|
||||
private boolean isDownloaded;
|
||||
@State int currentPage;
|
||||
|
||||
private PublishSubject<Page> retryPageSubject;
|
||||
|
||||
private Subscription nextChapterSubscription;
|
||||
private Subscription previousChapterSubscription;
|
||||
|
||||
private static final int GET_PAGE_LIST = 1;
|
||||
private static final int GET_PAGE_IMAGES = 2;
|
||||
private static final int RETRY_IMAGES = 3;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedState) {
|
||||
super.onCreate(savedState);
|
||||
|
||||
retryPageSubject = PublishSubject.create();
|
||||
|
||||
restartableLatestCache(GET_PAGE_LIST,
|
||||
() -> getPageListObservable()
|
||||
.doOnNext(pages -> pageList = pages)
|
||||
.doOnCompleted(this::getAdjacentChapters)
|
||||
.doOnCompleted(() -> start(GET_PAGE_IMAGES)),
|
||||
.doOnCompleted(() -> {
|
||||
getAdjacentChapters();
|
||||
start(GET_PAGE_IMAGES);
|
||||
start(RETRY_IMAGES);
|
||||
}),
|
||||
(view, pages) -> {
|
||||
view.onPageListReady(pages);
|
||||
if (currentPage != 0)
|
||||
@@ -67,6 +77,10 @@ public class ReaderPresenter extends BasePresenter<ReaderActivity> {
|
||||
(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"));
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -95,6 +109,14 @@ public class ReaderPresenter extends BasePresenter<ReaderActivity> {
|
||||
loadChapter(event.getChapter());
|
||||
}
|
||||
|
||||
@EventBusHook
|
||||
public void onEventMainThread(RetryPageEvent event) {
|
||||
EventBus.getDefault().removeStickyEvent(event);
|
||||
Page page = event.getPage();
|
||||
page.setStatus(Page.QUEUE);
|
||||
retryPageSubject.onNext(page);
|
||||
}
|
||||
|
||||
private void loadChapter(Chapter chapter) {
|
||||
this.chapter = chapter;
|
||||
isDownloaded = isChapterDownloaded(chapter);
|
||||
@@ -129,9 +151,9 @@ public class ReaderPresenter extends BasePresenter<ReaderActivity> {
|
||||
Observable<Page> pages;
|
||||
|
||||
if (!isDownloaded) {
|
||||
pages = Observable
|
||||
.merge(Observable.from(pageList).filter(page -> page.getImageUrl() != null),
|
||||
source.getRemainingImageUrlsFromPageList(pageList))
|
||||
pages = Observable.from(pageList)
|
||||
.filter(page -> page.getImageUrl() != null)
|
||||
.mergeWith(source.getRemainingImageUrlsFromPageList(pageList))
|
||||
.flatMap(source::getCachedImage);
|
||||
} else {
|
||||
File chapterDir = downloadManager.getAbsoluteChapterDirectory(source, manga, chapter);
|
||||
@@ -144,8 +166,15 @@ public class ReaderPresenter extends BasePresenter<ReaderActivity> {
|
||||
.observeOn(AndroidSchedulers.mainThread());
|
||||
}
|
||||
|
||||
public void retryPage(Page page) {
|
||||
|
||||
private Observable<Page> getRetryPageObservable() {
|
||||
return retryPageSubject
|
||||
.flatMap(page -> {
|
||||
if (page.getImageUrl() == null)
|
||||
return source.getImageUrlFromPage(page);
|
||||
return Observable.just(page);
|
||||
})
|
||||
.flatMap(source::getCachedImage)
|
||||
.subscribeOn(Schedulers.io());
|
||||
}
|
||||
|
||||
public void setCurrentPage(int currentPage) {
|
||||
|
||||
@@ -33,10 +33,6 @@ public abstract class BaseReader {
|
||||
return getCurrentPageIndex(currentPosition);
|
||||
}
|
||||
|
||||
public void retryPage(Page page) {
|
||||
activity.getPresenter().retryPage(page);
|
||||
}
|
||||
|
||||
public void requestNextChapter() {
|
||||
activity.getPresenter().setCurrentPage(getCurrentPosition());
|
||||
activity.getPresenter().loadNextChapter();
|
||||
|
||||
+21
@@ -5,6 +5,7 @@ import android.support.annotation.Nullable;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.Button;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.ProgressBar;
|
||||
import android.widget.TextView;
|
||||
@@ -17,8 +18,11 @@ import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
import butterknife.Bind;
|
||||
import butterknife.ButterKnife;
|
||||
import butterknife.OnClick;
|
||||
import de.greenrobot.event.EventBus;
|
||||
import eu.kanade.mangafeed.R;
|
||||
import eu.kanade.mangafeed.data.source.model.Page;
|
||||
import eu.kanade.mangafeed.event.RetryPageEvent;
|
||||
import eu.kanade.mangafeed.ui.base.fragment.BaseFragment;
|
||||
import eu.kanade.mangafeed.ui.reader.ReaderActivity;
|
||||
import rx.Observable;
|
||||
@@ -34,6 +38,7 @@ public class ViewPagerReaderFragment extends BaseFragment {
|
||||
@Bind(R.id.progress) ProgressBar progressBar;
|
||||
@Bind(R.id.progress_text) TextView progressText;
|
||||
@Bind(R.id.image_error) TextView errorText;
|
||||
@Bind(R.id.retry_button) Button retryButton;
|
||||
|
||||
private Page page;
|
||||
private Subscription progressSubscription;
|
||||
@@ -81,6 +86,11 @@ public class ViewPagerReaderFragment extends BaseFragment {
|
||||
this.page = page;
|
||||
}
|
||||
|
||||
@OnClick(R.id.retry_button)
|
||||
void retry() {
|
||||
EventBus.getDefault().postSticky(new RetryPageEvent(page));
|
||||
}
|
||||
|
||||
private void showImage() {
|
||||
if (page == null || page.getImagePath() == null)
|
||||
return;
|
||||
@@ -90,10 +100,12 @@ public class ViewPagerReaderFragment extends BaseFragment {
|
||||
}
|
||||
|
||||
private void showDownloading() {
|
||||
progressContainer.setVisibility(View.VISIBLE);
|
||||
progressText.setVisibility(View.VISIBLE);
|
||||
}
|
||||
|
||||
private void showLoading() {
|
||||
progressContainer.setVisibility(View.VISIBLE);
|
||||
progressText.setVisibility(View.VISIBLE);
|
||||
progressText.setText(R.string.downloading);
|
||||
}
|
||||
@@ -101,10 +113,19 @@ public class ViewPagerReaderFragment extends BaseFragment {
|
||||
private void showError() {
|
||||
progressContainer.setVisibility(View.GONE);
|
||||
errorText.setVisibility(View.VISIBLE);
|
||||
retryButton.setVisibility(View.VISIBLE);
|
||||
}
|
||||
|
||||
private void hideError() {
|
||||
errorText.setVisibility(View.GONE);
|
||||
retryButton.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
private void processStatus(int status) {
|
||||
switch (status) {
|
||||
case Page.QUEUE:
|
||||
hideError();
|
||||
break;
|
||||
case Page.LOAD_PAGE:
|
||||
showLoading();
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user