mChannel.position(mOffset);
long size = mFile.length();
if (size == 0) size = -1;
- while (mChannel.position() < mOffset + mChunkSize && mChannel.position() < mChannel.size()) {
+ long maxCount = Math.min(mOffset + mChunkSize, mChannel.size());
+ while (mChannel.position() < maxCount) {
readCount = mChannel.read(mBuffer);
out.write(mBuffer.array(), 0, readCount);
mBuffer.clear();
- mTransferred += readCount;
+ if (mTransferred < maxCount) { // condition to avoid accumulate progress for repeated chunks
+ Log_OC.d(TAG, "aƱadiendo a mTransfered " + mTransferred + " readCount " + readCount + " hasta " + (mTransferred + readCount));
+ mTransferred += readCount;
+ }
synchronized (mDataTransferListeners) {
it = mDataTransferListeners.iterator();
while (it.hasNext()) {
try {
method.setFollowRedirects(mFollowRedirects);
} catch (Exception e) {
- Log_OC.d(TAG, "setFollowRedirects failed for " + method.getName() + " method, custom redirection will be used");
- customRedirectionNeeded = true;
+ if (mFollowRedirects) Log_OC.d(TAG, "setFollowRedirects failed for " + method.getName() + " method, custom redirection will be used");
+ customRedirectionNeeded = mFollowRedirects;
}
if (mSsoSessionCookie != null && mSsoSessionCookie.length() > 0) {
method.setRequestHeader("Cookie", mSsoSessionCookie);
}
int status = super.executeMethod(method);
int redirectionsCount = 0;
- while (mFollowRedirects &&
+ while (customRedirectionNeeded &&
redirectionsCount < MAX_REDIRECTIONS_COUNT &&
- customRedirectionNeeded &&
( status == HttpStatus.SC_MOVED_PERMANENTLY ||
status == HttpStatus.SC_MOVED_TEMPORARILY ||
status == HttpStatus.SC_TEMPORARY_REDIRECT)
) {
+
Header location = method.getResponseHeader("Location");
if (location != null) {
Log_OC.d(TAG, "Location to redirect: " + location.getValue());