summaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
authorMartin Fietz <Martin.Fietz@gmail.com>2018-01-04 20:05:59 +0100
committerGitHub <noreply@github.com>2018-01-04 20:05:59 +0100
commit204c97b8de40ae5388171bc549bc6392c7c3d8fb (patch)
tree749565b6b65f22269e92b3fd4e1ca8d3322ae025 /core
parentdc970d52d847ac0023d2c45ab88535d6cadb0ceb (diff)
parent70f9a9f3986a9a353d6b779f53ab1b33250b3e76 (diff)
downloadAntennaPod-204c97b8de40ae5388171bc549bc6392c7c3d8fb.zip
Merge pull request #2339 from ByteHamster/save-file-url
Setting File_url when starting download
Diffstat (limited to 'core')
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/download/DownloadService.java55
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/storage/DownloadRequester.java6
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");