Add an observable that notifies of every download progress

This commit is contained in:
inorichi 2015-12-05 18:22:29 +01:00
parent 758ebfca0b
commit 03ddf6d376
3 changed files with 31 additions and 2 deletions

View file

@ -219,8 +219,8 @@ public class DownloadManager {
.doOnNext(p -> {
page.setImagePath(imagePath.getAbsolutePath());
page.setProgress(100);
page.setStatus(Page.READY);
download.downloadedImages++;
page.setStatus(Page.READY);
})
// If the download fails, mark this page as error
.doOnError(e -> page.setStatus(Page.ERROR))

View file

@ -4,6 +4,7 @@ import java.util.ArrayList;
import java.util.List;
import eu.kanade.mangafeed.data.database.models.Chapter;
import eu.kanade.mangafeed.data.source.model.Page;
import rx.Observable;
import rx.subjects.PublishSubject;
@ -58,4 +59,33 @@ public class DownloadQueue {
return statusSubject;
}
public Observable<Download> getProgressObservable() {
return statusSubject
.startWith(getActiveDownloads())
.flatMap(download -> {
if (download.getStatus() == Download.DOWNLOADING) {
PublishSubject<Integer> pageStatusSubject = PublishSubject.create();
setPagesSubject(download.pages, pageStatusSubject);
return pageStatusSubject
.filter(status -> status == Page.READY)
.flatMap(status -> Observable.just(download));
} else if (download.getStatus() == Download.DOWNLOADED ||
download.getStatus() == Download.ERROR) {
setPagesSubject(download.pages, null);
}
return Observable.just(download);
})
.filter(download -> download.getStatus() == Download.DOWNLOADING);
}
private void setPagesSubject(List<Page> pages, PublishSubject<Integer> subject) {
if (pages != null) {
for (Page page : pages) {
page.setStatusSubject(subject);
}
}
}
}

View file

@ -86,7 +86,6 @@ public class MangaInfoFragment extends BaseRxFragment<MangaInfoPresenter> {
} else {
coverCache.loadFromNetwork(cover, manga.thumbnail_url, headers);
}
cover.setTag(manga.thumbnail_url);
}
}