Browse Source

Add an observable that notifies of every download progress

inorichi 9 years ago
parent
commit
03ddf6d376

+ 1 - 1
app/src/main/java/eu/kanade/mangafeed/data/download/DownloadManager.java

@@ -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))

+ 30 - 0
app/src/main/java/eu/kanade/mangafeed/data/download/model/DownloadQueue.java

@@ -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);
+            }
+        }
+    }
+
 }

+ 0 - 1
app/src/main/java/eu/kanade/mangafeed/ui/manga/info/MangaInfoFragment.java

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