diff --git a/modules/juce_core/native/java/JuceAppActivity.java b/modules/juce_core/native/java/JuceAppActivity.java index 26b3d2ba08..6e8a898d99 100644 --- a/modules/juce_core/native/java/JuceAppActivity.java +++ b/modules/juce_core/native/java/JuceAppActivity.java @@ -910,6 +910,7 @@ public class JuceAppActivity extends Activity timeOutMs = timeOutMsToUse; statusCode = statusCodeToUse; responseHeaders = responseHeadersToUse; + totalLength = -1; numRedirectsToFollow = numRedirectsToFollowToUse; httpRequestCmd = httpRequestCmdToUse; @@ -1122,9 +1123,16 @@ public class JuceAppActivity extends Activity {} for (java.util.Map.Entry> entry : connection.getHeaderFields().entrySet()) + { if (entry.getKey() != null && entry.getValue() != null) - responseHeaders.append (entry.getKey() + ": " - + android.text.TextUtils.join (",", entry.getValue()) + "\n"); + { + responseHeaders.append(entry.getKey() + ": " + + android.text.TextUtils.join(",", entry.getValue()) + "\n"); + + if (entry.getKey().compareTo ("Content-Length") == 0) + totalLength = Integer.decode (entry.getValue().get (0)); + } + } return true; } @@ -1227,7 +1235,7 @@ public class JuceAppActivity extends Activity } public final long getPosition() { return position; } - public final long getTotalLength() { return -1; } + public final long getTotalLength() { return totalLength; } public final boolean isExhausted() { return false; } public final boolean setPosition (long newPos) { return false; } @@ -1239,6 +1247,7 @@ public class JuceAppActivity extends Activity private HttpURLConnection connection; private int[] statusCode; private StringBuffer responseHeaders; + private int totalLength; private int numRedirectsToFollow; private InputStream inputStream; private long position; diff --git a/modules/juce_core/network/juce_URL.cpp b/modules/juce_core/network/juce_URL.cpp index 60c791a3a9..4264cace89 100644 --- a/modules/juce_core/network/juce_URL.cpp +++ b/modules/juce_core/network/juce_URL.cpp @@ -73,6 +73,9 @@ struct FallbackDownloadTask : public URL::DownloadTask, } downloaded += actual; + + if (downloaded == contentLength) + break; } fileStream->flush();