/* * 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 . * */ 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 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; } }