nextcloud-android/src/main/java/com/owncloud/android/operations/CreateShareWithShareeOperat...

116 lines
4.4 KiB
Java

/*
* ownCloud Android client application
*
* @author masensio
* @author David A. Velasco
* 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,
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.owncloud.android.operations;
import com.owncloud.android.datamodel.OCFile;
import com.owncloud.android.lib.common.OwnCloudClient;
import com.owncloud.android.lib.common.operations.RemoteOperationResult;
import com.owncloud.android.lib.resources.files.FileUtils;
import com.owncloud.android.lib.resources.shares.CreateShareRemoteOperation;
import com.owncloud.android.lib.resources.shares.OCShare;
import com.owncloud.android.lib.resources.shares.ShareType;
import com.owncloud.android.operations.common.SyncOperation;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* Creates a new private share for a given file.
*/
public class CreateShareWithShareeOperation extends SyncOperation {
private String path;
private String shareeName;
private ShareType shareType;
private int permissions;
private static final List<ShareType> supportedShareTypes = new ArrayList<>(Arrays.asList(ShareType.USER,
ShareType.GROUP,
ShareType.FEDERATED,
ShareType.EMAIL,
ShareType.ROOM,
ShareType.CIRCLE));
/**
* Constructor.
*
* @param path Full path of the file/folder being shared.
* @param shareeName User or group name of the target sharee.
* @param shareType Type of share determines type of sharee; {@link ShareType#USER} and {@link ShareType#GROUP}
* are the only valid values for the moment.
* @param permissions Share permissions key as detailed in
* https://doc.owncloud.org/server/8.2/developer_manual/core/ocs-share-api.html .
*/
public CreateShareWithShareeOperation(String path, String shareeName, ShareType shareType, int permissions) {
if (!supportedShareTypes.contains(shareType)) {
throw new IllegalArgumentException("Illegal share type " + shareType);
}
this.path = path;
this.shareeName = shareeName;
this.shareType = shareType;
this.permissions = permissions;
}
@Override
protected RemoteOperationResult run(OwnCloudClient client) {
CreateShareRemoteOperation operation = new CreateShareRemoteOperation(
path,
shareType,
shareeName,
false,
"",
permissions
);
operation.setGetShareDetails(true);
RemoteOperationResult result = operation.execute(client);
if (result.isSuccess() && result.getData().size() > 0) {
OCShare share = (OCShare) result.getData().get(0);
updateData(share);
}
return result;
}
private void updateData(OCShare share) {
// Update DB with the response
share.setPath(path);
share.setFolder(path.endsWith(FileUtils.PATH_SEPARATOR));
getStorageManager().saveShare(share);
// Update OCFile with data from share: ShareByLink and publicLink
OCFile file = getStorageManager().getFileByPath(path);
if (file!=null) {
file.setSharedWithSharee(true); // TODO - this should be done by the FileContentProvider, as part of getStorageManager().saveShare(share)
getStorageManager().saveFile(file);
}
}
public String getPath() {
return this.path;
}
}