diff options
author | Martin Fietz <Martin.Fietz@gmail.com> | 2018-01-04 20:05:59 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-01-04 20:05:59 +0100 |
commit | 204c97b8de40ae5388171bc549bc6392c7c3d8fb (patch) | |
tree | 749565b6b65f22269e92b3fd4e1ca8d3322ae025 /core/src/main/java | |
parent | dc970d52d847ac0023d2c45ab88535d6cadb0ceb (diff) | |
parent | 70f9a9f3986a9a353d6b779f53ab1b33250b3e76 (diff) | |
download | AntennaPod-204c97b8de40ae5388171bc549bc6392c7c3d8fb.zip |
Merge pull request #2339 from ByteHamster/save-file-url
Setting File_url when starting download
Diffstat (limited to 'core/src/main/java')
-rw-r--r-- | core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadService.java | 55 | ||||
-rw-r--r-- | core/src/main/java/de/danoeh/antennapod/core/storage/DownloadRequester.java | 6 |
2 files changed, 43 insertions, 18 deletions
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 0dc5c9db2..9153fb957 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(); @@ -906,6 +908,42 @@ public class DownloadService extends Service { } /** + * Creates the destination file and writes FeedMedia File_url directly after starting download + * to make it possible to resume download after the service was killed by the system. + */ + private void writeFileUrl(DownloadRequest request) { + if (request.getFeedfileType() != FeedMedia.FEEDFILETYPE_FEEDMEDIA) { + return; + } + + 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()) { + Log.d(TAG, "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, "writeFileUrl was interrupted"); + } catch (ExecutionException e) { + Log.e(TAG, "ExecutionException in writeFileUrl: " + e.getMessage()); + } + } + } + + /** * Handles failed downloads. * <p/> * If the file has been partially downloaded, this handler will set the file_url of the FeedFile to the location @@ -929,23 +967,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"); |