Allow manual retries of images (needs improvement)

This commit is contained in:
inorichi
2015-11-16 16:44:33 +01:00
parent e6c230cbe3
commit b002a125fd
8 changed files with 106 additions and 33 deletions

View File

@@ -171,9 +171,9 @@ public class DownloadManager {
.doOnNext(pages -> download.downloadedImages = 0)
.doOnNext(pages -> download.setStatus(Download.DOWNLOADING))
// Get all the URLs to the source images, fetch pages if necessary
.flatMap(pageList -> Observable.merge(
Observable.from(pageList).filter(page -> page.getImageUrl() != null),
download.source.getRemainingImageUrlsFromPageList(pageList)))
.flatMap(pageList -> Observable.from(pageList)
.filter(page -> page.getImageUrl() != null)
.mergeWith(download.source.getRemainingImageUrlsFromPageList(pageList)))
// Start downloading images, consider we can have downloaded images already
.concatMap(page -> getDownloadedImage(page, download.source, download.directory))
.doOnNext(p -> download.downloadedImages++)

View File

@@ -101,7 +101,7 @@ public abstract class Source extends BaseSource {
.concatMap(batchedPages -> batchedPages.concatMap(this::getImageUrlFromPage));
}
private Observable<Page> getImageUrlFromPage(final Page page) {
public Observable<Page> getImageUrlFromPage(final Page page) {
page.setStatus(Page.LOAD_PAGE);
return mNetworkService
.getStringResponse(overrideRemainingPagesUrl(page.getUrl()), mRequestHeaders, null)
@@ -118,26 +118,30 @@ public abstract class Source extends BaseSource {
}
public Observable<Page> getCachedImage(final Page page) {
Observable<Page> obs = Observable.just(page);
Observable<Page> pageObservable = Observable.just(page);
if (page.getImageUrl() == null)
return obs;
return pageObservable;
if (!mCacheManager.isImageInCache(page.getImageUrl())) {
page.setStatus(Page.DOWNLOAD_IMAGE);
obs = cacheImage(page);
}
return obs.flatMap(p -> {
page.setImagePath(mCacheManager.getImagePath(page.getImageUrl()));
page.setStatus(Page.READY);
return Observable.just(page);
}).onErrorResumeNext(e -> {
page.setStatus(Page.ERROR);
return Observable.just(page);
});
return pageObservable
.flatMap(p -> {
if (!mCacheManager.isImageInCache(page.getImageUrl())) {
return cacheImage(page);
}
return Observable.just(page);
})
.flatMap(p -> {
page.setImagePath(mCacheManager.getImagePath(page.getImageUrl()));
page.setStatus(Page.READY);
return Observable.just(page);
})
.onErrorResumeNext(e -> {
page.setStatus(Page.ERROR);
return Observable.just(page);
});
}
private Observable<Page> cacheImage(final Page page) {
page.setStatus(Page.DOWNLOAD_IMAGE);
return getImageProgressResponse(page)
.flatMap(resp -> {
if (!mCacheManager.putImageToDiskCache(page.getImageUrl(), resp)) {