From eacc73eebff1acbe19060e7161154dcd1a7fb947 Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Fri, 26 May 2017 18:58:51 +0200 Subject: Setting File_url when starting download This way, downloads get resumed even if the service crashes --- .../core/service/download/DownloadService.java | 46 ++++++++++++++-------- .../antennapod/core/storage/DownloadRequester.java | 6 ++- 2 files changed, 34 insertions(+), 18 deletions(-) (limited to 'core') diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadService.java b/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadService.java index 6eefc296f..a0605c79f 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadService.java +++ b/core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadService.java @@ -424,6 +424,8 @@ public class DownloadService extends Service { "ACTION_ENQUEUE_DOWNLOAD intent needs request extra"); } + writeFileUrl(request); + Downloader downloader = getDownloader(request); if (downloader != null) { numberOfDownloads.incrementAndGet(); @@ -905,6 +907,33 @@ public class DownloadService extends Service { } + private void writeFileUrl(DownloadRequest request) { + File dest = new File(request.getDestination()); + if (!dest.exists()) { + try { + dest.createNewFile(); + } catch (IOException e) { + Log.e(TAG, "Unable to create file"); + } + } + if (dest.exists() && request.getFeedfileType() == FeedMedia.FEEDFILETYPE_FEEDMEDIA) { + Log.d(TAG, "File has been partially downloaded. Writing file url"); + FeedMedia media = DBReader.getFeedMedia(request.getFeedfileId()); + if (media == null) { + Log.d(TAG, "No media"); + return; + } + media.setFile_url(request.getDestination()); + try { + DBWriter.setFeedMedia(media).get(); + } catch (InterruptedException e) { + Log.e(TAG, "FailedDownloadHandler was interrupted"); + } catch (ExecutionException e) { + Log.e(TAG, "ExecutionException in FailedDownloadHandler: " + e.getMessage()); + } + } + } + /** * Handles failed downloads. *

@@ -929,23 +958,6 @@ public class DownloadService extends Service { DBWriter.setFeedLastUpdateFailed(request.getFeedfileId(), true); } else if (request.isDeleteOnFailure()) { Log.d(TAG, "Ignoring failed download, deleteOnFailure=true"); - } else { - File dest = new File(request.getDestination()); - if (dest.exists() && request.getFeedfileType() == FeedMedia.FEEDFILETYPE_FEEDMEDIA) { - Log.d(TAG, "File has been partially downloaded. Writing file url"); - FeedMedia media = DBReader.getFeedMedia(request.getFeedfileId()); - if (media == null) { - return; - } - media.setFile_url(request.getDestination()); - try { - DBWriter.setFeedMedia(media).get(); - } catch (InterruptedException e) { - Log.e(TAG, "FailedDownloadHandler was interrupted"); - } catch (ExecutionException e) { - Log.e(TAG, "ExecutionException in FailedDownloadHandler: " + e.getMessage()); - } - } } } } diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/DownloadRequester.java b/core/src/main/java/de/danoeh/antennapod/core/storage/DownloadRequester.java index 7051d7f4d..71880e609 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/storage/DownloadRequester.java +++ b/core/src/main/java/de/danoeh/antennapod/core/storage/DownloadRequester.java @@ -11,8 +11,10 @@ import android.webkit.URLUtil; import org.apache.commons.io.FilenameUtils; import java.io.File; +import java.io.IOException; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ExecutionException; import de.danoeh.antennapod.core.BuildConfig; import de.danoeh.antennapod.core.feed.Feed; @@ -89,7 +91,9 @@ public class DownloadRequester { private void download(Context context, FeedFile item, FeedFile container, File dest, boolean overwriteIfExists, String username, String password, String lastModified, boolean deleteOnFailure, Bundle arguments) { - final boolean partiallyDownloadedFileExists = item.getFile_url() != null; + final boolean partiallyDownloadedFileExists = item.getFile_url() != null && new File(item.getFile_url()).exists(); + + Log.d(TAG, "partiallyDownloadedFileExists: " + partiallyDownloadedFileExists); if (isDownloadingFile(item)) { Log.e(TAG, "URL " + item.getDownload_url() + " is already being downloaded"); -- cgit v1.2.3