2 * ownCloud Android client application
5 * Copyright (C) 2015 ownCloud Inc.
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2,
9 * as published by the Free Software Foundation.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
21 package com
.owncloud
.android
.operations
;
23 import android
.content
.Context
;
25 import com
.owncloud
.android
.datamodel
.OCFile
;
27 import com
.owncloud
.android
.lib
.common
.OwnCloudClient
;
28 import com
.owncloud
.android
.lib
.common
.operations
.RemoteOperationResult
;
29 import com
.owncloud
.android
.lib
.common
.operations
.RemoteOperationResult
.ResultCode
;
30 import com
.owncloud
.android
.lib
.common
.utils
.Log_OC
;
31 import com
.owncloud
.android
.lib
.resources
.files
.ExistenceCheckRemoteOperation
;
32 import com
.owncloud
.android
.lib
.resources
.shares
.OCShare
;
33 import com
.owncloud
.android
.lib
.resources
.shares
.RemoveRemoteShareOperation
;
34 import com
.owncloud
.android
.lib
.resources
.shares
.ShareType
;
36 import com
.owncloud
.android
.operations
.common
.SyncOperation
;
38 import java
.util
.ArrayList
;
42 * Save the data in Database
44 public class UnshareOperation
extends SyncOperation
{
46 private static final String TAG
= UnshareOperation
.class.getSimpleName();
48 private String mRemotePath
;
49 private ShareType mShareType
;
50 private String mShareWith
;
51 private Context mContext
;
53 public UnshareOperation(String remotePath
, ShareType shareType
, String shareWith
,
55 mRemotePath
= remotePath
;
56 mShareType
= shareType
;
57 mShareWith
= shareWith
;
62 protected RemoteOperationResult
run(OwnCloudClient client
) {
63 RemoteOperationResult result
= null
;
65 // Get Share for a file
66 OCShare share
= getStorageManager().getFirstShareByPathAndType(mRemotePath
,
67 mShareType
, mShareWith
);
70 OCFile file
= getStorageManager().getFileByPath(mRemotePath
);
71 RemoveRemoteShareOperation operation
=
72 new RemoveRemoteShareOperation((int) share
.getRemoteId());
73 result
= operation
.execute(client
);
75 if (result
.isSuccess()) {
76 Log_OC
.d(TAG
, "Share id = " + share
.getRemoteId() + " deleted");
78 if (mShareType
== ShareType
.PUBLIC_LINK
) {
79 file
.setShareViaLink(false
);
80 file
.setPublicLink("");
81 } else if (mShareType
== ShareType
.USER
|| mShareType
== ShareType
.GROUP
){
82 // Check if it is the last share
83 ArrayList
<OCShare
> sharesWith
= getStorageManager().
84 getSharesWithForAFile(mRemotePath
,
85 getStorageManager().getAccount().name
);
86 if (sharesWith
.size() == 1) {
87 file
.setShareWithSharee(false
);
91 getStorageManager().saveFile(file
);
92 getStorageManager().removeShare(share
);
94 } else if (!existsFile(client
, file
.getRemotePath())) {
95 // unshare failed because file was deleted before
96 getStorageManager().removeFile(file
, true
, true
);
100 result
= new RemoteOperationResult(ResultCode
.SHARE_NOT_FOUND
);
106 private boolean existsFile(OwnCloudClient client
, String remotePath
){
107 ExistenceCheckRemoteOperation existsOperation
=
108 new ExistenceCheckRemoteOperation(remotePath
, mContext
, false
);
109 RemoteOperationResult result
= existsOperation
.execute(client
);
110 return result
.isSuccess();