X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/blobdiff_plain/1f6eb722f4e81fd6d9b148215ba2e891dabd0824..00482b6dcb1e98da39df54374f7098b51d66bee5:/src/com/owncloud/android/operations/UnshareLinkOperation.java diff --git a/src/com/owncloud/android/operations/UnshareLinkOperation.java b/src/com/owncloud/android/operations/UnshareLinkOperation.java index b1ec9ccc..1b662261 100644 --- a/src/com/owncloud/android/operations/UnshareLinkOperation.java +++ b/src/com/owncloud/android/operations/UnshareLinkOperation.java @@ -1,5 +1,8 @@ -/* ownCloud Android client application - * Copyright (C) 2014 ownCloud Inc. +/** + * ownCloud Android client application + * + * @author masensio + * Copyright (C) 2015 ownCloud Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2, @@ -17,31 +20,37 @@ package com.owncloud.android.operations; -import java.util.ArrayList; +import android.content.Context; +import com.owncloud.android.MainApp; import com.owncloud.android.datamodel.OCFile; -import com.owncloud.android.lib.network.OwnCloudClient; -import com.owncloud.android.lib.operations.common.OCShare; -import com.owncloud.android.lib.operations.common.RemoteOperationResult; -import com.owncloud.android.lib.operations.common.RemoteOperationResult.ResultCode; -import com.owncloud.android.lib.operations.remote.GetRemoteSharesOperation; + +import com.owncloud.android.lib.common.OwnCloudClient; +import com.owncloud.android.lib.common.operations.RemoteOperationResult; +import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode; +import com.owncloud.android.lib.common.utils.Log_OC; +import com.owncloud.android.lib.resources.files.ExistenceCheckRemoteOperation; +import com.owncloud.android.lib.resources.shares.OCShare; +import com.owncloud.android.lib.resources.shares.RemoveRemoteShareOperation; +import com.owncloud.android.lib.resources.shares.ShareType; + import com.owncloud.android.operations.common.SyncOperation; -import com.owncloud.android.utils.Log_OC; /** * Unshare file/folder * Save the data in Database - * - * @author masensio */ public class UnshareLinkOperation extends SyncOperation { private static final String TAG = UnshareLinkOperation.class.getSimpleName(); - private OCFile mFile; + private String mRemotePath; + private Context mContext; - public UnshareLinkOperation(OCFile file) { - mFile = file; + + public UnshareLinkOperation(String remotePath, Context context) { + mRemotePath = remotePath; + mContext = context; } @Override @@ -49,23 +58,44 @@ public class UnshareLinkOperation extends SyncOperation { RemoteOperationResult result = null; // Get Share for a file - OCShare share = getStorageManager().getShareByPath(mFile.getRemotePath()); + OCShare share = getStorageManager().getFirstShareByPathAndType(mRemotePath, + ShareType.PUBLIC_LINK); if (share != null) { - GetRemoteSharesOperation operation = new GetRemoteSharesOperation(); + RemoveRemoteShareOperation operation = + new RemoveRemoteShareOperation((int) share.getIdRemoteShared()); result = operation.execute(client); - if (result.isSuccess()) { + if (result.isSuccess() || result.getCode() == ResultCode.SHARE_NOT_FOUND) { Log_OC.d(TAG, "Share id = " + share.getIdRemoteShared() + " deleted"); - // TODO Update DB + OCFile file = getStorageManager().getFileByPath(mRemotePath); + file.setShareByLink(false); + file.setPublicLink(""); + getStorageManager().saveFile(file); + getStorageManager().removeShare(share); + + if (result.getCode() == ResultCode.SHARE_NOT_FOUND) { + if (existsFile(client, file.getRemotePath())) { + result = new RemoteOperationResult(ResultCode.OK); + } else { + getStorageManager().removeFile(file, true, true); + } + } + } - } } else { - result = new RemoteOperationResult(ResultCode.FILE_NOT_FOUND); + result = new RemoteOperationResult(ResultCode.SHARE_NOT_FOUND); } return result; } + + private boolean existsFile(OwnCloudClient client, String remotePath){ + ExistenceCheckRemoteOperation existsOperation = + new ExistenceCheckRemoteOperation(remotePath, mContext, false); + RemoteOperationResult result = existsOperation.execute(client); + return result.isSuccess(); + } }