Merge pull request #681 from mfietz/feature/downloader-if-modified-since
Downloader use If-Modified-Since HTTP header
This commit is contained in:
commit
21dabab909
|
@ -138,7 +138,7 @@ public class DefaultOnlineFeedViewActivity extends OnlineFeedViewActivity {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
try {
|
try {
|
||||||
Feed f = new Feed(selectedDownloadUrl, new Date(), feed.getTitle());
|
Feed f = new Feed(selectedDownloadUrl, new Date(0), feed.getTitle());
|
||||||
f.setPreferences(feed.getPreferences());
|
f.setPreferences(feed.getPreferences());
|
||||||
DefaultOnlineFeedViewActivity.this.feed = f;
|
DefaultOnlineFeedViewActivity.this.feed = f;
|
||||||
|
|
||||||
|
|
|
@ -13,9 +13,21 @@ import android.widget.ArrayAdapter;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
import android.widget.ProgressBar;
|
import android.widget.ProgressBar;
|
||||||
import android.widget.RelativeLayout;
|
import android.widget.RelativeLayout;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.xml.sax.SAXException;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import javax.xml.parsers.ParserConfigurationException;
|
||||||
|
|
||||||
import de.danoeh.antennapod.BuildConfig;
|
import de.danoeh.antennapod.BuildConfig;
|
||||||
import de.danoeh.antennapod.R;
|
import de.danoeh.antennapod.R;
|
||||||
import de.danoeh.antennapod.dialog.AuthenticationDialog;
|
|
||||||
import de.danoeh.antennapod.core.feed.Feed;
|
import de.danoeh.antennapod.core.feed.Feed;
|
||||||
import de.danoeh.antennapod.core.feed.FeedPreferences;
|
import de.danoeh.antennapod.core.feed.FeedPreferences;
|
||||||
import de.danoeh.antennapod.core.preferences.UserPreferences;
|
import de.danoeh.antennapod.core.preferences.UserPreferences;
|
||||||
|
@ -31,16 +43,7 @@ import de.danoeh.antennapod.core.util.FileNameGenerator;
|
||||||
import de.danoeh.antennapod.core.util.StorageUtils;
|
import de.danoeh.antennapod.core.util.StorageUtils;
|
||||||
import de.danoeh.antennapod.core.util.URLChecker;
|
import de.danoeh.antennapod.core.util.URLChecker;
|
||||||
import de.danoeh.antennapod.core.util.syndication.FeedDiscoverer;
|
import de.danoeh.antennapod.core.util.syndication.FeedDiscoverer;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import de.danoeh.antennapod.dialog.AuthenticationDialog;
|
||||||
import org.xml.sax.SAXException;
|
|
||||||
|
|
||||||
import javax.xml.parsers.ParserConfigurationException;
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Date;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Downloads a feed from a feed URL and parses it. Subclasses can display the
|
* Downloads a feed from a feed URL and parses it. Subclasses can display the
|
||||||
|
@ -181,7 +184,7 @@ public abstract class OnlineFeedViewActivity extends ActionBarActivity {
|
||||||
if (BuildConfig.DEBUG)
|
if (BuildConfig.DEBUG)
|
||||||
Log.d(TAG, "Starting feed download");
|
Log.d(TAG, "Starting feed download");
|
||||||
url = URLChecker.prepareURL(url);
|
url = URLChecker.prepareURL(url);
|
||||||
feed = new Feed(url, new Date());
|
feed = new Feed(url, new Date(0));
|
||||||
if (username != null && password != null) {
|
if (username != null && password != null) {
|
||||||
feed.setPreferences(new FeedPreferences(0, false, username, password));
|
feed.setPreferences(new FeedPreferences(0, false, username, password));
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,16 +4,17 @@ import android.annotation.SuppressLint;
|
||||||
import android.app.ProgressDialog;
|
import android.app.ProgressDialog;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.os.AsyncTask;
|
import android.os.AsyncTask;
|
||||||
import de.danoeh.antennapod.core.R;
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
import de.danoeh.antennapod.activity.OpmlImportHolder;
|
import de.danoeh.antennapod.activity.OpmlImportHolder;
|
||||||
|
import de.danoeh.antennapod.core.R;
|
||||||
import de.danoeh.antennapod.core.feed.Feed;
|
import de.danoeh.antennapod.core.feed.Feed;
|
||||||
import de.danoeh.antennapod.core.opml.OpmlElement;
|
import de.danoeh.antennapod.core.opml.OpmlElement;
|
||||||
import de.danoeh.antennapod.core.storage.DownloadRequestException;
|
import de.danoeh.antennapod.core.storage.DownloadRequestException;
|
||||||
import de.danoeh.antennapod.core.storage.DownloadRequester;
|
import de.danoeh.antennapod.core.storage.DownloadRequester;
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Date;
|
|
||||||
|
|
||||||
/** Queues items for download in the background. */
|
/** Queues items for download in the background. */
|
||||||
public class OpmlFeedQueuer extends AsyncTask<Void, Void, Void> {
|
public class OpmlFeedQueuer extends AsyncTask<Void, Void, Void> {
|
||||||
private Context context;
|
private Context context;
|
||||||
|
@ -46,7 +47,7 @@ public class OpmlFeedQueuer extends AsyncTask<Void, Void, Void> {
|
||||||
for (int idx = 0; idx < selection.length; idx++) {
|
for (int idx = 0; idx < selection.length; idx++) {
|
||||||
OpmlElement element = OpmlImportHolder.getReadElements().get(
|
OpmlElement element = OpmlImportHolder.getReadElements().get(
|
||||||
selection[idx]);
|
selection[idx]);
|
||||||
Feed feed = new Feed(element.getXmlUrl(), new Date(),
|
Feed feed = new Feed(element.getXmlUrl(), new Date(0),
|
||||||
element.getText());
|
element.getText());
|
||||||
try {
|
try {
|
||||||
requester.downloadFeed(context.getApplicationContext(), feed);
|
requester.downloadFeed(context.getApplicationContext(), feed);
|
||||||
|
|
|
@ -5,15 +5,17 @@ import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
import de.danoeh.antennapod.BuildConfig;
|
import de.danoeh.antennapod.BuildConfig;
|
||||||
import de.danoeh.antennapod.R;
|
import de.danoeh.antennapod.R;
|
||||||
import de.danoeh.antennapod.core.feed.Feed;
|
import de.danoeh.antennapod.core.feed.Feed;
|
||||||
import de.danoeh.antennapod.core.storage.DownloadRequestException;
|
import de.danoeh.antennapod.core.storage.DownloadRequestException;
|
||||||
import de.danoeh.antennapod.core.storage.DownloadRequester;
|
import de.danoeh.antennapod.core.storage.DownloadRequester;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Date;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Receives intents from AntennaPod Single Purpose apps
|
* Receives intents from AntennaPod Single Purpose apps
|
||||||
|
@ -34,7 +36,7 @@ public class SPAReceiver extends BroadcastReceiver{
|
||||||
if (feedUrls != null) {
|
if (feedUrls != null) {
|
||||||
if (BuildConfig.DEBUG) Log.d(TAG, "Received feeds list: " + Arrays.toString(feedUrls));
|
if (BuildConfig.DEBUG) Log.d(TAG, "Received feeds list: " + Arrays.toString(feedUrls));
|
||||||
for (String url : feedUrls) {
|
for (String url : feedUrls) {
|
||||||
Feed f = new Feed(url, new Date());
|
Feed f = new Feed(url, new Date(0));
|
||||||
try {
|
try {
|
||||||
DownloadRequester.getInstance().downloadFeed(context, f);
|
DownloadRequester.getInstance().downloadFeed(context, f);
|
||||||
} catch (DownloadRequestException e) {
|
} catch (DownloadRequestException e) {
|
||||||
|
|
|
@ -6,6 +6,9 @@ import android.os.Parcelable;
|
||||||
|
|
||||||
import org.apache.commons.lang3.Validate;
|
import org.apache.commons.lang3.Validate;
|
||||||
|
|
||||||
|
import de.danoeh.antennapod.core.feed.FeedFile;
|
||||||
|
import de.danoeh.antennapod.core.util.URLChecker;
|
||||||
|
|
||||||
public class DownloadRequest implements Parcelable {
|
public class DownloadRequest implements Parcelable {
|
||||||
|
|
||||||
private final String destination;
|
private final String destination;
|
||||||
|
@ -13,6 +16,7 @@ public class DownloadRequest implements Parcelable {
|
||||||
private final String title;
|
private final String title;
|
||||||
private String username;
|
private String username;
|
||||||
private String password;
|
private String password;
|
||||||
|
private long ifModifiedSince;
|
||||||
private boolean deleteOnFailure;
|
private boolean deleteOnFailure;
|
||||||
private final long feedfileId;
|
private final long feedfileId;
|
||||||
private final int feedfileType;
|
private final int feedfileType;
|
||||||
|
@ -45,12 +49,26 @@ public class DownloadRequest implements Parcelable {
|
||||||
this(destination, source, title, feedfileId, feedfileType, null, null, true, null);
|
this(destination, source, title, feedfileId, feedfileType, null, null, true, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public DownloadRequest(Builder builder) {
|
||||||
|
this.destination = builder.destination;
|
||||||
|
this.source = builder.source;
|
||||||
|
this.title = builder.title;
|
||||||
|
this.feedfileId = builder.feedfileId;
|
||||||
|
this.feedfileType = builder.feedfileType;
|
||||||
|
this.username = builder.username;
|
||||||
|
this.password = builder.password;
|
||||||
|
this.ifModifiedSince = builder.ifModifiedSince;
|
||||||
|
this.deleteOnFailure = builder.deleteOnFailure;
|
||||||
|
this.arguments = (builder.arguments != null) ? builder.arguments : new Bundle();
|
||||||
|
}
|
||||||
|
|
||||||
private DownloadRequest(Parcel in) {
|
private DownloadRequest(Parcel in) {
|
||||||
destination = in.readString();
|
destination = in.readString();
|
||||||
source = in.readString();
|
source = in.readString();
|
||||||
title = in.readString();
|
title = in.readString();
|
||||||
feedfileId = in.readLong();
|
feedfileId = in.readLong();
|
||||||
feedfileType = in.readInt();
|
feedfileType = in.readInt();
|
||||||
|
ifModifiedSince = in.readLong();
|
||||||
deleteOnFailure = (in.readByte() > 0);
|
deleteOnFailure = (in.readByte() > 0);
|
||||||
arguments = in.readBundle();
|
arguments = in.readBundle();
|
||||||
if (in.dataAvail() > 0) {
|
if (in.dataAvail() > 0) {
|
||||||
|
@ -77,6 +95,7 @@ public class DownloadRequest implements Parcelable {
|
||||||
dest.writeString(title);
|
dest.writeString(title);
|
||||||
dest.writeLong(feedfileId);
|
dest.writeLong(feedfileId);
|
||||||
dest.writeInt(feedfileType);
|
dest.writeInt(feedfileType);
|
||||||
|
dest.writeLong(ifModifiedSince);
|
||||||
dest.writeByte((deleteOnFailure) ? (byte) 1 : 0);
|
dest.writeByte((deleteOnFailure) ? (byte) 1 : 0);
|
||||||
dest.writeBundle(arguments);
|
dest.writeBundle(arguments);
|
||||||
if (username != null) {
|
if (username != null) {
|
||||||
|
@ -105,6 +124,7 @@ public class DownloadRequest implements Parcelable {
|
||||||
|
|
||||||
DownloadRequest that = (DownloadRequest) o;
|
DownloadRequest that = (DownloadRequest) o;
|
||||||
|
|
||||||
|
if (ifModifiedSince != that.ifModifiedSince) return false;
|
||||||
if (deleteOnFailure != that.deleteOnFailure) return false;
|
if (deleteOnFailure != that.deleteOnFailure) return false;
|
||||||
if (feedfileId != that.feedfileId) return false;
|
if (feedfileId != that.feedfileId) return false;
|
||||||
if (feedfileType != that.feedfileType) return false;
|
if (feedfileType != that.feedfileType) return false;
|
||||||
|
@ -131,6 +151,7 @@ public class DownloadRequest implements Parcelable {
|
||||||
result = 31 * result + (title != null ? title.hashCode() : 0);
|
result = 31 * result + (title != null ? title.hashCode() : 0);
|
||||||
result = 31 * result + (username != null ? username.hashCode() : 0);
|
result = 31 * result + (username != null ? username.hashCode() : 0);
|
||||||
result = 31 * result + (password != null ? password.hashCode() : 0);
|
result = 31 * result + (password != null ? password.hashCode() : 0);
|
||||||
|
result = 31 * result + (int)ifModifiedSince;
|
||||||
result = 31 * result + (deleteOnFailure ? 1 : 0);
|
result = 31 * result + (deleteOnFailure ? 1 : 0);
|
||||||
result = 31 * result + (int) (feedfileId ^ (feedfileId >>> 32));
|
result = 31 * result + (int) (feedfileId ^ (feedfileId >>> 32));
|
||||||
result = 31 * result + feedfileType;
|
result = 31 * result + feedfileType;
|
||||||
|
@ -210,6 +231,15 @@ public class DownloadRequest implements Parcelable {
|
||||||
this.password = password;
|
this.password = password;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public DownloadRequest setIfModifiedSince(long time) {
|
||||||
|
this.ifModifiedSince = time;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getIfModifiedSince() {
|
||||||
|
return this.ifModifiedSince;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isDeleteOnFailure() {
|
public boolean isDeleteOnFailure() {
|
||||||
return deleteOnFailure;
|
return deleteOnFailure;
|
||||||
}
|
}
|
||||||
|
@ -217,4 +247,54 @@ public class DownloadRequest implements Parcelable {
|
||||||
public Bundle getArguments() {
|
public Bundle getArguments() {
|
||||||
return arguments;
|
return arguments;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class Builder {
|
||||||
|
private String destination;
|
||||||
|
private String source;
|
||||||
|
private String title;
|
||||||
|
private String username;
|
||||||
|
private String password;
|
||||||
|
private long ifModifiedSince;
|
||||||
|
private boolean deleteOnFailure = false;
|
||||||
|
private long feedfileId;
|
||||||
|
private int feedfileType;
|
||||||
|
private Bundle arguments;
|
||||||
|
|
||||||
|
public Builder(String destination, FeedFile item) {
|
||||||
|
this.destination = destination;
|
||||||
|
this.source = URLChecker.prepareURL(item.getDownload_url());
|
||||||
|
this.title = item.getHumanReadableIdentifier();
|
||||||
|
this.feedfileId = item.getId();
|
||||||
|
this.feedfileType = item.getTypeAsInt();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Builder deleteOnFailure(boolean deleteOnFailure) {
|
||||||
|
this.deleteOnFailure = deleteOnFailure;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Builder ifModifiedSince(long time) {
|
||||||
|
this.ifModifiedSince = time;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Builder withAuthentication(String username, String password) {
|
||||||
|
this.username = username;
|
||||||
|
this.password = password;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DownloadRequest build() {
|
||||||
|
Validate.notNull(destination);
|
||||||
|
Validate.notNull(source);
|
||||||
|
Validate.notNull(title);
|
||||||
|
return new DownloadRequest(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Builder withArguments(Bundle args) {
|
||||||
|
this.arguments = args;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@ import com.squareup.okhttp.OkHttpClient;
|
||||||
import com.squareup.okhttp.Request;
|
import com.squareup.okhttp.Request;
|
||||||
import com.squareup.okhttp.Response;
|
import com.squareup.okhttp.Response;
|
||||||
import com.squareup.okhttp.ResponseBody;
|
import com.squareup.okhttp.ResponseBody;
|
||||||
|
import com.squareup.okhttp.internal.http.HttpDate;
|
||||||
|
|
||||||
import org.apache.commons.io.IOUtils;
|
import org.apache.commons.io.IOUtils;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
@ -21,6 +22,8 @@ import java.net.HttpURLConnection;
|
||||||
import java.net.SocketTimeoutException;
|
import java.net.SocketTimeoutException;
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
import java.net.UnknownHostException;
|
import java.net.UnknownHostException;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
import de.danoeh.antennapod.core.BuildConfig;
|
import de.danoeh.antennapod.core.BuildConfig;
|
||||||
import de.danoeh.antennapod.core.ClientConfig;
|
import de.danoeh.antennapod.core.ClientConfig;
|
||||||
|
@ -64,6 +67,12 @@ public class HttpDownloader extends Downloader {
|
||||||
final URI uri = URIUtil.getURIFromRequestUrl(request.getSource());
|
final URI uri = URIUtil.getURIFromRequestUrl(request.getSource());
|
||||||
Request.Builder httpReq = new Request.Builder().url(uri.toURL())
|
Request.Builder httpReq = new Request.Builder().url(uri.toURL())
|
||||||
.header("User-Agent", ClientConfig.USER_AGENT);
|
.header("User-Agent", ClientConfig.USER_AGENT);
|
||||||
|
if(request.getIfModifiedSince() > 0) {
|
||||||
|
Date date = new Date(request.getIfModifiedSince());
|
||||||
|
Log.d(TAG, "Header If-Modified-Since: "
|
||||||
|
+ new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z").format(date));
|
||||||
|
httpReq.addHeader("If-Modified-Since", HttpDate.format(date));
|
||||||
|
}
|
||||||
|
|
||||||
// add authentication information
|
// add authentication information
|
||||||
String userInfo = uri.getUserInfo();
|
String userInfo = uri.getUserInfo();
|
||||||
|
@ -83,7 +92,7 @@ public class HttpDownloader extends Downloader {
|
||||||
request.setSoFar(destination.length());
|
request.setSoFar(destination.length());
|
||||||
httpReq.addHeader("Range",
|
httpReq.addHeader("Range",
|
||||||
"bytes=" + request.getSoFar() + "-");
|
"bytes=" + request.getSoFar() + "-");
|
||||||
if (BuildConfig.DEBUG) Log.d(TAG, "Adding range header: " + request.getSoFar());
|
Log.d(TAG, "Adding range header: " + request.getSoFar());
|
||||||
}
|
}
|
||||||
|
|
||||||
Response response = httpClient.newCall(httpReq.build()).execute();
|
Response response = httpClient.newCall(httpReq.build()).execute();
|
||||||
|
@ -96,6 +105,12 @@ public class HttpDownloader extends Downloader {
|
||||||
if (BuildConfig.DEBUG)
|
if (BuildConfig.DEBUG)
|
||||||
Log.d(TAG, "Response code is " + response.code());
|
Log.d(TAG, "Response code is " + response.code());
|
||||||
|
|
||||||
|
if(!response.isSuccessful() && response.code() == HttpURLConnection.HTTP_NOT_MODIFIED) {
|
||||||
|
Log.d(TAG, "Feed not modified since last update, Download canceled");
|
||||||
|
onCancelled();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (!response.isSuccessful() || response.body() == null) {
|
if (!response.isSuccessful() || response.body() == null) {
|
||||||
final DownloadError error;
|
final DownloadError error;
|
||||||
final String details;
|
final String details;
|
||||||
|
|
|
@ -11,6 +11,7 @@ import org.apache.commons.lang3.StringUtils;
|
||||||
import org.apache.commons.lang3.Validate;
|
import org.apache.commons.lang3.Validate;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.util.Date;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
|
||||||
|
@ -91,15 +92,18 @@ public class DownloadRequester {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void download(Context context, FeedFile item, FeedFile container, File dest,
|
private void download(Context context, FeedFile item, FeedFile container, File dest,
|
||||||
boolean overwriteIfExists, String username, String password, boolean deleteOnFailure, Bundle arguments) {
|
boolean overwriteIfExists, String username, String password,
|
||||||
|
long ifModifiedSince, boolean deleteOnFailure, Bundle arguments) {
|
||||||
final boolean partiallyDownloadedFileExists = item.getFile_url() != null;
|
final boolean partiallyDownloadedFileExists = item.getFile_url() != null;
|
||||||
if (!isDownloadingFile(item)) {
|
if (isDownloadingFile(item)) {
|
||||||
|
Log.e(TAG, "URL " + item.getDownload_url()
|
||||||
|
+ " is already being downloaded");
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (!isFilenameAvailable(dest.toString()) || (!partiallyDownloadedFileExists && dest.exists())) {
|
if (!isFilenameAvailable(dest.toString()) || (!partiallyDownloadedFileExists && dest.exists())) {
|
||||||
if (BuildConfig.DEBUG)
|
|
||||||
Log.d(TAG, "Filename already used.");
|
Log.d(TAG, "Filename already used.");
|
||||||
if (isFilenameAvailable(dest.toString()) && overwriteIfExists) {
|
if (isFilenameAvailable(dest.toString()) && overwriteIfExists) {
|
||||||
boolean result = dest.delete();
|
boolean result = dest.delete();
|
||||||
if (BuildConfig.DEBUG)
|
|
||||||
Log.d(TAG, "Deleting file. Result: " + result);
|
Log.d(TAG, "Deleting file. Result: " + result);
|
||||||
} else {
|
} else {
|
||||||
// find different name
|
// find different name
|
||||||
|
@ -111,14 +115,11 @@ public class DownloadRequester {
|
||||||
+ i
|
+ i
|
||||||
+ FilenameUtils.EXTENSION_SEPARATOR
|
+ FilenameUtils.EXTENSION_SEPARATOR
|
||||||
+ FilenameUtils.getExtension(dest.getName());
|
+ FilenameUtils.getExtension(dest.getName());
|
||||||
if (BuildConfig.DEBUG)
|
|
||||||
Log.d(TAG, "Testing filename " + newName);
|
Log.d(TAG, "Testing filename " + newName);
|
||||||
newDest = new File(dest.getParent(), newName);
|
newDest = new File(dest.getParent(), newName);
|
||||||
if (!newDest.exists()
|
if (!newDest.exists()
|
||||||
&& isFilenameAvailable(newDest.toString())) {
|
&& isFilenameAvailable(newDest.toString())) {
|
||||||
if (BuildConfig.DEBUG)
|
Log.d(TAG, "File doesn't exist yet. Using " + newName);
|
||||||
Log.d(TAG, "File doesn't exist yet. Using "
|
|
||||||
+ newName);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -127,21 +128,17 @@ public class DownloadRequester {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (BuildConfig.DEBUG)
|
Log.d(TAG, "Requesting download of url " + item.getDownload_url());
|
||||||
Log.d(TAG,
|
|
||||||
"Requesting download of url " + item.getDownload_url());
|
|
||||||
String baseUrl = (container != null) ? container.getDownload_url() : null;
|
String baseUrl = (container != null) ? container.getDownload_url() : null;
|
||||||
item.setDownload_url(URLChecker.prepareURL(item.getDownload_url(), baseUrl));
|
item.setDownload_url(URLChecker.prepareURL(item.getDownload_url(), baseUrl));
|
||||||
|
|
||||||
DownloadRequest request = new DownloadRequest(dest.toString(),
|
DownloadRequest.Builder builder = new DownloadRequest.Builder(dest.toString(), item)
|
||||||
URLChecker.prepareURL(item.getDownload_url()), item.getHumanReadableIdentifier(),
|
.withAuthentication(username, password)
|
||||||
item.getId(), item.getTypeAsInt(), username, password, deleteOnFailure, arguments);
|
.ifModifiedSince(ifModifiedSince)
|
||||||
|
.deleteOnFailure(deleteOnFailure)
|
||||||
|
.withArguments(arguments);
|
||||||
|
DownloadRequest request = builder.build();
|
||||||
download(context, request);
|
download(context, request);
|
||||||
} else {
|
|
||||||
Log.e(TAG, "URL " + item.getDownload_url()
|
|
||||||
+ " is already being downloaded");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -168,13 +165,15 @@ public class DownloadRequester {
|
||||||
if (feedFileValid(feed)) {
|
if (feedFileValid(feed)) {
|
||||||
String username = (feed.getPreferences() != null) ? feed.getPreferences().getUsername() : null;
|
String username = (feed.getPreferences() != null) ? feed.getPreferences().getUsername() : null;
|
||||||
String password = (feed.getPreferences() != null) ? feed.getPreferences().getPassword() : null;
|
String password = (feed.getPreferences() != null) ? feed.getPreferences().getPassword() : null;
|
||||||
|
Date lastUpdate = feed.getLastUpdate();
|
||||||
|
long ifModifiedSince = lastUpdate.getTime() - 30; // account for some processing time
|
||||||
|
|
||||||
Bundle args = new Bundle();
|
Bundle args = new Bundle();
|
||||||
args.putInt(REQUEST_ARG_PAGE_NR, feed.getPageNr());
|
args.putInt(REQUEST_ARG_PAGE_NR, feed.getPageNr());
|
||||||
args.putBoolean(REQUEST_ARG_LOAD_ALL_PAGES, loadAllPages);
|
args.putBoolean(REQUEST_ARG_LOAD_ALL_PAGES, loadAllPages);
|
||||||
|
|
||||||
download(context, feed, null, new File(getFeedfilePath(context),
|
download(context, feed, null, new File(getFeedfilePath(context),
|
||||||
getFeedfileName(feed)), true, username, password, true, args);
|
getFeedfileName(feed)), true, username, password, ifModifiedSince, true, args);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -187,7 +186,7 @@ public class DownloadRequester {
|
||||||
if (feedFileValid(image)) {
|
if (feedFileValid(image)) {
|
||||||
FeedFile container = (image.getOwner() instanceof FeedFile) ? (FeedFile) image.getOwner() : null;
|
FeedFile container = (image.getOwner() instanceof FeedFile) ? (FeedFile) image.getOwner() : null;
|
||||||
download(context, image, container, new File(getImagefilePath(context),
|
download(context, image, container, new File(getImagefilePath(context),
|
||||||
getImagefileName(image)), false, null, null, false, null);
|
getImagefileName(image)), false, null, null, 0, false, null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -213,7 +212,7 @@ public class DownloadRequester {
|
||||||
getMediafilename(feedmedia));
|
getMediafilename(feedmedia));
|
||||||
}
|
}
|
||||||
download(context, feedmedia, feed,
|
download(context, feedmedia, feed,
|
||||||
dest, false, username, password, false, null);
|
dest, false, username, password, 0, false, null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue