Setting File_url when starting download

This way, downloads get resumed even if the service crashes
This commit is contained in:
ByteHamster 2017-05-26 18:58:51 +02:00
parent c21f81d034
commit eacc73eebf
2 changed files with 34 additions and 18 deletions

View File

@ -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.
* <p/>
@ -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());
}
}
}
}
}

View File

@ -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");