package com.owncloud.android.operations;
+import org.apache.commons.httpclient.HttpStatus;
import org.apache.jackrabbit.webdav.client.methods.DeleteMethod;
import android.util.Log;
*/
public class RemoveFileOperation extends RemoteOperation {
- private static final String TAG = RemoveFileOperation.class.getCanonicalName();
+ private static final String TAG = RemoveFileOperation.class.getSimpleName();
private static final int REMOVE_READ_TIMEOUT = 10000;
private static final int REMOVE_CONNECTION_TIMEOUT = 5000;
/**
- * Performs the removal
+ * Getter for the file to remove (or removed, if the operation was successfully performed).
+ *
+ * @return File to remove or already removed.
+ */
+ public OCFile getFile() {
+ return mFileToRemove;
+ }
+
+
+ /**
+ * Performs the remove operation
+ *
+ * @param client Client object to communicate with the remote ownCloud server.
*/
@Override
protected RemoteOperationResult run(WebdavClient client) {
try {
delete = new DeleteMethod(client.getBaseUri() + WebdavUtils.encodePath(mFileToRemove.getRemotePath()));
int status = client.executeMethod(delete, REMOVE_READ_TIMEOUT, REMOVE_CONNECTION_TIMEOUT);
- if (delete.succeeded()) {
- mDataStorageManager.removeFile(mFileToRemove, mDeleteLocalCopy);
+ if (delete.succeeded() || status == HttpStatus.SC_NOT_FOUND) {
+ if (mFileToRemove.isDirectory()) {
+ mDataStorageManager.removeDirectory(mFileToRemove, true, mDeleteLocalCopy);
+ } else {
+ mDataStorageManager.removeFile(mFileToRemove, mDeleteLocalCopy);
+ }
}
delete.getResponseBodyAsString(); // exhaust the response, although not interesting
- result = new RemoteOperationResult(delete.succeeded(), status);
+ result = new RemoteOperationResult((delete.succeeded() || status == HttpStatus.SC_NOT_FOUND), status);
Log.i(TAG, "Remove " + mFileToRemove.getRemotePath() + ": " + result.getLogMessage());
} catch (Exception e) {