fixed http resume

This commit is contained in:
Daniel Gultsch 2016-12-06 23:27:29 +01:00
parent b879fb3753
commit 1739af2a41
1 changed files with 11 additions and 4 deletions

View File

@ -273,16 +273,18 @@ public class HttpDownloadConnection implements Transferable {
} }
connection.setRequestProperty("User-Agent",mXmppConnectionService.getIqGenerator().getIdentityName()); connection.setRequestProperty("User-Agent",mXmppConnectionService.getIqGenerator().getIdentityName());
final boolean tryResume = file.exists() && file.getKey() == null; final boolean tryResume = file.exists() && file.getKey() == null;
long resumeSize = 0;
if (tryResume) { if (tryResume) {
Log.d(Config.LOGTAG,"http download trying resume"); Log.d(Config.LOGTAG,"http download trying resume");
long size = file.getSize(); resumeSize = file.getSize();
connection.setRequestProperty("Range", "bytes="+size+"-"); connection.setRequestProperty("Range", "bytes="+resumeSize+"-");
} }
connection.setConnectTimeout(Config.SOCKET_TIMEOUT * 1000); connection.setConnectTimeout(Config.SOCKET_TIMEOUT * 1000);
connection.setReadTimeout(Config.SOCKET_TIMEOUT * 1000); connection.setReadTimeout(Config.SOCKET_TIMEOUT * 1000);
connection.connect(); connection.connect();
is = new BufferedInputStream(connection.getInputStream()); is = new BufferedInputStream(connection.getInputStream());
boolean serverResumed = "bytes".equals(connection.getHeaderField("Accept-Ranges")); final String contentRange = connection.getHeaderField("Content-Range");
boolean serverResumed = tryResume && contentRange != null && contentRange.startsWith("bytes "+resumeSize+"-");
long transmitted = 0; long transmitted = 0;
long expected = file.getExpectedSize(); long expected = file.getExpectedSize();
if (tryResume && serverResumed) { if (tryResume && serverResumed) {
@ -290,9 +292,14 @@ public class HttpDownloadConnection implements Transferable {
transmitted = file.getSize(); transmitted = file.getSize();
updateProgress((int) ((((double) transmitted) / expected) * 100)); updateProgress((int) ((((double) transmitted) / expected) * 100));
os = AbstractConnectionManager.createAppendedOutputStream(file); os = AbstractConnectionManager.createAppendedOutputStream(file);
if (os == null) {
throw new FileWriterException();
}
} else { } else {
file.getParentFile().mkdirs(); file.getParentFile().mkdirs();
file.createNewFile(); if (!file.exists() && !file.createNewFile()) {
throw new FileWriterException();
}
os = AbstractConnectionManager.createOutputStream(file, true); os = AbstractConnectionManager.createOutputStream(file, true);
} }
int count; int count;