mirror of
https://github.com/owncloud/android-library.git
synced 2025-06-08 00:16:09 +00:00
Add Share operation to the library
This commit is contained in:
parent
1c44c7ac22
commit
7b5d6cdef7
@ -65,6 +65,10 @@ public class OwnCloudAccount extends Account {
|
|||||||
* Flag signaling if the ownCloud server can be accessed with session cookies from SAML-based web single-sign-on.
|
* Flag signaling if the ownCloud server can be accessed with session cookies from SAML-based web single-sign-on.
|
||||||
*/
|
*/
|
||||||
public static final String KEY_SUPPORTS_SAML_WEB_SSO = "oc_supports_saml_web_sso";
|
public static final String KEY_SUPPORTS_SAML_WEB_SSO = "oc_supports_saml_web_sso";
|
||||||
|
/**
|
||||||
|
* Flag signaling if the ownCloud server supports Share API"
|
||||||
|
*/
|
||||||
|
public static final String KEY_SUPPORTS_SHARE_API = "oc_supports_share_api";
|
||||||
}
|
}
|
||||||
|
|
||||||
private String mAuthTokenType;
|
private String mAuthTokenType;
|
||||||
|
@ -102,6 +102,10 @@ public class RemoteFile implements Parcelable, Serializable {
|
|||||||
this.mEtag = etag;
|
this.mEtag = etag;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public RemoteFile() {
|
||||||
|
resetData();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create new {@link RemoteFile} with given path.
|
* Create new {@link RemoteFile} with given path.
|
||||||
*
|
*
|
||||||
@ -159,7 +163,11 @@ public class RemoteFile implements Parcelable, Serializable {
|
|||||||
*
|
*
|
||||||
* @param source The source parcel
|
* @param source The source parcel
|
||||||
*/
|
*/
|
||||||
private RemoteFile(Parcel source) {
|
protected RemoteFile(Parcel source) {
|
||||||
|
readFromParcel(source);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void readFromParcel (Parcel source) {
|
||||||
mRemotePath = source.readString();
|
mRemotePath = source.readString();
|
||||||
mMimeType = source.readString();
|
mMimeType = source.readString();
|
||||||
mLength = source.readLong();
|
mLength = source.readLong();
|
||||||
|
@ -0,0 +1,273 @@
|
|||||||
|
/* ownCloud Android Library is available under MIT license
|
||||||
|
* Copyright (C) 2014 ownCloud (http://www.owncloud.org/)
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
||||||
|
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
||||||
|
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.owncloud.android.lib.operations.common;
|
||||||
|
|
||||||
|
import com.owncloud.android.lib.network.webdav.WebdavEntry;
|
||||||
|
import com.owncloud.android.lib.utils.FileUtils;
|
||||||
|
|
||||||
|
import android.os.Parcel;
|
||||||
|
import android.os.Parcelable;
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Contains the data of a Share Remote File from the Share API
|
||||||
|
*
|
||||||
|
* @author masensio
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class ShareRemoteFile extends RemoteFile {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generated - should be refreshed every time the class changes!!
|
||||||
|
*/
|
||||||
|
private static final long serialVersionUID = -5916376011588784325L;
|
||||||
|
|
||||||
|
private static final String TAG = ShareRemoteFile.class.getSimpleName();
|
||||||
|
|
||||||
|
private long mFileSource;
|
||||||
|
private long mItemSource;
|
||||||
|
private ShareType mShareType;
|
||||||
|
private String mShareWith;
|
||||||
|
private String mPath;
|
||||||
|
private int mPermissions;
|
||||||
|
private long mSharedDate;
|
||||||
|
private long mExpirationDate;
|
||||||
|
private String mToken;
|
||||||
|
private String mSharedWithDisplayName;
|
||||||
|
private boolean mIsDirectory;
|
||||||
|
private long mUserId;
|
||||||
|
private long mIdRemoteShared;
|
||||||
|
|
||||||
|
public ShareRemoteFile() {
|
||||||
|
super();
|
||||||
|
resetData();
|
||||||
|
}
|
||||||
|
|
||||||
|
public ShareRemoteFile(String path) {
|
||||||
|
super(path);
|
||||||
|
resetData();
|
||||||
|
if (path == null || path.length() <= 0 || !path.startsWith(FileUtils.PATH_SEPARATOR)) {
|
||||||
|
Log.e(TAG, "Trying to create a OCShare with a non valid path");
|
||||||
|
throw new IllegalArgumentException("Trying to create a OCShare with a non valid path: " + path);
|
||||||
|
}
|
||||||
|
mPath = path;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ShareRemoteFile(WebdavEntry we) {
|
||||||
|
super(we);
|
||||||
|
// TODO Auto-generated constructor stub
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used internally. Reset all file properties
|
||||||
|
*/
|
||||||
|
private void resetData() {
|
||||||
|
mFileSource = 0;
|
||||||
|
mItemSource = 0;
|
||||||
|
mShareType = ShareType.NO_SHARED;
|
||||||
|
mShareWith = null;
|
||||||
|
mPath = null;
|
||||||
|
mPermissions = -1;
|
||||||
|
mSharedDate = 0;
|
||||||
|
mExpirationDate = 0;
|
||||||
|
mToken = null;
|
||||||
|
mSharedWithDisplayName = null;
|
||||||
|
mIsDirectory = false;
|
||||||
|
mUserId = -1;
|
||||||
|
mIdRemoteShared = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Getters and Setters
|
||||||
|
public long getFileSource() {
|
||||||
|
return mFileSource;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFileSource(long fileSource) {
|
||||||
|
this.mFileSource = fileSource;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getItemSource() {
|
||||||
|
return mItemSource;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setItemSource(long itemSource) {
|
||||||
|
this.mItemSource = itemSource;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ShareType getShareType() {
|
||||||
|
return mShareType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setShareType(ShareType shareType) {
|
||||||
|
this.mShareType = shareType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getShareWith() {
|
||||||
|
return mShareWith;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setShareWith(String shareWith) {
|
||||||
|
this.mShareWith = shareWith;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPath() {
|
||||||
|
return mPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPath(String path) {
|
||||||
|
this.mPath = path;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getPermissions() {
|
||||||
|
return mPermissions;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPermissions(int permissions) {
|
||||||
|
this.mPermissions = permissions;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getSharedDate() {
|
||||||
|
return mSharedDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSharedDate(long sharedDate) {
|
||||||
|
this.mSharedDate = sharedDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getExpirationDate() {
|
||||||
|
return mExpirationDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setExpirationDate(long expirationDate) {
|
||||||
|
this.mExpirationDate = expirationDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getToken() {
|
||||||
|
return mToken;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setToken(String token) {
|
||||||
|
this.mToken = token;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSharedWithDisplayName() {
|
||||||
|
return mSharedWithDisplayName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSharedWithDisplayName(String sharedWithDisplayName) {
|
||||||
|
this.mSharedWithDisplayName = sharedWithDisplayName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isDirectory() {
|
||||||
|
return mIsDirectory;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setIsDirectory(boolean isDirectory) {
|
||||||
|
this.mIsDirectory = isDirectory;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getUserId() {
|
||||||
|
return mUserId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUserId(long userId) {
|
||||||
|
this.mUserId = userId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getIdRemoteShared() {
|
||||||
|
return mIdRemoteShared;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setIdRemoteShared(long idRemoteShared) {
|
||||||
|
this.mIdRemoteShared = idRemoteShared;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parcelable Methods
|
||||||
|
*/
|
||||||
|
public static final Parcelable.Creator<ShareRemoteFile> CREATOR = new Parcelable.Creator<ShareRemoteFile>() {
|
||||||
|
@Override
|
||||||
|
public ShareRemoteFile createFromParcel(Parcel source) {
|
||||||
|
return new ShareRemoteFile(source);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ShareRemoteFile[] newArray(int size) {
|
||||||
|
return new ShareRemoteFile[size];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reconstruct from parcel
|
||||||
|
*
|
||||||
|
* @param source The source parcel
|
||||||
|
*/
|
||||||
|
protected ShareRemoteFile(Parcel source) {
|
||||||
|
super(source);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void readFromParcel(Parcel source) {
|
||||||
|
super.readFromParcel(source);
|
||||||
|
|
||||||
|
mFileSource = source.readLong();
|
||||||
|
mItemSource = source.readLong();
|
||||||
|
try {
|
||||||
|
mShareType = ShareType.valueOf(source.readString());
|
||||||
|
} catch (IllegalArgumentException x) {
|
||||||
|
mShareType = ShareType.NO_SHARED;
|
||||||
|
}
|
||||||
|
mShareWith = source.readString();
|
||||||
|
mPath = source.readString();
|
||||||
|
mPermissions = source.readInt();
|
||||||
|
mSharedDate = source.readLong();
|
||||||
|
mExpirationDate = source.readLong();
|
||||||
|
mToken = source.readString();
|
||||||
|
mSharedWithDisplayName = source.readString();
|
||||||
|
mIsDirectory = source.readInt() == 0;
|
||||||
|
mUserId = source.readLong();
|
||||||
|
mIdRemoteShared = source.readLong();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void writeToParcel(Parcel dest, int flags) {
|
||||||
|
super.writeToParcel(dest, flags);
|
||||||
|
|
||||||
|
dest.writeLong(mFileSource);
|
||||||
|
dest.writeLong(mItemSource);
|
||||||
|
dest.writeString((mShareType == null) ? "" : mShareType.name());
|
||||||
|
dest.writeString(mShareWith);
|
||||||
|
dest.writeString(mPath);
|
||||||
|
dest.writeInt(mPermissions);
|
||||||
|
dest.writeLong(mSharedDate);
|
||||||
|
dest.writeLong(mExpirationDate);
|
||||||
|
dest.writeString(mToken);
|
||||||
|
dest.writeString(mSharedWithDisplayName);
|
||||||
|
dest.writeInt(mIsDirectory ? 1 : 0);
|
||||||
|
dest.writeLong(mUserId);
|
||||||
|
dest.writeLong(mIdRemoteShared);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,78 @@
|
|||||||
|
/* ownCloud Android Library is available under MIT license
|
||||||
|
* Copyright (C) 2014 ownCloud (http://www.owncloud.org/)
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
||||||
|
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
||||||
|
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.owncloud.android.lib.operations.common;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enum for Share Type, with values:
|
||||||
|
* -1 - No shared
|
||||||
|
* 0 - Shared by user
|
||||||
|
* 1 - Shared by group
|
||||||
|
* 3 - Shared by public link
|
||||||
|
* 4 - Shared by e-mail
|
||||||
|
* 5 - Shared by contact
|
||||||
|
*
|
||||||
|
* @author masensio
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
public enum ShareType {
|
||||||
|
NO_SHARED (-1),
|
||||||
|
USER (0),
|
||||||
|
GROUP (1),
|
||||||
|
PUBLIC_LINK (3),
|
||||||
|
EMAIL (4),
|
||||||
|
CONTACT (5);
|
||||||
|
|
||||||
|
private int value;
|
||||||
|
|
||||||
|
private ShareType(int value)
|
||||||
|
{
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getValue() {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ShareType fromValue(int value)
|
||||||
|
{
|
||||||
|
switch (value)
|
||||||
|
{
|
||||||
|
case -1:
|
||||||
|
return NO_SHARED;
|
||||||
|
case 0:
|
||||||
|
return USER;
|
||||||
|
case 1:
|
||||||
|
return GROUP;
|
||||||
|
case 3:
|
||||||
|
return PUBLIC_LINK;
|
||||||
|
case 4:
|
||||||
|
return EMAIL;
|
||||||
|
case 5:
|
||||||
|
return CONTACT;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
};
|
@ -0,0 +1,120 @@
|
|||||||
|
/* ownCloud Android Library is available under MIT license
|
||||||
|
* Copyright (C) 2014 ownCloud (http://www.owncloud.org/)
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
||||||
|
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
||||||
|
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.owncloud.android.lib.operations.remote;
|
||||||
|
|
||||||
|
import java.io.ByteArrayInputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
import org.apache.commons.httpclient.HttpException;
|
||||||
|
import org.apache.commons.httpclient.methods.GetMethod;
|
||||||
|
import org.apache.http.HttpStatus;
|
||||||
|
import org.xmlpull.v1.XmlPullParserException;
|
||||||
|
|
||||||
|
import com.owncloud.android.lib.network.OwnCloudClient;
|
||||||
|
import com.owncloud.android.lib.operations.common.RemoteOperation;
|
||||||
|
import com.owncloud.android.lib.operations.common.RemoteOperationResult;
|
||||||
|
import com.owncloud.android.lib.operations.common.RemoteOperationResult.ResultCode;
|
||||||
|
import com.owncloud.android.lib.operations.common.ShareRemoteFile;
|
||||||
|
import com.owncloud.android.lib.utils.ShareXMLParser;
|
||||||
|
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the data from the server to know shared files/folders
|
||||||
|
*
|
||||||
|
* @author masensio
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class GetRemoteSharedFilesOperation extends RemoteOperation {
|
||||||
|
|
||||||
|
private static final String TAG = GetRemoteSharedFilesOperation.class.getSimpleName();
|
||||||
|
|
||||||
|
// OCS Route
|
||||||
|
private static final String SHAREAPI_ROUTE ="/ocs/v1.php/apps/files_sharing/api/v1/shares";
|
||||||
|
|
||||||
|
private ArrayList<ShareRemoteFile> mSharedFiles; // List of files for result
|
||||||
|
|
||||||
|
private String mUrlServer;
|
||||||
|
|
||||||
|
public ArrayList<ShareRemoteFile> getSharedFiles() {
|
||||||
|
return mSharedFiles;
|
||||||
|
}
|
||||||
|
|
||||||
|
public GetRemoteSharedFilesOperation(String urlServer) {
|
||||||
|
mUrlServer = urlServer;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected RemoteOperationResult run(OwnCloudClient client) {
|
||||||
|
RemoteOperationResult result = null;
|
||||||
|
int status = -1;
|
||||||
|
|
||||||
|
// Get Method
|
||||||
|
GetMethod get = new GetMethod(mUrlServer + SHAREAPI_ROUTE);
|
||||||
|
Log.d(TAG, "URL ------> " + mUrlServer + SHAREAPI_ROUTE);
|
||||||
|
|
||||||
|
// Get the response
|
||||||
|
try{
|
||||||
|
status = client.executeMethod(get);
|
||||||
|
if(isSuccess(status)) {
|
||||||
|
Log.d(TAG, "Obtain RESPONSE");
|
||||||
|
String response = get.getResponseBodyAsString();
|
||||||
|
Log.d(TAG, response);
|
||||||
|
|
||||||
|
// Parse xml response --> obtain the response in ShareFiles ArrayList
|
||||||
|
// convert String into InputStream
|
||||||
|
InputStream is = new ByteArrayInputStream(response.getBytes());
|
||||||
|
ShareXMLParser xmlParser = new ShareXMLParser();
|
||||||
|
mSharedFiles = xmlParser.parseXMLResponse(is);
|
||||||
|
if (mSharedFiles != null) {
|
||||||
|
Log.d(TAG, "Shared Files: " + mSharedFiles.size());
|
||||||
|
result = new RemoteOperationResult(ResultCode.OK);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (HttpException e) {
|
||||||
|
result = new RemoteOperationResult(e);
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (IOException e) {
|
||||||
|
result = new RemoteOperationResult(e);
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (XmlPullParserException e) {
|
||||||
|
result = new RemoteOperationResult(e);
|
||||||
|
e.printStackTrace();
|
||||||
|
} finally {
|
||||||
|
get.releaseConnection();
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isSuccess(int status) {
|
||||||
|
return (status == HttpStatus.SC_OK);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,172 @@
|
|||||||
|
/* ownCloud Android Library is available under MIT license
|
||||||
|
* Copyright (C) 2014 ownCloud (http://www.owncloud.org/)
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
||||||
|
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
||||||
|
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.owncloud.android.lib.operations.remote;
|
||||||
|
|
||||||
|
import org.apache.commons.httpclient.HttpStatus;
|
||||||
|
import org.apache.commons.httpclient.methods.GetMethod;
|
||||||
|
import org.json.JSONException;
|
||||||
|
import org.json.JSONObject;
|
||||||
|
|
||||||
|
import com.owncloud.android.lib.accounts.AccountUtils;
|
||||||
|
import com.owncloud.android.lib.network.OwnCloudClient;
|
||||||
|
import com.owncloud.android.lib.operations.common.RemoteOperation;
|
||||||
|
import com.owncloud.android.lib.operations.common.RemoteOperationResult;
|
||||||
|
import com.owncloud.android.lib.utils.OwnCloudVersion;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.net.ConnectivityManager;
|
||||||
|
import android.net.Uri;
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if the server is valid and if the server supports the Share API
|
||||||
|
*
|
||||||
|
* @author David A. Velasco
|
||||||
|
* @author masensio
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class OwnCloudServerCheckOperation extends RemoteOperation {
|
||||||
|
|
||||||
|
/** Maximum time to wait for a response from the server when the connection is being tested, in MILLISECONDs. */
|
||||||
|
public static final int TRY_CONNECTION_TIMEOUT = 5000;
|
||||||
|
|
||||||
|
private static final String TAG = OwnCloudServerCheckOperation.class.getSimpleName();
|
||||||
|
|
||||||
|
private static final String OCVERSION_SHARED_SUPPORTED = "5.0.13";
|
||||||
|
|
||||||
|
private static final String NODE_INSTALLED = "installed";
|
||||||
|
private static final String NODE_VERSION = "version";
|
||||||
|
private static final String NODE_VERSIONSTRING = "versionstring";
|
||||||
|
|
||||||
|
private String mUrl;
|
||||||
|
private RemoteOperationResult mLatestResult;
|
||||||
|
private Context mContext;
|
||||||
|
private OwnCloudVersion mOCVersion;
|
||||||
|
private OwnCloudVersion mOCVersionString;
|
||||||
|
|
||||||
|
public OwnCloudServerCheckOperation(String url, Context context) {
|
||||||
|
mUrl = url;
|
||||||
|
mContext = context;
|
||||||
|
mOCVersion = null;
|
||||||
|
mOCVersionString = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public OwnCloudVersion getDiscoveredVersion() {
|
||||||
|
return mOCVersion;
|
||||||
|
}
|
||||||
|
public boolean isSharedSupported() {
|
||||||
|
OwnCloudVersion shareServer = new OwnCloudVersion(OCVERSION_SHARED_SUPPORTED);
|
||||||
|
if (mOCVersionString != null) {
|
||||||
|
return mOCVersionString.compareTo(shareServer) >= 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean tryConnection(OwnCloudClient wc, String urlSt) {
|
||||||
|
boolean retval = false;
|
||||||
|
GetMethod get = null;
|
||||||
|
try {
|
||||||
|
get = new GetMethod(urlSt);
|
||||||
|
int status = wc.executeMethod(get, TRY_CONNECTION_TIMEOUT, TRY_CONNECTION_TIMEOUT);
|
||||||
|
String response = get.getResponseBodyAsString();
|
||||||
|
if (status == HttpStatus.SC_OK) {
|
||||||
|
JSONObject json = new JSONObject(response);
|
||||||
|
if (!json.getBoolean(NODE_INSTALLED)) {
|
||||||
|
mLatestResult = new RemoteOperationResult(RemoteOperationResult.ResultCode.INSTANCE_NOT_CONFIGURED);
|
||||||
|
} else {
|
||||||
|
mOCVersion = new OwnCloudVersion(json.getString(NODE_VERSION));
|
||||||
|
mOCVersionString = new OwnCloudVersion(json.getString(NODE_VERSIONSTRING), true);
|
||||||
|
if (!mOCVersion.isVersionValid()) {
|
||||||
|
mLatestResult = new RemoteOperationResult(RemoteOperationResult.ResultCode.BAD_OC_VERSION);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
mLatestResult = new RemoteOperationResult(urlSt.startsWith("https://") ?
|
||||||
|
RemoteOperationResult.ResultCode.OK_SSL :
|
||||||
|
RemoteOperationResult.ResultCode.OK_NO_SSL
|
||||||
|
);
|
||||||
|
|
||||||
|
retval = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
mLatestResult = new RemoteOperationResult(false, status, get.getResponseHeaders());
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (JSONException e) {
|
||||||
|
mLatestResult = new RemoteOperationResult(RemoteOperationResult.ResultCode.INSTANCE_NOT_CONFIGURED);
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
mLatestResult = new RemoteOperationResult(e);
|
||||||
|
|
||||||
|
} finally {
|
||||||
|
if (get != null)
|
||||||
|
get.releaseConnection();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mLatestResult.isSuccess()) {
|
||||||
|
Log.i(TAG, "Connection check at " + urlSt + ": " + mLatestResult.getLogMessage());
|
||||||
|
|
||||||
|
} else if (mLatestResult.getException() != null) {
|
||||||
|
Log.e(TAG, "Connection check at " + urlSt + ": " + mLatestResult.getLogMessage(), mLatestResult.getException());
|
||||||
|
|
||||||
|
} else {
|
||||||
|
Log.e(TAG, "Connection check at " + urlSt + ": " + mLatestResult.getLogMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isOnline() {
|
||||||
|
ConnectivityManager cm = (ConnectivityManager) mContext
|
||||||
|
.getSystemService(Context.CONNECTIVITY_SERVICE);
|
||||||
|
return cm != null && cm.getActiveNetworkInfo() != null
|
||||||
|
&& cm.getActiveNetworkInfo().isConnectedOrConnecting();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected RemoteOperationResult run(OwnCloudClient client) {
|
||||||
|
if (!isOnline()) {
|
||||||
|
return new RemoteOperationResult(RemoteOperationResult.ResultCode.NO_NETWORK_CONNECTION);
|
||||||
|
}
|
||||||
|
if (mUrl.startsWith("http://") || mUrl.startsWith("https://")) {
|
||||||
|
tryConnection(client, mUrl + AccountUtils.STATUS_PATH);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
client.setBaseUri(Uri.parse("https://" + mUrl + AccountUtils.STATUS_PATH));
|
||||||
|
boolean httpsSuccess = tryConnection(client, "https://" + mUrl + AccountUtils.STATUS_PATH);
|
||||||
|
if (!httpsSuccess && !mLatestResult.isSslRecoverableException()) {
|
||||||
|
Log.d(TAG, "establishing secure connection failed, trying non secure connection");
|
||||||
|
client.setBaseUri(Uri.parse("http://" + mUrl + AccountUtils.STATUS_PATH));
|
||||||
|
tryConnection(client, "http://" + mUrl + AccountUtils.STATUS_PATH);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return mLatestResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -55,6 +55,17 @@ public class OwnCloudVersion implements Comparable<OwnCloudVersion> {
|
|||||||
parseVersionString(version);
|
parseVersionString(version);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public OwnCloudVersion(String versionstring, boolean isVersionString) {
|
||||||
|
mVersion = 0;
|
||||||
|
mIsValid = false;
|
||||||
|
if (isVersionString) {
|
||||||
|
parseVersionString(versionstring);
|
||||||
|
} else {
|
||||||
|
parseVersion(versionstring);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return ((mVersion >> 16) % 256) + "." + ((mVersion >> 8) % 256) + "."
|
return ((mVersion >> 16) % 256) + "." + ((mVersion >> 8) % 256) + "."
|
||||||
+ ((mVersion) % 256);
|
+ ((mVersion) % 256);
|
||||||
@ -70,7 +81,7 @@ public class OwnCloudVersion implements Comparable<OwnCloudVersion> {
|
|||||||
: another.mVersion < mVersion ? 1 : -1;
|
: another.mVersion < mVersion ? 1 : -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void parseVersionString(String version) {
|
private void parseVersion(String version) {
|
||||||
try {
|
try {
|
||||||
String[] nums = version.split("\\.");
|
String[] nums = version.split("\\.");
|
||||||
if (nums.length > 0) {
|
if (nums.length > 0) {
|
||||||
@ -89,4 +100,26 @@ public class OwnCloudVersion implements Comparable<OwnCloudVersion> {
|
|||||||
mIsValid = false;
|
mIsValid = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void parseVersionString(String versionstring) {
|
||||||
|
try {
|
||||||
|
versionstring = versionstring.replaceAll("[^\\d.]", "");
|
||||||
|
|
||||||
|
String[] nums = versionstring.split("\\.");
|
||||||
|
if (nums.length > 0) {
|
||||||
|
mVersion += Integer.parseInt(nums[0]);
|
||||||
|
}
|
||||||
|
mVersion = mVersion << 8;
|
||||||
|
if (nums.length > 1) {
|
||||||
|
mVersion += Integer.parseInt(nums[1]);
|
||||||
|
}
|
||||||
|
mVersion = mVersion << 8;
|
||||||
|
if (nums.length > 2) {
|
||||||
|
mVersion += Integer.parseInt(nums[2]);
|
||||||
|
}
|
||||||
|
mIsValid = true;
|
||||||
|
} catch (Exception e) {
|
||||||
|
mIsValid = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
348
src/com/owncloud/android/lib/utils/ShareXMLParser.java
Normal file
348
src/com/owncloud/android/lib/utils/ShareXMLParser.java
Normal file
@ -0,0 +1,348 @@
|
|||||||
|
/* ownCloud Android Library is available under MIT license
|
||||||
|
* Copyright (C) 2014 ownCloud (http://www.owncloud.org/)
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
||||||
|
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
||||||
|
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.owncloud.android.lib.utils;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
import org.xmlpull.v1.XmlPullParser;
|
||||||
|
import org.xmlpull.v1.XmlPullParserException;
|
||||||
|
import org.xmlpull.v1.XmlPullParserFactory;
|
||||||
|
|
||||||
|
import android.util.Log;
|
||||||
|
import android.util.Xml;
|
||||||
|
|
||||||
|
import com.owncloud.android.lib.operations.common.ShareRemoteFile;
|
||||||
|
import com.owncloud.android.lib.operations.common.ShareType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parser for Share API Response
|
||||||
|
* @author masensio
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class ShareXMLParser {
|
||||||
|
|
||||||
|
private static final String TAG = ShareXMLParser.class.getSimpleName();
|
||||||
|
|
||||||
|
// No namespaces
|
||||||
|
private static final String ns = null;
|
||||||
|
|
||||||
|
// NODES for XML Parser
|
||||||
|
private static final String NODE_OCS = "ocs";
|
||||||
|
|
||||||
|
private static final String NODE_META = "meta";
|
||||||
|
private static final String NODE_STATUS = "status";
|
||||||
|
private static final String NODE_STATUS_CODE = "statuscode";
|
||||||
|
//private static final String NODE_MESSAGE = "message";
|
||||||
|
|
||||||
|
private static final String NODE_DATA = "data";
|
||||||
|
private static final String NODE_ELEMENT = "element";
|
||||||
|
private static final String NODE_ID = "id";
|
||||||
|
private static final String NODE_ITEM_TYPE = "item_type";
|
||||||
|
private static final String NODE_ITEM_SOURCE = "item_source";
|
||||||
|
private static final String NODE_PARENT = "parent";
|
||||||
|
private static final String NODE_SHARE_TYPE = "share_type";
|
||||||
|
private static final String NODE_SHARE_WITH = "share_with";
|
||||||
|
private static final String NODE_FILE_SOURCE = "file_source";
|
||||||
|
private static final String NODE_PATH = "path";
|
||||||
|
private static final String NODE_PERMISSIONS = "permissions";
|
||||||
|
private static final String NODE_STIME = "stime";
|
||||||
|
private static final String NODE_EXPIRATION = "expiration";
|
||||||
|
private static final String NODE_TOKEN = "token";
|
||||||
|
private static final String NODE_STORAGE = "storage";
|
||||||
|
private static final String NODE_MAIL_SEND = "mail_send";
|
||||||
|
private static final String NODE_SHARE_WITH_DISPLAY_NAME = "share_with_display_name";
|
||||||
|
|
||||||
|
private static final String TYPE_FOLDER = "folder";
|
||||||
|
|
||||||
|
private String mStatus;
|
||||||
|
private int mStatusCode;
|
||||||
|
|
||||||
|
// Getters and Setters
|
||||||
|
public String getStatus() {
|
||||||
|
return mStatus;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStatus(String status) {
|
||||||
|
this.mStatus = status;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getStatusCode() {
|
||||||
|
return mStatusCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStatusCode(int statusCode) {
|
||||||
|
this.mStatusCode = statusCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Constructor
|
||||||
|
public ShareXMLParser() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parse is as response of Share API
|
||||||
|
* @param is
|
||||||
|
* @return List of ShareRemoteFiles
|
||||||
|
* @throws XmlPullParserException
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
|
public ArrayList<ShareRemoteFile> parseXMLResponse(InputStream is) throws XmlPullParserException, IOException {
|
||||||
|
|
||||||
|
try {
|
||||||
|
// XMLPullParser
|
||||||
|
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
|
||||||
|
factory.setNamespaceAware(true);
|
||||||
|
|
||||||
|
XmlPullParser parser = Xml.newPullParser();
|
||||||
|
parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
|
||||||
|
parser.setInput(is, null);
|
||||||
|
parser.nextTag();
|
||||||
|
return readOCS(parser);
|
||||||
|
|
||||||
|
} finally {
|
||||||
|
is.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parse OCS node
|
||||||
|
* @param parser
|
||||||
|
* @return List of ShareRemoteFiles
|
||||||
|
* @throws XmlPullParserException
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
|
private ArrayList<ShareRemoteFile> readOCS (XmlPullParser parser) throws XmlPullParserException, IOException {
|
||||||
|
ArrayList<ShareRemoteFile> sharedFiles = new ArrayList<ShareRemoteFile>();
|
||||||
|
parser.require(XmlPullParser.START_TAG, ns , NODE_OCS);
|
||||||
|
while (parser.next() != XmlPullParser.END_TAG) {
|
||||||
|
if (parser.getEventType() != XmlPullParser.START_TAG) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
String name = parser.getName();
|
||||||
|
// read NODE_META and NODE_DATA
|
||||||
|
if (name.equalsIgnoreCase(NODE_META)) {
|
||||||
|
readMeta(parser);
|
||||||
|
} else if (name.equalsIgnoreCase(NODE_DATA)) {
|
||||||
|
sharedFiles = readData(parser);
|
||||||
|
} else {
|
||||||
|
skip(parser);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
return sharedFiles;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parse Meta node
|
||||||
|
* @param parser
|
||||||
|
* @throws XmlPullParserException
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
|
private void readMeta(XmlPullParser parser) throws XmlPullParserException, IOException {
|
||||||
|
parser.require(XmlPullParser.START_TAG, ns, NODE_META);
|
||||||
|
Log.d(TAG, "---- NODE META ---");
|
||||||
|
while (parser.next() != XmlPullParser.END_TAG) {
|
||||||
|
if (parser.getEventType() != XmlPullParser.START_TAG) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
String name = parser.getName();
|
||||||
|
|
||||||
|
if (name.equalsIgnoreCase(NODE_STATUS)) {
|
||||||
|
setStatus(readNode(parser, NODE_STATUS));
|
||||||
|
|
||||||
|
} else if (name.equalsIgnoreCase(NODE_STATUS_CODE)) {
|
||||||
|
setStatusCode(Integer.parseInt(readNode(parser, NODE_STATUS_CODE)));
|
||||||
|
|
||||||
|
} else {
|
||||||
|
skip(parser);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parse Data node
|
||||||
|
* @param parser
|
||||||
|
* @return
|
||||||
|
* @throws XmlPullParserException
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
|
private ArrayList<ShareRemoteFile> readData(XmlPullParser parser) throws XmlPullParserException, IOException {
|
||||||
|
ArrayList<ShareRemoteFile> sharedFiles = new ArrayList<ShareRemoteFile>();
|
||||||
|
|
||||||
|
parser.require(XmlPullParser.START_TAG, ns, NODE_DATA);
|
||||||
|
Log.d(TAG, "---- NODE DATA ---");
|
||||||
|
while (parser.next() != XmlPullParser.END_TAG) {
|
||||||
|
if (parser.getEventType() != XmlPullParser.START_TAG) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
String name = parser.getName();
|
||||||
|
if (name.equalsIgnoreCase(NODE_ELEMENT)) {
|
||||||
|
sharedFiles.add(readElement(parser));
|
||||||
|
} else {
|
||||||
|
skip(parser);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return sharedFiles;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parse Element node
|
||||||
|
* @param parser
|
||||||
|
* @return
|
||||||
|
* @throws XmlPullParserException
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
|
private ShareRemoteFile readElement(XmlPullParser parser) throws XmlPullParserException, IOException {
|
||||||
|
parser.require(XmlPullParser.START_TAG, ns, NODE_ELEMENT);
|
||||||
|
|
||||||
|
ShareRemoteFile sharedFile = new ShareRemoteFile();
|
||||||
|
|
||||||
|
Log.d(TAG, "---- NODE ELEMENT ---");
|
||||||
|
while (parser.next() != XmlPullParser.END_TAG) {
|
||||||
|
if (parser.getEventType() != XmlPullParser.START_TAG) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
String name = parser.getName();
|
||||||
|
|
||||||
|
if (name.equalsIgnoreCase(NODE_ID)) {
|
||||||
|
sharedFile.setIdRemoteShared(Integer.parseInt(readNode(parser, NODE_ID)));
|
||||||
|
|
||||||
|
} else if (name.equalsIgnoreCase(NODE_ITEM_TYPE)) {
|
||||||
|
sharedFile.setIsDirectory(readNode(parser, NODE_ITEM_TYPE).equalsIgnoreCase(TYPE_FOLDER));
|
||||||
|
|
||||||
|
} else if (name.equalsIgnoreCase(NODE_ITEM_SOURCE)) {
|
||||||
|
sharedFile.setItemSource(Long.parseLong(readNode(parser, NODE_ITEM_SOURCE)));
|
||||||
|
|
||||||
|
} else if (name.equalsIgnoreCase(NODE_PARENT)) {
|
||||||
|
readNode(parser, NODE_PARENT);
|
||||||
|
|
||||||
|
} else if (name.equalsIgnoreCase(NODE_SHARE_TYPE)) {
|
||||||
|
int value = Integer.parseInt(readNode(parser, NODE_SHARE_TYPE));
|
||||||
|
sharedFile.setShareType(ShareType.fromValue(value));
|
||||||
|
|
||||||
|
} else if (name.equalsIgnoreCase(NODE_SHARE_WITH)) {
|
||||||
|
sharedFile.setShareWith(readNode(parser, NODE_SHARE_WITH));
|
||||||
|
|
||||||
|
} else if (name.equalsIgnoreCase(NODE_FILE_SOURCE)) {
|
||||||
|
sharedFile.setFileSource(Long.parseLong(readNode(parser, NODE_FILE_SOURCE)));
|
||||||
|
|
||||||
|
} else if (name.equalsIgnoreCase(NODE_PATH)) {
|
||||||
|
sharedFile.setPath(readNode(parser, NODE_PATH));
|
||||||
|
|
||||||
|
} else if (name.equalsIgnoreCase(NODE_PERMISSIONS)) {
|
||||||
|
sharedFile.setPermissions(Integer.parseInt(readNode(parser, NODE_PERMISSIONS)));
|
||||||
|
|
||||||
|
} else if (name.equalsIgnoreCase(NODE_STIME)) {
|
||||||
|
sharedFile.setSharedDate(Long.parseLong(readNode(parser, NODE_STIME)));
|
||||||
|
|
||||||
|
} else if (name.equalsIgnoreCase(NODE_EXPIRATION)) {
|
||||||
|
String value = readNode(parser, NODE_EXPIRATION);
|
||||||
|
if (!value.isEmpty()) {
|
||||||
|
sharedFile.setExpirationDate(Long.parseLong(readNode(parser, NODE_EXPIRATION))); // check if expiration is in long format or date format
|
||||||
|
}
|
||||||
|
|
||||||
|
} else if (name.equalsIgnoreCase(NODE_TOKEN)) {
|
||||||
|
sharedFile.setToken(readNode(parser, NODE_TOKEN));
|
||||||
|
|
||||||
|
} else if (name.equalsIgnoreCase(NODE_STORAGE)) {
|
||||||
|
readNode(parser, NODE_STORAGE);
|
||||||
|
} else if (name.equalsIgnoreCase(NODE_MAIL_SEND)) {
|
||||||
|
readNode(parser, NODE_MAIL_SEND);
|
||||||
|
|
||||||
|
} else if (name.equalsIgnoreCase(NODE_SHARE_WITH_DISPLAY_NAME)) {
|
||||||
|
sharedFile.setSharedWithDisplayName(readNode(parser, NODE_SHARE_WITH_DISPLAY_NAME));
|
||||||
|
|
||||||
|
} else {
|
||||||
|
skip(parser);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return sharedFile;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parse a node, to obtain its text. Needs readText method
|
||||||
|
* @param parser
|
||||||
|
* @param node
|
||||||
|
* @return Text of the node
|
||||||
|
* @throws XmlPullParserException
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
|
private String readNode (XmlPullParser parser, String node) throws XmlPullParserException, IOException{
|
||||||
|
parser.require(XmlPullParser.START_TAG, ns, node);
|
||||||
|
String value = readText(parser);
|
||||||
|
Log.d(TAG, "node= " + node + ", value= " + value);
|
||||||
|
parser.require(XmlPullParser.END_TAG, ns, node);
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Read the text from a node
|
||||||
|
* @param parser
|
||||||
|
* @return Text of the node
|
||||||
|
* @throws IOException
|
||||||
|
* @throws XmlPullParserException
|
||||||
|
*/
|
||||||
|
private String readText(XmlPullParser parser) throws IOException, XmlPullParserException {
|
||||||
|
String result = "";
|
||||||
|
if (parser.next() == XmlPullParser.TEXT) {
|
||||||
|
result = parser.getText();
|
||||||
|
parser.nextTag();
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Skip tags in parser procedure
|
||||||
|
* @param parser
|
||||||
|
* @throws XmlPullParserException
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
|
private void skip(XmlPullParser parser) throws XmlPullParserException, IOException {
|
||||||
|
if (parser.getEventType() != XmlPullParser.START_TAG) {
|
||||||
|
throw new IllegalStateException();
|
||||||
|
}
|
||||||
|
int depth = 1;
|
||||||
|
while (depth != 0) {
|
||||||
|
switch (parser.next()) {
|
||||||
|
case XmlPullParser.END_TAG:
|
||||||
|
depth--;
|
||||||
|
break;
|
||||||
|
case XmlPullParser.START_TAG:
|
||||||
|
depth++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user