Loading sample_client/src/com/owncloud/android/lib/sampleclient/MainActivity.java +7 −2 Original line number Diff line number Diff line Loading @@ -157,7 +157,12 @@ public class MainActivity extends Activity implements OnRemoteOperationListener, File fileToUpload = upFolder.listFiles()[0]; String remotePath = FileUtils.PATH_SEPARATOR + fileToUpload.getName(); String mimeType = getString(R.string.sample_file_mimetype); UploadRemoteFileOperation uploadOperation = new UploadRemoteFileOperation(fileToUpload.getAbsolutePath(), remotePath, mimeType); // Get the last modification date of the file from the file system Long timeStampLong = fileToUpload.lastModified()/1000; String timeStamp = timeStampLong.toString(); UploadRemoteFileOperation uploadOperation = new UploadRemoteFileOperation(fileToUpload.getAbsolutePath(), remotePath, mimeType, timeStamp); uploadOperation.addDatatransferProgressListener(this); uploadOperation.execute(mClient, this, mHandler); } Loading src/com/owncloud/android/lib/resources/files/ChunkedUploadRemoteFileOperation.java +12 −2 Original line number Diff line number Diff line Loading @@ -54,15 +54,22 @@ public class ChunkedUploadRemoteFileOperation extends UploadRemoteFileOperation public static final long CHUNK_SIZE = 1024000; private static final String OC_CHUNKED_HEADER = "OC-Chunked"; private static final String OC_CHUNK_SIZE_HEADER = "OC-Chunk-Size"; private static final String OC_CHUNK_X_OC_MTIME_HEADER = "X-OC-Mtime"; private static final String TAG = ChunkedUploadRemoteFileOperation.class.getSimpleName(); private Context mContext; public ChunkedUploadRemoteFileOperation( Context context, String storagePath, String remotePath, String mimeType, String requiredEtag) { super(storagePath, remotePath, mimeType, requiredEtag); Context context, String storagePath, String remotePath, String mimeType, String requiredEtag, String fileLastModifTimestamp) { super(storagePath, remotePath, mimeType, requiredEtag, fileLastModifTimestamp); mContext = context; } public ChunkedUploadRemoteFileOperation( String storagePath, String remotePath, String mimeType, String requiredEtag, String fileLastModifTimestamp ) { super(storagePath, remotePath, mimeType, requiredEtag, fileLastModifTimestamp); } @Override protected int uploadFile(OwnCloudClient client) throws IOException { int status = -1; Loading Loading @@ -112,6 +119,9 @@ public class ChunkedUploadRemoteFileOperation extends UploadRemoteFileOperation mPutMethod.addRequestHeader(OC_CHUNKED_HEADER, OC_CHUNKED_HEADER); mPutMethod.addRequestHeader(OC_CHUNK_SIZE_HEADER, chunkSizeStr); mPutMethod.addRequestHeader(OC_TOTAL_LENGTH_HEADER, totalLengthStr); mPutMethod.addRequestHeader(OC_CHUNK_X_OC_MTIME_HEADER, mFileLastModifTimestamp); ((ChunkFromFileChannelRequestEntity) mEntity).setOffset(offset); mPutMethod.setRequestEntity(mEntity); if (mCancellationRequested.get()) { Loading src/com/owncloud/android/lib/resources/files/UploadRemoteFileOperation.java +122 −116 Original line number Diff line number Diff line Loading @@ -61,11 +61,13 @@ public class UploadRemoteFileOperation extends RemoteOperation { private static final String TAG = UploadRemoteFileOperation.class.getSimpleName(); protected static final String OC_TOTAL_LENGTH_HEADER = "OC-Total-Length"; protected static final String OC_X_OC_MTIME_HEADER = "X-OC-Mtime"; protected static final String IF_MATCH_HEADER = "If-Match"; protected String mLocalPath; protected String mRemotePath; protected String mMimeType; protected String mFileLastModifTimestamp; protected PutMethod mPutMethod = null; protected boolean mForbiddenCharsInServer = false; protected String mRequiredEtag = null; Loading @@ -75,14 +77,15 @@ public class UploadRemoteFileOperation extends RemoteOperation { protected RequestEntity mEntity = null; public UploadRemoteFileOperation(String localPath, String remotePath, String mimeType) { public UploadRemoteFileOperation(String localPath, String remotePath, String mimeType, String fileLastModifTimestamp) { mLocalPath = localPath; mRemotePath = remotePath; mMimeType = mimeType; mFileLastModifTimestamp = fileLastModifTimestamp; } public UploadRemoteFileOperation(String localPath, String remotePath, String mimeType, String requiredEtag) { this(localPath, remotePath, mimeType); public UploadRemoteFileOperation(String localPath, String remotePath, String mimeType, String requiredEtag, String fileLastModifTimestamp) { this(localPath, remotePath, mimeType, fileLastModifTimestamp); mRequiredEtag = requiredEtag; } Loading Loading @@ -152,6 +155,9 @@ public class UploadRemoteFileOperation extends RemoteOperation { mPutMethod.addRequestHeader(IF_MATCH_HEADER, "\"" + mRequiredEtag + "\""); } mPutMethod.addRequestHeader(OC_TOTAL_LENGTH_HEADER, String.valueOf(f.length())); mPutMethod.addRequestHeader(OC_X_OC_MTIME_HEADER, mFileLastModifTimestamp); mPutMethod.setRequestEntity(mEntity); status = client.executeMethod(mPutMethod); Loading test_client/src/com/owncloud/android/lib/test_project/TestActivity.java +24 −25 Original line number Diff line number Diff line Loading @@ -251,34 +251,37 @@ public class TestActivity extends Activity { return TestActivity.uploadFile(this, storagePath, remotePath, mimeType, mClient, requiredEtag); } /** Access to the library method to Upload a File /** * Access to the library method to Upload a File * * @param context * @param storagePath * @param remotePath * @param mimeType * @param client Client instance configured to access the target OC server. * * @param requiredEtag * @return */ public static RemoteOperationResult uploadFile( Context context, String storagePath, String remotePath, String mimeType, OwnCloudClient client, String requiredEtag ) { String fileLastModifTimestamp = getFileLastModifTimeStamp(storagePath); UploadRemoteFileOperation uploadOperation; if ((new File(storagePath)).length() > ChunkedUploadRemoteFileOperation.CHUNK_SIZE) { uploadOperation = new ChunkedUploadRemoteFileOperation( context, storagePath, remotePath, mimeType, requiredEtag context, storagePath, remotePath, mimeType, requiredEtag, fileLastModifTimestamp ); } else { uploadOperation = new UploadRemoteFileOperation( storagePath, remotePath, mimeType storagePath, remotePath, mimeType, requiredEtag, fileLastModifTimestamp ); } RemoteOperationResult result = uploadOperation.execute(client); return result; return uploadOperation.execute(client); } /** Access to the library method to Get Shares Loading @@ -286,11 +289,8 @@ public class TestActivity extends Activity { * @return */ public RemoteOperationResult getShares(){ GetRemoteSharesOperation getOperation = new GetRemoteSharesOperation(); RemoteOperationResult result = getOperation.execute(mClient); return result; return getOperation.execute(mClient); } /** Access to the library method to Create Share Loading @@ -316,9 +316,7 @@ public class TestActivity extends Activity { String password, int permissions){ CreateRemoteShareOperation createOperation = new CreateRemoteShareOperation(path, shareType, shareWith, publicUpload, password, permissions); RemoteOperationResult result = createOperation.execute(mClient); return result; return createOperation.execute(mClient); } Loading @@ -330,10 +328,7 @@ public class TestActivity extends Activity { public RemoteOperationResult removeShare(int idShare) { RemoveRemoteShareOperation removeOperation = new RemoveRemoteShareOperation(idShare); RemoteOperationResult result = removeOperation.execute(mClient); return result; return removeOperation.execute(mClient); } Loading Loading @@ -373,5 +368,9 @@ public class TestActivity extends Activity { return extractedFile; } private static String getFileLastModifTimeStamp (String storagePath) { File file = new File(storagePath); Long timeStampLong = file.lastModified()/1000; return timeStampLong.toString(); } } test_client/tests/src/com/owncloud/android/lib/test_project/test/UploadFileTest.java +1 −2 Original line number Diff line number Diff line Loading @@ -121,5 +121,4 @@ public class UploadFileTest extends RemoteTest { } super.tearDown(); } } Loading
sample_client/src/com/owncloud/android/lib/sampleclient/MainActivity.java +7 −2 Original line number Diff line number Diff line Loading @@ -157,7 +157,12 @@ public class MainActivity extends Activity implements OnRemoteOperationListener, File fileToUpload = upFolder.listFiles()[0]; String remotePath = FileUtils.PATH_SEPARATOR + fileToUpload.getName(); String mimeType = getString(R.string.sample_file_mimetype); UploadRemoteFileOperation uploadOperation = new UploadRemoteFileOperation(fileToUpload.getAbsolutePath(), remotePath, mimeType); // Get the last modification date of the file from the file system Long timeStampLong = fileToUpload.lastModified()/1000; String timeStamp = timeStampLong.toString(); UploadRemoteFileOperation uploadOperation = new UploadRemoteFileOperation(fileToUpload.getAbsolutePath(), remotePath, mimeType, timeStamp); uploadOperation.addDatatransferProgressListener(this); uploadOperation.execute(mClient, this, mHandler); } Loading
src/com/owncloud/android/lib/resources/files/ChunkedUploadRemoteFileOperation.java +12 −2 Original line number Diff line number Diff line Loading @@ -54,15 +54,22 @@ public class ChunkedUploadRemoteFileOperation extends UploadRemoteFileOperation public static final long CHUNK_SIZE = 1024000; private static final String OC_CHUNKED_HEADER = "OC-Chunked"; private static final String OC_CHUNK_SIZE_HEADER = "OC-Chunk-Size"; private static final String OC_CHUNK_X_OC_MTIME_HEADER = "X-OC-Mtime"; private static final String TAG = ChunkedUploadRemoteFileOperation.class.getSimpleName(); private Context mContext; public ChunkedUploadRemoteFileOperation( Context context, String storagePath, String remotePath, String mimeType, String requiredEtag) { super(storagePath, remotePath, mimeType, requiredEtag); Context context, String storagePath, String remotePath, String mimeType, String requiredEtag, String fileLastModifTimestamp) { super(storagePath, remotePath, mimeType, requiredEtag, fileLastModifTimestamp); mContext = context; } public ChunkedUploadRemoteFileOperation( String storagePath, String remotePath, String mimeType, String requiredEtag, String fileLastModifTimestamp ) { super(storagePath, remotePath, mimeType, requiredEtag, fileLastModifTimestamp); } @Override protected int uploadFile(OwnCloudClient client) throws IOException { int status = -1; Loading Loading @@ -112,6 +119,9 @@ public class ChunkedUploadRemoteFileOperation extends UploadRemoteFileOperation mPutMethod.addRequestHeader(OC_CHUNKED_HEADER, OC_CHUNKED_HEADER); mPutMethod.addRequestHeader(OC_CHUNK_SIZE_HEADER, chunkSizeStr); mPutMethod.addRequestHeader(OC_TOTAL_LENGTH_HEADER, totalLengthStr); mPutMethod.addRequestHeader(OC_CHUNK_X_OC_MTIME_HEADER, mFileLastModifTimestamp); ((ChunkFromFileChannelRequestEntity) mEntity).setOffset(offset); mPutMethod.setRequestEntity(mEntity); if (mCancellationRequested.get()) { Loading
src/com/owncloud/android/lib/resources/files/UploadRemoteFileOperation.java +122 −116 Original line number Diff line number Diff line Loading @@ -61,11 +61,13 @@ public class UploadRemoteFileOperation extends RemoteOperation { private static final String TAG = UploadRemoteFileOperation.class.getSimpleName(); protected static final String OC_TOTAL_LENGTH_HEADER = "OC-Total-Length"; protected static final String OC_X_OC_MTIME_HEADER = "X-OC-Mtime"; protected static final String IF_MATCH_HEADER = "If-Match"; protected String mLocalPath; protected String mRemotePath; protected String mMimeType; protected String mFileLastModifTimestamp; protected PutMethod mPutMethod = null; protected boolean mForbiddenCharsInServer = false; protected String mRequiredEtag = null; Loading @@ -75,14 +77,15 @@ public class UploadRemoteFileOperation extends RemoteOperation { protected RequestEntity mEntity = null; public UploadRemoteFileOperation(String localPath, String remotePath, String mimeType) { public UploadRemoteFileOperation(String localPath, String remotePath, String mimeType, String fileLastModifTimestamp) { mLocalPath = localPath; mRemotePath = remotePath; mMimeType = mimeType; mFileLastModifTimestamp = fileLastModifTimestamp; } public UploadRemoteFileOperation(String localPath, String remotePath, String mimeType, String requiredEtag) { this(localPath, remotePath, mimeType); public UploadRemoteFileOperation(String localPath, String remotePath, String mimeType, String requiredEtag, String fileLastModifTimestamp) { this(localPath, remotePath, mimeType, fileLastModifTimestamp); mRequiredEtag = requiredEtag; } Loading Loading @@ -152,6 +155,9 @@ public class UploadRemoteFileOperation extends RemoteOperation { mPutMethod.addRequestHeader(IF_MATCH_HEADER, "\"" + mRequiredEtag + "\""); } mPutMethod.addRequestHeader(OC_TOTAL_LENGTH_HEADER, String.valueOf(f.length())); mPutMethod.addRequestHeader(OC_X_OC_MTIME_HEADER, mFileLastModifTimestamp); mPutMethod.setRequestEntity(mEntity); status = client.executeMethod(mPutMethod); Loading
test_client/src/com/owncloud/android/lib/test_project/TestActivity.java +24 −25 Original line number Diff line number Diff line Loading @@ -251,34 +251,37 @@ public class TestActivity extends Activity { return TestActivity.uploadFile(this, storagePath, remotePath, mimeType, mClient, requiredEtag); } /** Access to the library method to Upload a File /** * Access to the library method to Upload a File * * @param context * @param storagePath * @param remotePath * @param mimeType * @param client Client instance configured to access the target OC server. * * @param requiredEtag * @return */ public static RemoteOperationResult uploadFile( Context context, String storagePath, String remotePath, String mimeType, OwnCloudClient client, String requiredEtag ) { String fileLastModifTimestamp = getFileLastModifTimeStamp(storagePath); UploadRemoteFileOperation uploadOperation; if ((new File(storagePath)).length() > ChunkedUploadRemoteFileOperation.CHUNK_SIZE) { uploadOperation = new ChunkedUploadRemoteFileOperation( context, storagePath, remotePath, mimeType, requiredEtag context, storagePath, remotePath, mimeType, requiredEtag, fileLastModifTimestamp ); } else { uploadOperation = new UploadRemoteFileOperation( storagePath, remotePath, mimeType storagePath, remotePath, mimeType, requiredEtag, fileLastModifTimestamp ); } RemoteOperationResult result = uploadOperation.execute(client); return result; return uploadOperation.execute(client); } /** Access to the library method to Get Shares Loading @@ -286,11 +289,8 @@ public class TestActivity extends Activity { * @return */ public RemoteOperationResult getShares(){ GetRemoteSharesOperation getOperation = new GetRemoteSharesOperation(); RemoteOperationResult result = getOperation.execute(mClient); return result; return getOperation.execute(mClient); } /** Access to the library method to Create Share Loading @@ -316,9 +316,7 @@ public class TestActivity extends Activity { String password, int permissions){ CreateRemoteShareOperation createOperation = new CreateRemoteShareOperation(path, shareType, shareWith, publicUpload, password, permissions); RemoteOperationResult result = createOperation.execute(mClient); return result; return createOperation.execute(mClient); } Loading @@ -330,10 +328,7 @@ public class TestActivity extends Activity { public RemoteOperationResult removeShare(int idShare) { RemoveRemoteShareOperation removeOperation = new RemoveRemoteShareOperation(idShare); RemoteOperationResult result = removeOperation.execute(mClient); return result; return removeOperation.execute(mClient); } Loading Loading @@ -373,5 +368,9 @@ public class TestActivity extends Activity { return extractedFile; } private static String getFileLastModifTimeStamp (String storagePath) { File file = new File(storagePath); Long timeStampLong = file.lastModified()/1000; return timeStampLong.toString(); } }
test_client/tests/src/com/owncloud/android/lib/test_project/test/UploadFileTest.java +1 −2 Original line number Diff line number Diff line Loading @@ -121,5 +121,4 @@ public class UploadFileTest extends RemoteTest { } super.tearDown(); } }