diff options
Diffstat (limited to 'src/de/danoeh/antennapod/service/download/Downloader.java')
-rw-r--r-- | src/de/danoeh/antennapod/service/download/Downloader.java | 51 |
1 files changed, 26 insertions, 25 deletions
diff --git a/src/de/danoeh/antennapod/service/download/Downloader.java b/src/de/danoeh/antennapod/service/download/Downloader.java index 9ed9d9a76..84731fe9f 100644 --- a/src/de/danoeh/antennapod/service/download/Downloader.java +++ b/src/de/danoeh/antennapod/service/download/Downloader.java @@ -1,49 +1,50 @@ package de.danoeh.antennapod.service.download; import de.danoeh.antennapod.R; -import de.danoeh.antennapod.asynctask.DownloadStatus; + +import java.util.concurrent.Callable; /** Downloads files */ -public abstract class Downloader extends Thread { +public abstract class Downloader implements Callable<Downloader> { private static final String TAG = "Downloader"; - private DownloaderCallback downloaderCallback; - protected boolean finished; + protected volatile boolean finished; protected volatile boolean cancelled; - protected volatile DownloadStatus status; + protected DownloadRequest request; + protected DownloadStatus result; - public Downloader(DownloaderCallback downloaderCallback, - DownloadStatus status) { + public Downloader(DownloadRequest request) { super(); - this.downloaderCallback = downloaderCallback; - this.status = status; - this.status.setStatusMsg(R.string.download_pending); + this.request = request; + this.request.setStatusMsg(R.string.download_pending); this.cancelled = false; + this.result = new DownloadStatus(request, null, false, false, null); } - /** - * This method must be called when the download was completed, failed, or - * was cancelled - */ - protected void finish() { - if (!finished) { - finished = true; - downloaderCallback.onDownloadCompleted(this); + protected abstract void download(); + + public final Downloader call() { + download(); + if (result == null) { + throw new IllegalStateException( + "Downloader hasn't created DownloadStatus object"); } + finished = true; + return this; } - protected abstract void download(); + public DownloadRequest getDownloadRequest() { + return request; + } - @Override - public final void run() { - download(); - finish(); + public DownloadStatus getResult() { + return result; } - public DownloadStatus getStatus() { - return status; + public boolean isFinished() { + return finished; } public void cancel() { |