mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-11-04 08:08:55 +01:00 
			
		
		
		
	Add an observable that notifies of every download progress
This commit is contained in:
		@@ -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))
 | 
			
		||||
 
 | 
			
		||||
@@ -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);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -86,7 +86,6 @@ public class MangaInfoFragment extends BaseRxFragment<MangaInfoPresenter> {
 | 
			
		||||
            } else {
 | 
			
		||||
                coverCache.loadFromNetwork(cover, manga.thumbnail_url, headers);
 | 
			
		||||
            }
 | 
			
		||||
            cover.setTag(manga.thumbnail_url);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user