diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/GetRemoteShareesOperation.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/GetRemoteShareesOperation.java
index 611f2e8c..2a90128e 100644
--- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/GetRemoteShareesOperation.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/GetRemoteShareesOperation.java
@@ -47,24 +47,24 @@ import static com.owncloud.android.lib.common.operations.RemoteOperationResult.R
/**
* Created by masensio on 08/10/2015.
- *
+ *
* Retrieves a list of sharees (possible targets of a share) from the ownCloud server.
- *
+ *
* Currently only handles users and groups. Users in other OC servers (federation) should be added later.
- *
+ *
* Depends on SHAREE API. {@See https://github.com/owncloud/documentation/issues/1626}
- *
+ *
* Syntax:
- * Entry point: ocs/v2.php/apps/files_sharing/api/v1/sharees
- * HTTP method: GET
- * url argument: itemType - string, required
- * url argument: format - string, optional
- * url argument: search - string, optional
- * url arguments: perPage - int, optional
- * url arguments: page - int, optional
- *
+ * Entry point: ocs/v2.php/apps/files_sharing/api/v1/sharees
+ * HTTP method: GET
+ * url argument: itemType - string, required
+ * url argument: format - string, optional
+ * url argument: search - string, optional
+ * url arguments: perPage - int, optional
+ * url arguments: page - int, optional
+ *
* Status codes:
- * 100 - successful
+ * 100 - successful
*
* @author masensio
* @author David A. Velasco
@@ -108,9 +108,9 @@ public class GetRemoteShareesOperation extends RemoteOperation> run(OwnCloudClient client) {
RemoteOperationResult> result;
- try{
+ try {
Uri requestUri = client.getBaseUri();
Uri.Builder uriBuilder = requestUri.buildUpon()
.appendEncodedPath(OCS_ROUTE)
@@ -139,7 +139,7 @@ public class GetRemoteShareesOperation extends RemoteOperation data = new ArrayList<>(); // For result data
- for (int i=0; i<6; i++) {
- for(int j=0; j< jsonResults[i].length(); j++){
+ for (int i = 0; i < 6; i++) {
+ for (int j = 0; j < jsonResults[i].length(); j++) {
JSONObject jsonResult = jsonResults[i].getJSONObject(j);
data.add(jsonResult);
Log_OC.d(TAG, "*** Added item: " + jsonResult.getString(PROPERTY_LABEL));
@@ -174,7 +174,7 @@ public class GetRemoteShareesOperation extends RemoteOperation(OK);
result.setData(data);
- Log_OC.d(TAG, "*** Get Users or groups completed " );
+ Log_OC.d(TAG, "*** Get Users or groups completed ");
} else {
result = new RemoteOperationResult<>(getMethod);
diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/ShareXMLParser.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/ShareXMLParser.java
index bce07da5..a6265e1a 100644
--- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/ShareXMLParser.java
+++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/shares/ShareXMLParser.java
@@ -39,405 +39,414 @@ import java.util.ArrayList;
/**
* Parser for Share API Response
+ *
* @author masensio
* @author David González Verdugo
*/
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_displayname";
- private static final String NODE_SHARE_WITH_ADDITIONAL_INFO = "share_with_additional_info";
- private static final String NODE_NAME = "name";
-
- private static final String NODE_URL = "url";
-
- private static final String TYPE_FOLDER = "folder";
-
- private static final int SUCCESS = 200;
- private static final int ERROR_WRONG_PARAMETER = 400;
- private static final int ERROR_FORBIDDEN = 403;
- private static final int ERROR_NOT_FOUND = 404;
-
- private String mStatus;
- private int mStatusCode;
- private String mMessage;
-
- // 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;
- }
-
- public String getMessage() {
- return mMessage;
- }
-
- public void setMessage(String message) {
- this.mMessage = message;
- }
-
- // Constructor
- public ShareXMLParser() {
- mStatusCode = -1;
- }
-
- public boolean isSuccess() {
- return mStatusCode == SUCCESS;
- }
-
- public boolean isForbidden() {
- return mStatusCode == ERROR_FORBIDDEN;
- }
-
- public boolean isNotFound() {
- return mStatusCode == ERROR_NOT_FOUND;
- }
-
- public boolean isWrongParameter() {
- return mStatusCode == ERROR_WRONG_PARAMETER;
- }
-
- /**
- * Parse is as response of Share API
- * @param is
- * @return List of ShareRemoteFiles
- * @throws XmlPullParserException
- * @throws IOException
- */
- public ArrayList 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 readOCS (XmlPullParser parser) throws XmlPullParserException,
- IOException {
- ArrayList shares = new ArrayList<>();
- 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)) {
- shares = readData(parser);
- } else {
- skip(parser);
- }
-
- }
- return shares;
- }
-
- /**
- * 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_OC.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 if (name.equalsIgnoreCase(NODE_MESSAGE)) {
- setMessage(readNode(parser, NODE_MESSAGE));
-
- } else {
- skip(parser);
- }
-
- }
- }
-
- /**
- * Parse Data node
- * @param parser
- * @return
- * @throws XmlPullParserException
- * @throws IOException
- */
- private ArrayList readData(XmlPullParser parser) throws XmlPullParserException,
- IOException {
- ArrayList shares = new ArrayList();
- OCShare share = null;
-
- parser.require(XmlPullParser.START_TAG, ns, NODE_DATA);
- //Log_OC.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)) {
- readElement(parser, shares);
-
- } else if (name.equalsIgnoreCase(NODE_ID)) {// Parse Create XML Response
- share = new OCShare();
- String value = readNode(parser, NODE_ID);
- share.setIdRemoteShared(Integer.parseInt(value));
-
- } else if (name.equalsIgnoreCase(NODE_URL)) {
- // NOTE: this field is received in all the public shares from OC 9.0.0
- // in previous versions, it's received in the result of POST requests, but not
- // in GET requests
- share.setShareType(ShareType.PUBLIC_LINK);
- String value = readNode(parser, NODE_URL);
- share.setShareLink(value);
-
- } else if (name.equalsIgnoreCase(NODE_TOKEN)) {
- share.setToken(readNode(parser, NODE_TOKEN));
-
- } else {
- skip(parser);
-
- }
- }
-
- if (share != null) {
- // this is the response of a request for creation; don't pass to isValidShare()
- shares.add(share);
- }
-
- return shares;
-
- }
-
-
- /**
- * Parse Element node
- * @param parser
- * @return
- * @throws XmlPullParserException
- * @throws IOException
- */
- private void readElement(XmlPullParser parser, ArrayList shares)
- throws XmlPullParserException, IOException {
- parser.require(XmlPullParser.START_TAG, ns, NODE_ELEMENT);
-
- OCShare share = new OCShare();
-
- //Log_OC.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_ELEMENT)) {
- // patch to work around servers responding with extra surrounding all
- // the shares on the same file before
- // https://github.com/owncloud/core/issues/6992 was fixed
- readElement(parser, shares);
-
- } else if (name.equalsIgnoreCase(NODE_ID)) {
- share.setIdRemoteShared(Integer.parseInt(readNode(parser, NODE_ID)));
-
- } else if (name.equalsIgnoreCase(NODE_ITEM_TYPE)) {
- share.setIsFolder(readNode(parser, NODE_ITEM_TYPE).equalsIgnoreCase(TYPE_FOLDER));
- fixPathForFolder(share);
-
- } else if (name.equalsIgnoreCase(NODE_ITEM_SOURCE)) {
- share.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));
- share.setShareType(ShareType.fromValue(value));
-
- } else if (name.equalsIgnoreCase(NODE_SHARE_WITH)) {
- share.setShareWith(readNode(parser, NODE_SHARE_WITH));
-
- } else if (name.equalsIgnoreCase(NODE_FILE_SOURCE)) {
- share.setFileSource(Long.parseLong(readNode(parser, NODE_FILE_SOURCE)));
-
- } else if (name.equalsIgnoreCase(NODE_PATH)) {
- share.setPath(readNode(parser, NODE_PATH));
- fixPathForFolder(share);
-
- } else if (name.equalsIgnoreCase(NODE_PERMISSIONS)) {
- share.setPermissions(Integer.parseInt(readNode(parser, NODE_PERMISSIONS)));
-
- } else if (name.equalsIgnoreCase(NODE_STIME)) {
- share.setSharedDate(Long.parseLong(readNode(parser, NODE_STIME)));
-
- } else if (name.equalsIgnoreCase(NODE_EXPIRATION)) {
- String value = readNode(parser, NODE_EXPIRATION);
- if (!(value.length() == 0)) {
- share.setExpirationDate(WebdavUtils.parseResponseDate(value).getTime());
- }
-
- } else if (name.equalsIgnoreCase(NODE_TOKEN)) {
- share.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)) {
- share.setSharedWithDisplayName(readNode(parser, NODE_SHARE_WITH_DISPLAY_NAME));
-
- } else if (name.equalsIgnoreCase(NODE_SHARE_WITH_ADDITIONAL_INFO)) {
- share.setSharedWithAdditionalInfo(readNode(parser, NODE_SHARE_WITH_ADDITIONAL_INFO));
-
- } else if (name.equalsIgnoreCase(NODE_URL)) {
- String value = readNode(parser, NODE_URL);
- share.setShareLink(value);
-
- } else if (name.equalsIgnoreCase(NODE_NAME)) {
- share.setName(readNode(parser, NODE_NAME));
-
- } else {
- skip(parser);
- }
- }
-
- if (isValidShare(share)) {
- shares.add(share);
- }
- }
-
- private boolean isValidShare(OCShare share) {
- return (share.getRemoteId() > -1);
- }
-
- private void fixPathForFolder(OCShare share) {
- if (share.isFolder() && share.getPath() != null && share.getPath().length() > 0 &&
- !share.getPath().endsWith(FileUtils.PATH_SEPARATOR)) {
- share.setPath(share.getPath() + FileUtils.PATH_SEPARATOR);
- }
- }
-
- /**
- * 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_OC.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;
- }
- }
- }
+ //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_displayname";
+ private static final String NODE_SHARE_WITH_ADDITIONAL_INFO = "share_with_additional_info";
+ private static final String NODE_NAME = "name";
+
+ private static final String NODE_URL = "url";
+
+ private static final String TYPE_FOLDER = "folder";
+
+ private static final int SUCCESS = 200;
+ private static final int ERROR_WRONG_PARAMETER = 400;
+ private static final int ERROR_FORBIDDEN = 403;
+ private static final int ERROR_NOT_FOUND = 404;
+
+ private String mStatus;
+ private int mStatusCode;
+ private String mMessage;
+
+ // 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;
+ }
+
+ public String getMessage() {
+ return mMessage;
+ }
+
+ public void setMessage(String message) {
+ this.mMessage = message;
+ }
+
+ // Constructor
+ public ShareXMLParser() {
+ mStatusCode = -1;
+ }
+
+ public boolean isSuccess() {
+ return mStatusCode == SUCCESS;
+ }
+
+ public boolean isForbidden() {
+ return mStatusCode == ERROR_FORBIDDEN;
+ }
+
+ public boolean isNotFound() {
+ return mStatusCode == ERROR_NOT_FOUND;
+ }
+
+ public boolean isWrongParameter() {
+ return mStatusCode == ERROR_WRONG_PARAMETER;
+ }
+
+ /**
+ * Parse is as response of Share API
+ *
+ * @param is
+ * @return List of ShareRemoteFiles
+ * @throws XmlPullParserException
+ * @throws IOException
+ */
+ public ArrayList 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 readOCS(XmlPullParser parser) throws XmlPullParserException,
+ IOException {
+ ArrayList shares = new ArrayList<>();
+ 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)) {
+ shares = readData(parser);
+ } else {
+ skip(parser);
+ }
+
+ }
+ return shares;
+ }
+
+ /**
+ * 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_OC.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 if (name.equalsIgnoreCase(NODE_MESSAGE)) {
+ setMessage(readNode(parser, NODE_MESSAGE));
+
+ } else {
+ skip(parser);
+ }
+
+ }
+ }
+
+ /**
+ * Parse Data node
+ *
+ * @param parser
+ * @return
+ * @throws XmlPullParserException
+ * @throws IOException
+ */
+ private ArrayList readData(XmlPullParser parser) throws XmlPullParserException,
+ IOException {
+ ArrayList shares = new ArrayList();
+ OCShare share = null;
+
+ parser.require(XmlPullParser.START_TAG, ns, NODE_DATA);
+ //Log_OC.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)) {
+ readElement(parser, shares);
+
+ } else if (name.equalsIgnoreCase(NODE_ID)) {// Parse Create XML Response
+ share = new OCShare();
+ String value = readNode(parser, NODE_ID);
+ share.setIdRemoteShared(Integer.parseInt(value));
+
+ } else if (name.equalsIgnoreCase(NODE_URL)) {
+ // NOTE: this field is received in all the public shares from OC 9.0.0
+ // in previous versions, it's received in the result of POST requests, but not
+ // in GET requests
+ share.setShareType(ShareType.PUBLIC_LINK);
+ String value = readNode(parser, NODE_URL);
+ share.setShareLink(value);
+
+ } else if (name.equalsIgnoreCase(NODE_TOKEN)) {
+ share.setToken(readNode(parser, NODE_TOKEN));
+
+ } else {
+ skip(parser);
+
+ }
+ }
+
+ if (share != null) {
+ // this is the response of a request for creation; don't pass to isValidShare()
+ shares.add(share);
+ }
+
+ return shares;
+
+ }
+
+
+ /**
+ * Parse Element node
+ *
+ * @param parser
+ * @return
+ * @throws XmlPullParserException
+ * @throws IOException
+ */
+ private void readElement(XmlPullParser parser, ArrayList shares)
+ throws XmlPullParserException, IOException {
+ parser.require(XmlPullParser.START_TAG, ns, NODE_ELEMENT);
+
+ OCShare share = new OCShare();
+
+ //Log_OC.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_ELEMENT)) {
+ // patch to work around servers responding with extra surrounding all
+ // the shares on the same file before
+ // https://github.com/owncloud/core/issues/6992 was fixed
+ readElement(parser, shares);
+
+ } else if (name.equalsIgnoreCase(NODE_ID)) {
+ share.setIdRemoteShared(Integer.parseInt(readNode(parser, NODE_ID)));
+
+ } else if (name.equalsIgnoreCase(NODE_ITEM_TYPE)) {
+ share.setIsFolder(readNode(parser, NODE_ITEM_TYPE).equalsIgnoreCase(TYPE_FOLDER));
+ fixPathForFolder(share);
+
+ } else if (name.equalsIgnoreCase(NODE_ITEM_SOURCE)) {
+ share.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));
+ share.setShareType(ShareType.fromValue(value));
+
+ } else if (name.equalsIgnoreCase(NODE_SHARE_WITH)) {
+ share.setShareWith(readNode(parser, NODE_SHARE_WITH));
+
+ } else if (name.equalsIgnoreCase(NODE_FILE_SOURCE)) {
+ share.setFileSource(Long.parseLong(readNode(parser, NODE_FILE_SOURCE)));
+
+ } else if (name.equalsIgnoreCase(NODE_PATH)) {
+ share.setPath(readNode(parser, NODE_PATH));
+ fixPathForFolder(share);
+
+ } else if (name.equalsIgnoreCase(NODE_PERMISSIONS)) {
+ share.setPermissions(Integer.parseInt(readNode(parser, NODE_PERMISSIONS)));
+
+ } else if (name.equalsIgnoreCase(NODE_STIME)) {
+ share.setSharedDate(Long.parseLong(readNode(parser, NODE_STIME)));
+
+ } else if (name.equalsIgnoreCase(NODE_EXPIRATION)) {
+ String value = readNode(parser, NODE_EXPIRATION);
+ if (!(value.length() == 0)) {
+ share.setExpirationDate(WebdavUtils.parseResponseDate(value).getTime());
+ }
+
+ } else if (name.equalsIgnoreCase(NODE_TOKEN)) {
+ share.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)) {
+ share.setSharedWithDisplayName(readNode(parser, NODE_SHARE_WITH_DISPLAY_NAME));
+
+ } else if (name.equalsIgnoreCase(NODE_SHARE_WITH_ADDITIONAL_INFO)) {
+ share.setSharedWithAdditionalInfo(readNode(parser, NODE_SHARE_WITH_ADDITIONAL_INFO));
+
+ } else if (name.equalsIgnoreCase(NODE_URL)) {
+ String value = readNode(parser, NODE_URL);
+ share.setShareLink(value);
+
+ } else if (name.equalsIgnoreCase(NODE_NAME)) {
+ share.setName(readNode(parser, NODE_NAME));
+
+ } else {
+ skip(parser);
+ }
+ }
+
+ if (isValidShare(share)) {
+ shares.add(share);
+ }
+ }
+
+ private boolean isValidShare(OCShare share) {
+ return (share.getRemoteId() > -1);
+ }
+
+ private void fixPathForFolder(OCShare share) {
+ if (share.isFolder() && share.getPath() != null && share.getPath().length() > 0 &&
+ !share.getPath().endsWith(FileUtils.PATH_SEPARATOR)) {
+ share.setPath(share.getPath() + FileUtils.PATH_SEPARATOR);
+ }
+ }
+
+ /**
+ * 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_OC.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;
+ }
+ }
+ }
}
\ No newline at end of file