mirror of
https://github.com/nextcloud/android.git
synced 2024-11-27 17:46:37 +03:00
Merge pull request #313 from owncloud/refactor_remote_operation_to_delete_file_and_folder
Refactored remote operation to delete file and folder into oc_framework
This commit is contained in:
commit
910c8a7b36
10 changed files with 162 additions and 57 deletions
|
@ -0,0 +1,57 @@
|
|||
package com.owncloud.android.oc_framework_test_project.test;
|
||||
|
||||
import com.owncloud.android.oc_framework.operations.RemoteOperationResult;
|
||||
import com.owncloud.android.oc_framework.operations.RemoteOperationResult.ResultCode;
|
||||
import com.owncloud.android.oc_framework_test_project.TestActivity;
|
||||
|
||||
import android.test.ActivityInstrumentationTestCase2;
|
||||
|
||||
public class DeleteFileTest extends ActivityInstrumentationTestCase2<TestActivity> {
|
||||
|
||||
/* Folder data to delete. */
|
||||
private final String mFolderPath = "/folderToDelete";
|
||||
|
||||
/* File to delete. */
|
||||
private final String mFilePath = "fileToDelete.png";
|
||||
|
||||
private TestActivity mActivity;
|
||||
|
||||
public DeleteFileTest() {
|
||||
super(TestActivity.class);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void setUp() throws Exception {
|
||||
super.setUp();
|
||||
setActivityInitialTouchMode(false);
|
||||
mActivity = getActivity();
|
||||
}
|
||||
|
||||
/**
|
||||
* Test Remove Folder
|
||||
*/
|
||||
public void testRemoveFolder() {
|
||||
|
||||
RemoteOperationResult result = mActivity.removeFile(mFolderPath);
|
||||
assertTrue(result.isSuccess() || result.getCode() == ResultCode.FILE_NOT_FOUND);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test Remove File
|
||||
*/
|
||||
public void testRemoveFile() {
|
||||
|
||||
RemoteOperationResult result = mActivity.removeFile(mFilePath);
|
||||
assertTrue(result.isSuccess() || result.getCode() == ResultCode.FILE_NOT_FOUND);
|
||||
}
|
||||
|
||||
/**
|
||||
* Restore initial conditions
|
||||
*/
|
||||
public void testRestoreInitialConditions() {
|
||||
RemoteOperationResult result = mActivity.createFolder(mFolderPath, true);
|
||||
assertTrue(result.isSuccess());
|
||||
|
||||
}
|
||||
}
|
|
@ -4,6 +4,7 @@ import com.owncloud.android.oc_framework.network.webdav.OwnCloudClientFactory;
|
|||
import com.owncloud.android.oc_framework.network.webdav.WebdavClient;
|
||||
import com.owncloud.android.oc_framework.operations.RemoteOperationResult;
|
||||
import com.owncloud.android.oc_framework.operations.remote.CreateRemoteFolderOperation;
|
||||
import com.owncloud.android.oc_framework.operations.remote.RemoveRemoteFileOperation;
|
||||
import com.owncloud.android.oc_framework.operations.remote.RenameRemoteFileOperation;
|
||||
|
||||
import android.net.Uri;
|
||||
|
@ -44,8 +45,8 @@ public class TestActivity extends Activity {
|
|||
|
||||
/**
|
||||
* Access to the library method to Create a Folder
|
||||
* @param remotePath
|
||||
* @param createFullPath
|
||||
* @param remotePath Full path to the new directory to create in the remote server.
|
||||
* @param createFullPath 'True' means that all the ancestor folders should be created if don't exist yet.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
|
@ -75,4 +76,19 @@ public class TestActivity extends Activity {
|
|||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Access to the library method to Remove a File or Folder
|
||||
*
|
||||
* @param remotePath Remote path of the file or folder in the server.
|
||||
* @return
|
||||
*/
|
||||
public RemoteOperationResult removeFile(String remotePath) {
|
||||
|
||||
RemoveRemoteFileOperation removeOperation = new RemoveRemoteFileOperation(remotePath);
|
||||
RemoteOperationResult result = removeOperation.execute(mClient);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,66 @@
|
|||
package com.owncloud.android.oc_framework.operations.remote;
|
||||
|
||||
import org.apache.commons.httpclient.HttpStatus;
|
||||
import org.apache.jackrabbit.webdav.client.methods.DeleteMethod;
|
||||
|
||||
import android.util.Log;
|
||||
|
||||
import com.owncloud.android.oc_framework.network.webdav.WebdavClient;
|
||||
import com.owncloud.android.oc_framework.network.webdav.WebdavUtils;
|
||||
import com.owncloud.android.oc_framework.operations.RemoteOperation;
|
||||
import com.owncloud.android.oc_framework.operations.RemoteOperationResult;
|
||||
|
||||
/**
|
||||
* Remote operation performing the removal of a remote file or folder in the ownCloud server.
|
||||
*
|
||||
* @author David A. Velasco
|
||||
* @author masensio
|
||||
*/
|
||||
public class RemoveRemoteFileOperation extends RemoteOperation {
|
||||
private static final String TAG = RemoveRemoteFileOperation.class.getSimpleName();
|
||||
|
||||
private static final int REMOVE_READ_TIMEOUT = 10000;
|
||||
private static final int REMOVE_CONNECTION_TIMEOUT = 5000;
|
||||
|
||||
private String mRemotePath;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param remotePath RemotePath of the remote file or folder to remove from the server
|
||||
*/
|
||||
public RemoveRemoteFileOperation(String remotePath) {
|
||||
mRemotePath = remotePath;
|
||||
}
|
||||
|
||||
/**
|
||||
* Performs the rename operation.
|
||||
*
|
||||
* @param client Client object to communicate with the remote ownCloud server.
|
||||
*/
|
||||
@Override
|
||||
protected RemoteOperationResult run(WebdavClient client) {
|
||||
RemoteOperationResult result = null;
|
||||
DeleteMethod delete = null;
|
||||
|
||||
try {
|
||||
delete = new DeleteMethod(client.getBaseUri() + WebdavUtils.encodePath(mRemotePath));
|
||||
int status = client.executeMethod(delete, REMOVE_READ_TIMEOUT, REMOVE_CONNECTION_TIMEOUT);
|
||||
|
||||
delete.getResponseBodyAsString(); // exhaust the response, although not interesting
|
||||
result = new RemoteOperationResult((delete.succeeded() || status == HttpStatus.SC_NOT_FOUND), status, delete.getResponseHeaders());
|
||||
Log.i(TAG, "Remove " + mRemotePath + ": " + result.getLogMessage());
|
||||
|
||||
} catch (Exception e) {
|
||||
result = new RemoteOperationResult(e);
|
||||
Log.e(TAG, "Remove " + mRemotePath + ": " + result.getLogMessage(), e);
|
||||
|
||||
} finally {
|
||||
if (delete != null)
|
||||
delete.releaseConnection();
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
|
@ -434,7 +434,7 @@ public class FileDataStorageManager {
|
|||
}
|
||||
updateFolderSize(file.getParentId());
|
||||
}
|
||||
if (removeLocalCopy && file.isDown()) {
|
||||
if (removeLocalCopy && file.isDown() && file.getStoragePath() != null) {
|
||||
boolean success = new File(file.getStoragePath()).delete();
|
||||
if (!removeDBData && success) {
|
||||
// maybe unnecessary, but should be checked TODO remove if unnecessary
|
||||
|
|
|
@ -17,16 +17,13 @@
|
|||
|
||||
package com.owncloud.android.operations;
|
||||
|
||||
import org.apache.commons.httpclient.HttpStatus;
|
||||
import org.apache.jackrabbit.webdav.client.methods.DeleteMethod;
|
||||
|
||||
import com.owncloud.android.datamodel.FileDataStorageManager;
|
||||
import com.owncloud.android.datamodel.OCFile;
|
||||
import com.owncloud.android.oc_framework.network.webdav.WebdavClient;
|
||||
import com.owncloud.android.oc_framework.operations.RemoteOperation;
|
||||
import com.owncloud.android.oc_framework.operations.RemoteOperationResult;
|
||||
import com.owncloud.android.oc_framework.network.webdav.WebdavUtils;
|
||||
import com.owncloud.android.utils.Log_OC;
|
||||
import com.owncloud.android.oc_framework.operations.RemoteOperationResult.ResultCode;
|
||||
import com.owncloud.android.oc_framework.operations.remote.RemoveRemoteFileOperation;
|
||||
|
||||
|
||||
/**
|
||||
|
@ -36,10 +33,7 @@ import com.owncloud.android.utils.Log_OC;
|
|||
*/
|
||||
public class RemoveFileOperation extends RemoteOperation {
|
||||
|
||||
private static final String TAG = RemoveFileOperation.class.getSimpleName();
|
||||
|
||||
private static final int REMOVE_READ_TIMEOUT = 10000;
|
||||
private static final int REMOVE_CONNECTION_TIMEOUT = 5000;
|
||||
// private static final String TAG = RemoveFileOperation.class.getSimpleName();
|
||||
|
||||
OCFile mFileToRemove;
|
||||
boolean mDeleteLocalCopy;
|
||||
|
@ -69,7 +63,6 @@ public class RemoveFileOperation extends RemoteOperation {
|
|||
return mFileToRemove;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Performs the remove operation
|
||||
*
|
||||
|
@ -78,25 +71,14 @@ public class RemoveFileOperation extends RemoteOperation {
|
|||
@Override
|
||||
protected RemoteOperationResult run(WebdavClient client) {
|
||||
RemoteOperationResult result = null;
|
||||
DeleteMethod delete = null;
|
||||
try {
|
||||
delete = new DeleteMethod(client.getBaseUri() + WebdavUtils.encodePath(mFileToRemove.getRemotePath()));
|
||||
int status = client.executeMethod(delete, REMOVE_READ_TIMEOUT, REMOVE_CONNECTION_TIMEOUT);
|
||||
if (delete.succeeded() || status == HttpStatus.SC_NOT_FOUND) {
|
||||
mDataStorageManager.removeFile(mFileToRemove, true, mDeleteLocalCopy);
|
||||
}
|
||||
delete.getResponseBodyAsString(); // exhaust the response, although not interesting
|
||||
result = new RemoteOperationResult((delete.succeeded() || status == HttpStatus.SC_NOT_FOUND), status, delete.getResponseHeaders());
|
||||
Log_OC.i(TAG, "Remove " + mFileToRemove.getRemotePath() + ": " + result.getLogMessage());
|
||||
|
||||
} catch (Exception e) {
|
||||
result = new RemoteOperationResult(e);
|
||||
Log_OC.e(TAG, "Remove " + mFileToRemove.getRemotePath() + ": " + result.getLogMessage(), e);
|
||||
|
||||
} finally {
|
||||
if (delete != null)
|
||||
delete.releaseConnection();
|
||||
|
||||
RemoveRemoteFileOperation operation = new RemoveRemoteFileOperation(mFileToRemove.getRemotePath());
|
||||
result = operation.execute(client);
|
||||
|
||||
if (result.isSuccess() || result.getCode() == ResultCode.FILE_NOT_FOUND) {
|
||||
mDataStorageManager.removeFile(mFileToRemove, true, mDeleteLocalCopy);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
|
|
@ -20,7 +20,6 @@ package com.owncloud.android.operations;
|
|||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
||||
import org.apache.commons.httpclient.HttpException;
|
||||
import com.owncloud.android.datamodel.FileDataStorageManager;
|
||||
import com.owncloud.android.datamodel.OCFile;
|
||||
import com.owncloud.android.oc_framework.network.webdav.WebdavClient;
|
||||
|
|
|
@ -473,12 +473,10 @@ public class FileDetailFragment extends FileFragment implements
|
|||
|
||||
@Override
|
||||
public void onNeutral(String callerTag) {
|
||||
File f = null;
|
||||
OCFile file = getFile();
|
||||
if (file.isDown() && (f = new File(file.getStoragePath())).exists()) {
|
||||
f.delete();
|
||||
mStorageManager.removeFile(file, false, true); // TODO perform in background task / new thread
|
||||
if (file.getStoragePath() != null) {
|
||||
file.setStoragePath(null);
|
||||
mStorageManager.saveFile(file);
|
||||
updateFileDetails(file, mAccount);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -16,7 +16,6 @@
|
|||
*/
|
||||
package com.owncloud.android.ui.preview;
|
||||
|
||||
import java.io.File;
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
@ -388,15 +387,9 @@ public class PreviewImageFragment extends FileFragment implements OnRemoteOper
|
|||
*/
|
||||
@Override
|
||||
public void onNeutral(String callerTag) {
|
||||
// TODO this code should be made in a secondary thread,
|
||||
OCFile file = getFile();
|
||||
if (file.isDown()) { // checks it is still there
|
||||
File f = new File(file.getStoragePath());
|
||||
f.delete();
|
||||
file.setStoragePath(null);
|
||||
mStorageManager.saveFile(file);
|
||||
finish();
|
||||
}
|
||||
mStorageManager.removeFile(file, false, true); // TODO perform in background task / new thread
|
||||
finish();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -16,7 +16,6 @@
|
|||
*/
|
||||
package com.owncloud.android.ui.preview;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
|
@ -672,16 +671,10 @@ public class PreviewMediaFragment extends FileFragment implements
|
|||
*/
|
||||
@Override
|
||||
public void onNeutral(String callerTag) {
|
||||
// TODO this code should be made in a secondary thread,
|
||||
OCFile file = getFile();
|
||||
if (file.isDown()) { // checks it is still there
|
||||
stopPreview(true);
|
||||
File f = new File(file.getStoragePath());
|
||||
f.delete();
|
||||
file.setStoragePath(null);
|
||||
mStorageManager.saveFile(file);
|
||||
finish();
|
||||
}
|
||||
stopPreview(true);
|
||||
mStorageManager.removeFile(file, false, true); // TODO perform in background task / new thread
|
||||
finish();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -18,11 +18,12 @@
|
|||
|
||||
package com.owncloud.android.test;
|
||||
|
||||
import android.test.AndroidTestCase;
|
||||
|
||||
import com.owncloud.android.oc_framework.accounts.AccountUtils;
|
||||
import com.owncloud.android.oc_framework.utils.OwnCloudVersion;
|
||||
|
||||
import android.test.AndroidTestCase;
|
||||
|
||||
|
||||
public class AccountUtilsTest extends AndroidTestCase {
|
||||
|
||||
public void testGetWebdavPathAndOCVersion() {
|
||||
|
|
Loading…
Reference in a new issue