Loading src/com/owncloud/android/lib/common/network/ChunkFromFileChannelRequestEntity.java +6 −2 Original line number Diff line number Diff line Loading @@ -119,6 +119,10 @@ public class ChunkFromFileChannelRequestEntity implements RequestEntity, Progres } public void setmTransferred(long value) { mTransferred = value; } public void writeRequest(final OutputStream out) throws IOException { int readCount = 0; Iterator<OnDatatransferProgressListener> it = null; Loading src/com/owncloud/android/lib/resources/files/ChunkedUploadRemoteFileOperation.java +41 −12 Original line number Diff line number Diff line Loading @@ -24,13 +24,16 @@ package com.owncloud.android.lib.resources.files; import android.content.Context; import android.content.SharedPreferences; import java.io.ByteArrayInputStream; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.RandomAccessFile; import java.nio.channels.FileChannel; import java.util.Random; import java.util.LinkedHashSet; import java.util.Set; import org.apache.commons.httpclient.methods.PutMethod; Loading @@ -48,15 +51,13 @@ public class ChunkedUploadRemoteFileOperation extends UploadRemoteFileOperation private static final String OC_CHUNKED_HEADER = "OC-Chunked"; private static final String OC_CHUNK_SIZE_HEADER = "OC-Chunk-Size"; private static final String TAG = ChunkedUploadRemoteFileOperation.class.getSimpleName(); public ChunkedUploadRemoteFileOperation(String storagePath, String remotePath, String mimeType){ super(storagePath, remotePath, mimeType); } private Context mContext; public ChunkedUploadRemoteFileOperation( String storagePath, String remotePath, String mimeType, String requiredEtag String storagePath, String remotePath, String mimeType, String requiredEtag, Context context ){ super(storagePath, remotePath, mimeType, requiredEtag); mContext = context; } @Override Loading @@ -65,8 +66,13 @@ public class ChunkedUploadRemoteFileOperation extends UploadRemoteFileOperation FileChannel channel = null; RandomAccessFile raf = null; try { File file = new File(mLocalPath); SharedPreferences sharedPref = mContext.getApplicationContext().getSharedPreferences("com.nextcloud.PREFERENCE_upload", Context.MODE_PRIVATE); String chunkId = String.valueOf(Math.abs(file.getName().hashCode())).substring(0,8); Set<String> successfulChunks = sharedPref.getStringSet(chunkId, new LinkedHashSet<String>()); try { raf = new RandomAccessFile(file, "r"); channel = raf.getChannel(); mEntity = new ChunkFromFileChannelRequestEntity(channel, mMimeType, CHUNK_SIZE, file); Loading @@ -77,12 +83,18 @@ public class ChunkedUploadRemoteFileOperation extends UploadRemoteFileOperation long offset = 0; String uriPrefix = client.getWebdavUri() + WebdavUtils.encodePath(mRemotePath) + "-chunking-" + Math.abs((new Random()).nextInt(9000)+1000) + "-" ; "-chunking-" + chunkId + "-" ; long totalLength = file.length(); long chunkCount = (long) Math.ceil((double)totalLength / CHUNK_SIZE); String chunkSizeStr = String.valueOf(CHUNK_SIZE); String totalLengthStr = String.valueOf(file.length()); for (int chunkIndex = 0; chunkIndex < chunkCount ; chunkIndex++, offset += CHUNK_SIZE) { if (successfulChunks.contains(String.valueOf(chunkIndex))){ ((ChunkFromFileChannelRequestEntity) mEntity).setmTransferred(offset); // ((ChunkFromFileChannelRequestEntity) mEntity).setOffset(offset); continue; } if (chunkIndex == chunkCount - 1) { chunkSizeStr = String.valueOf(CHUNK_SIZE * chunkCount - totalLength); } Loading Loading @@ -124,11 +136,28 @@ public class ChunkedUploadRemoteFileOperation extends UploadRemoteFileOperation ", chunk index " + chunkIndex + ", count " + chunkCount + ", HTTP result status " + status); if (!isSuccess(status)) if (isSuccess(status)){ successfulChunks.add(String.valueOf(chunkIndex)); } else { SharedPreferences.Editor editor = sharedPref.edit(); editor.putStringSet(chunkId, successfulChunks); editor.commit(); break; } } if (isSuccess(status)){ SharedPreferences.Editor editor = sharedPref.edit(); editor.remove(chunkId); editor.commit(); } } finally { SharedPreferences.Editor editor = sharedPref.edit(); editor.putStringSet(chunkId, successfulChunks); editor.commit(); if (channel != null) channel.close(); if (raf != null) Loading Loading
src/com/owncloud/android/lib/common/network/ChunkFromFileChannelRequestEntity.java +6 −2 Original line number Diff line number Diff line Loading @@ -119,6 +119,10 @@ public class ChunkFromFileChannelRequestEntity implements RequestEntity, Progres } public void setmTransferred(long value) { mTransferred = value; } public void writeRequest(final OutputStream out) throws IOException { int readCount = 0; Iterator<OnDatatransferProgressListener> it = null; Loading
src/com/owncloud/android/lib/resources/files/ChunkedUploadRemoteFileOperation.java +41 −12 Original line number Diff line number Diff line Loading @@ -24,13 +24,16 @@ package com.owncloud.android.lib.resources.files; import android.content.Context; import android.content.SharedPreferences; import java.io.ByteArrayInputStream; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.RandomAccessFile; import java.nio.channels.FileChannel; import java.util.Random; import java.util.LinkedHashSet; import java.util.Set; import org.apache.commons.httpclient.methods.PutMethod; Loading @@ -48,15 +51,13 @@ public class ChunkedUploadRemoteFileOperation extends UploadRemoteFileOperation private static final String OC_CHUNKED_HEADER = "OC-Chunked"; private static final String OC_CHUNK_SIZE_HEADER = "OC-Chunk-Size"; private static final String TAG = ChunkedUploadRemoteFileOperation.class.getSimpleName(); public ChunkedUploadRemoteFileOperation(String storagePath, String remotePath, String mimeType){ super(storagePath, remotePath, mimeType); } private Context mContext; public ChunkedUploadRemoteFileOperation( String storagePath, String remotePath, String mimeType, String requiredEtag String storagePath, String remotePath, String mimeType, String requiredEtag, Context context ){ super(storagePath, remotePath, mimeType, requiredEtag); mContext = context; } @Override Loading @@ -65,8 +66,13 @@ public class ChunkedUploadRemoteFileOperation extends UploadRemoteFileOperation FileChannel channel = null; RandomAccessFile raf = null; try { File file = new File(mLocalPath); SharedPreferences sharedPref = mContext.getApplicationContext().getSharedPreferences("com.nextcloud.PREFERENCE_upload", Context.MODE_PRIVATE); String chunkId = String.valueOf(Math.abs(file.getName().hashCode())).substring(0,8); Set<String> successfulChunks = sharedPref.getStringSet(chunkId, new LinkedHashSet<String>()); try { raf = new RandomAccessFile(file, "r"); channel = raf.getChannel(); mEntity = new ChunkFromFileChannelRequestEntity(channel, mMimeType, CHUNK_SIZE, file); Loading @@ -77,12 +83,18 @@ public class ChunkedUploadRemoteFileOperation extends UploadRemoteFileOperation long offset = 0; String uriPrefix = client.getWebdavUri() + WebdavUtils.encodePath(mRemotePath) + "-chunking-" + Math.abs((new Random()).nextInt(9000)+1000) + "-" ; "-chunking-" + chunkId + "-" ; long totalLength = file.length(); long chunkCount = (long) Math.ceil((double)totalLength / CHUNK_SIZE); String chunkSizeStr = String.valueOf(CHUNK_SIZE); String totalLengthStr = String.valueOf(file.length()); for (int chunkIndex = 0; chunkIndex < chunkCount ; chunkIndex++, offset += CHUNK_SIZE) { if (successfulChunks.contains(String.valueOf(chunkIndex))){ ((ChunkFromFileChannelRequestEntity) mEntity).setmTransferred(offset); // ((ChunkFromFileChannelRequestEntity) mEntity).setOffset(offset); continue; } if (chunkIndex == chunkCount - 1) { chunkSizeStr = String.valueOf(CHUNK_SIZE * chunkCount - totalLength); } Loading Loading @@ -124,11 +136,28 @@ public class ChunkedUploadRemoteFileOperation extends UploadRemoteFileOperation ", chunk index " + chunkIndex + ", count " + chunkCount + ", HTTP result status " + status); if (!isSuccess(status)) if (isSuccess(status)){ successfulChunks.add(String.valueOf(chunkIndex)); } else { SharedPreferences.Editor editor = sharedPref.edit(); editor.putStringSet(chunkId, successfulChunks); editor.commit(); break; } } if (isSuccess(status)){ SharedPreferences.Editor editor = sharedPref.edit(); editor.remove(chunkId); editor.commit(); } } finally { SharedPreferences.Editor editor = sharedPref.edit(); editor.putStringSet(chunkId, successfulChunks); editor.commit(); if (channel != null) channel.close(); if (raf != null) Loading