From c8c692e2b70dbb70d7ca4bd96d04558c607243b6 Mon Sep 17 00:00:00 2001 From: Lukasz Kozakiewicz Date: Thu, 31 Aug 2017 10:28:24 +0100 Subject: [PATCH] Android: fix web input stream reporting always total length of -1. --- .../juce_core/native/java/JuceAppActivity.java | 15 ++++++++++++--- modules/juce_core/network/juce_URL.cpp | 3 +++ 2 files changed, 15 insertions(+), 3 deletions(-) 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();