From d9f42d500cf959420d2379dceb085dc3848f3e9e Mon Sep 17 00:00:00 2001 From: "David A. Velasco" Date: Mon, 7 Oct 2013 12:01:15 +0200 Subject: [PATCH] Prevent double count of transfer progress when part of an upload is resend --- src/eu/alefzero/webdav/ChunkFromFileChannelRequestEntity.java | 8 ++++++-- src/eu/alefzero/webdav/WebdavClient.java | 8 ++++---- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/eu/alefzero/webdav/ChunkFromFileChannelRequestEntity.java b/src/eu/alefzero/webdav/ChunkFromFileChannelRequestEntity.java index 3f453968..21f82d9f 100644 --- a/src/eu/alefzero/webdav/ChunkFromFileChannelRequestEntity.java +++ b/src/eu/alefzero/webdav/ChunkFromFileChannelRequestEntity.java @@ -120,11 +120,15 @@ public class ChunkFromFileChannelRequestEntity implements RequestEntity, Progres 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()) { diff --git a/src/eu/alefzero/webdav/WebdavClient.java b/src/eu/alefzero/webdav/WebdavClient.java index 2ab5a69c..f25e3906 100644 --- a/src/eu/alefzero/webdav/WebdavClient.java +++ b/src/eu/alefzero/webdav/WebdavClient.java @@ -168,21 +168,21 @@ public class WebdavClient extends HttpClient { 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()); -- 2.11.0