OC-2677: Add GetSharesForFile operation

This commit is contained in:
masensio 2014-02-01 14:35:47 +01:00
parent 8bf072f71c
commit f7bb011b7e
4 changed files with 114 additions and 36 deletions

@ -1 +1 @@
Subproject commit cc71eeaa21e9217947dfce213049e16d02629b0b Subproject commit 781e738347a87c2b24144e03f7fe8fe32603f2f3

View file

@ -29,6 +29,7 @@ import com.owncloud.android.MainApp;
import com.owncloud.android.db.ProviderMeta.ProviderTableMeta; import com.owncloud.android.db.ProviderMeta.ProviderTableMeta;
import com.owncloud.android.lib.operations.common.OCShare; import com.owncloud.android.lib.operations.common.OCShare;
import com.owncloud.android.lib.operations.common.ShareType; import com.owncloud.android.lib.operations.common.ShareType;
import com.owncloud.android.lib.utils.FileUtils;
import com.owncloud.android.utils.FileStorageUtils; import com.owncloud.android.utils.FileStorageUtils;
import com.owncloud.android.utils.Log_OC; import com.owncloud.android.utils.Log_OC;
@ -1098,4 +1099,36 @@ public class FileDataStorageManager {
} }
} }
public void saveSharesDB(ArrayList<OCShare> shares) {
if (shares.size() > 0) {
// Save share file
saveShares(shares);
ArrayList<OCFile> sharedFiles = new ArrayList<OCFile>();
for (OCShare share : shares) {
// Get the path
String path = share.getPath();
if (share.isDirectory()) {
path = path + FileUtils.PATH_SEPARATOR;
}
// Update OCFile with data from share: ShareByLink ¿and publicLink?
OCFile file = getFileByPath(path);
if (file != null) {
if (share.getShareType().equals(ShareType.PUBLIC_LINK)) {
file.setShareByLink(true);
sharedFiles.add(file);
}
}
}
if (sharedFiles.size() > 0) {
updateSharedFiles(sharedFiles);
}
}
}
} }

View file

@ -0,0 +1,79 @@
/* ownCloud Android client application
* Copyright (C) 2012-2013 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 java.util.ArrayList;
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.remote.GetSharesForFileRemoteOperation;
import com.owncloud.android.operations.common.SyncOperation;
import com.owncloud.android.utils.Log_OC;
/**
* Provide a list shares for a specific file.
*
* @author masensio
*
*/
public class GetSharesForFileOperation extends SyncOperation {
private static final String TAG = GetSharesForFileOperation.class.getSimpleName();
private String mPath;
private boolean mReshares;
private boolean mSubfiles;
/**
* Constructor
*
* @param path Path to file or folder
* @param reshares If set to false (default), only shares from the current user are returned
* If set to true, all shares from the given file are returned
* @param subfiles If set to false (default), lists only the folder being shared
* If set to true, all shared files within the folder are returned.
*/
public GetSharesForFileOperation(String path, boolean reshares, boolean subfiles) {
mPath = path;
mReshares = reshares;
mSubfiles = subfiles;
}
@Override
protected RemoteOperationResult run(OwnCloudClient client) {
GetSharesForFileRemoteOperation operation = new GetSharesForFileRemoteOperation(mPath, mReshares, mSubfiles);
RemoteOperationResult result = operation.execute(client);
if (result.isSuccess()) {
// Update DB with the response
Log_OC.d(TAG, "File = " + mPath + " Share list size " + result.getData().size());
ArrayList<OCShare> shares = new ArrayList<OCShare>();
for(Object obj: result.getData()) {
shares.add((OCShare) obj);
}
getStorageManager().saveSharesDB(shares);
}
return result;
}
}

View file

@ -19,13 +19,10 @@ package com.owncloud.android.operations;
import java.util.ArrayList; import java.util.ArrayList;
import com.owncloud.android.datamodel.OCFile;
import com.owncloud.android.lib.network.OwnCloudClient; import com.owncloud.android.lib.network.OwnCloudClient;
import com.owncloud.android.lib.operations.common.RemoteOperationResult; import com.owncloud.android.lib.operations.common.RemoteOperationResult;
import com.owncloud.android.lib.operations.common.OCShare; import com.owncloud.android.lib.operations.common.OCShare;
import com.owncloud.android.lib.operations.common.ShareType;
import com.owncloud.android.lib.operations.remote.GetRemoteSharesOperation; import com.owncloud.android.lib.operations.remote.GetRemoteSharesOperation;
import com.owncloud.android.lib.utils.FileUtils;
import com.owncloud.android.operations.common.SyncOperation; import com.owncloud.android.operations.common.SyncOperation;
import com.owncloud.android.utils.Log_OC; import com.owncloud.android.utils.Log_OC;
@ -55,41 +52,10 @@ public class GetSharesOperation extends SyncOperation {
shares.add((OCShare) obj); shares.add((OCShare) obj);
} }
saveSharesDB(shares); getStorageManager().saveSharesDB(shares);
} }
return result; return result;
} }
private void saveSharesDB(ArrayList<OCShare> shares) {
if (shares.size() > 0) {
// Save share file
getStorageManager().saveShares(shares);
ArrayList<OCFile> sharedFiles = new ArrayList<OCFile>();
for (OCShare share : shares) {
// Get the path
String path = share.getPath();
if (share.isDirectory()) {
path = path + FileUtils.PATH_SEPARATOR;
}
// Update OCFile with data from share: ShareByLink ¿and publicLink?
OCFile file = getStorageManager().getFileByPath(path);
if (file != null) {
if (share.getShareType().equals(ShareType.PUBLIC_LINK)) {
file.setShareByLink(true);
sharedFiles.add(file);
}
}
}
if (sharedFiles.size() > 0) {
getStorageManager().updateSharedFiles(sharedFiles);
}
}
}
} }