فهرست منبع

Prevent double count of transfer progress when part of an upload is resend

David A. Velasco 11 سال پیش
والد
کامیت
d9f42d500c
2فایلهای تغییر یافته به همراه10 افزوده شده و 6 حذف شده
  1. 6 2
      src/eu/alefzero/webdav/ChunkFromFileChannelRequestEntity.java
  2. 4 4
      src/eu/alefzero/webdav/WebdavClient.java

+ 6 - 2
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()) {

+ 4 - 4
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());