package net.bible.android.control.download; import net.bible.android.control.event.ABEventBus; import net.bible.android.control.event.documentdownload.DocumentDownloadEvent; import org.crosswire.common.progress.JobManager; import org.crosswire.common.progress.Progress; import org.crosswire.common.progress.WorkEvent; import org.crosswire.common.progress.WorkListener; import org.crosswire.jsword.book.Book; import java.util.HashMap; import java.util.Map; /** * Store download view items for dynamic update as downloading occurs. * * @author Martin Denham [mjdenham at gmail dot com] * @see gnu.lgpl.License for license details.<br> * The copyright to this program is held by it's author. */ public class DocumentDownloadProgressCache { private Map<String, Integer> percentDoneByInitials = new HashMap<>(); private WorkListener progressUpdater; private static final String INSTALL_BOOK_JOB_NAME = "INSTALL_BOOK-"; public DocumentDownloadProgressCache() { progressUpdater = new WorkListener() { @Override public void workProgressed(WorkEvent ev) { sendProgressEvent(ev.getJob()); } @Override public void workStateChanged(WorkEvent ev) { sendProgressEvent(ev.getJob()); } }; } public void startMonitoringDownloads() { JobManager.addWorkListener(progressUpdater); } public void stopMonitoringDownloads() { JobManager.removeWorkListener(progressUpdater); } /** * Download has progressed and the ui needs updating if this file item is visible */ public void sendProgressEvent(Progress progress) { final String jobID = progress.getJobID(); if (jobID.startsWith(INSTALL_BOOK_JOB_NAME)) { String initials = jobID.substring(INSTALL_BOOK_JOB_NAME.length()); final int percentDone = progress.getWork(); percentDoneByInitials.put(initials, percentDone); ABEventBus.getDefault().post(new DocumentDownloadEvent(initials, DocumentStatus.DocumentInstallStatus.BEING_INSTALLED, percentDone)); } } public int getPercentDone(Book document) { Integer percentDone = percentDoneByInitials.get(document.getInitials()); return percentDone!=null ? percentDone : 0; } }