From b7c136286e8f2ef17f99da891f3e9fc600c25aed Mon Sep 17 00:00:00 2001 From: masensio Date: Tue, 18 Mar 2014 12:17:20 +0100 Subject: [PATCH 1/6] Fix problem with expiration value in ShareXMLParser --- .../owncloud/android/lib/resources/shares/ShareXMLParser.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/owncloud/android/lib/resources/shares/ShareXMLParser.java b/src/com/owncloud/android/lib/resources/shares/ShareXMLParser.java index 335424e7..18647abc 100644 --- a/src/com/owncloud/android/lib/resources/shares/ShareXMLParser.java +++ b/src/com/owncloud/android/lib/resources/shares/ShareXMLParser.java @@ -311,7 +311,7 @@ public class ShareXMLParser { } else if (name.equalsIgnoreCase(NODE_EXPIRATION)) { String value = readNode(parser, NODE_EXPIRATION); - if (!value.isEmpty()) { + if (!(value.length() == 0)) { share.setExpirationDate(Long.parseLong(readNode(parser, NODE_EXPIRATION))); // check if expiration is in long format or date format } From ebe9c9fe923ec913731b9731029211a662e5b4e1 Mon Sep 17 00:00:00 2001 From: masensio Date: Wed, 19 Mar 2014 17:42:52 +0100 Subject: [PATCH 2/6] Fix a problem in ShareXMLParser.java, with the expitation date --- .../lib/resources/shares/ShareXMLParser.java | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/com/owncloud/android/lib/resources/shares/ShareXMLParser.java b/src/com/owncloud/android/lib/resources/shares/ShareXMLParser.java index 18647abc..58cc8246 100644 --- a/src/com/owncloud/android/lib/resources/shares/ShareXMLParser.java +++ b/src/com/owncloud/android/lib/resources/shares/ShareXMLParser.java @@ -26,7 +26,10 @@ package com.owncloud.android.lib.resources.shares; import java.io.IOException; import java.io.InputStream; +import java.text.ParseException; +import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Date; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; @@ -80,6 +83,8 @@ public class ShareXMLParser { private static final String TYPE_FOLDER = "folder"; + private static final String DATE_FORMAT = "yyyy-MM-dd hh:mm:ss"; + private static final int SUCCESS = 100; private static final int FAILURE = 403; private static final int FILE_NOT_FOUND = 404; @@ -312,7 +317,7 @@ public class ShareXMLParser { } else if (name.equalsIgnoreCase(NODE_EXPIRATION)) { String value = readNode(parser, NODE_EXPIRATION); if (!(value.length() == 0)) { - share.setExpirationDate(Long.parseLong(readNode(parser, NODE_EXPIRATION))); // check if expiration is in long format or date format + share.setExpirationDate(convertToDate(value).getTime()); //Long.parseLong(readNode(parser, NODE_EXPIRATION))); // check if expiration is in long format or date format } } else if (name.equalsIgnoreCase(NODE_TOKEN)) { @@ -402,4 +407,20 @@ public class ShareXMLParser { } } } + + /** + * Convert String to Date + * @param dateString + * @return + */ + private Date convertToDate(String dateString){ + SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT); + Date convertedDate = new Date(); + try { + convertedDate = dateFormat.parse(dateString); + } catch (ParseException e) { + e.printStackTrace(); + } + return convertedDate; + } } From ff4dd08dd5ac79ef2ce200d033182773f9dc36b1 Mon Sep 17 00:00:00 2001 From: masensio Date: Thu, 20 Mar 2014 09:25:14 +0100 Subject: [PATCH 3/6] Use WebdavUtils.parseResponseDate for parsing expiration date in ShareXMLParser --- .../lib/common/network/WebdavUtils.java | 3 ++- .../lib/resources/shares/ShareXMLParser.java | 25 +++---------------- 2 files changed, 5 insertions(+), 23 deletions(-) diff --git a/src/com/owncloud/android/lib/common/network/WebdavUtils.java b/src/com/owncloud/android/lib/common/network/WebdavUtils.java index 33ebf5c0..d64042bf 100644 --- a/src/com/owncloud/android/lib/common/network/WebdavUtils.java +++ b/src/com/owncloud/android/lib/common/network/WebdavUtils.java @@ -42,7 +42,8 @@ public class WebdavUtils { new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ", Locale.US), new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.US), new SimpleDateFormat("EEEEEE, dd-MMM-yy HH:mm:ss zzz", Locale.US), - new SimpleDateFormat("EEE MMMM d HH:mm:ss yyyy", Locale.US) }; + new SimpleDateFormat("EEE MMMM d HH:mm:ss yyyy", Locale.US) , + new SimpleDateFormat("yyyy-MM-dd hh:mm:ss") }; public static String prepareXmlForPropFind() { String ret = ""; diff --git a/src/com/owncloud/android/lib/resources/shares/ShareXMLParser.java b/src/com/owncloud/android/lib/resources/shares/ShareXMLParser.java index 58cc8246..c48cf9ba 100644 --- a/src/com/owncloud/android/lib/resources/shares/ShareXMLParser.java +++ b/src/com/owncloud/android/lib/resources/shares/ShareXMLParser.java @@ -26,10 +26,7 @@ package com.owncloud.android.lib.resources.shares; import java.io.IOException; import java.io.InputStream; -import java.text.ParseException; -import java.text.SimpleDateFormat; import java.util.ArrayList; -import java.util.Date; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; @@ -38,6 +35,7 @@ import org.xmlpull.v1.XmlPullParserFactory; import android.util.Log; import android.util.Xml; +import com.owncloud.android.lib.common.network.WebdavUtils; import com.owncloud.android.lib.resources.files.FileUtils; /** @@ -83,8 +81,6 @@ public class ShareXMLParser { private static final String TYPE_FOLDER = "folder"; - private static final String DATE_FORMAT = "yyyy-MM-dd hh:mm:ss"; - private static final int SUCCESS = 100; private static final int FAILURE = 403; private static final int FILE_NOT_FOUND = 404; @@ -317,7 +313,7 @@ public class ShareXMLParser { } else if (name.equalsIgnoreCase(NODE_EXPIRATION)) { String value = readNode(parser, NODE_EXPIRATION); if (!(value.length() == 0)) { - share.setExpirationDate(convertToDate(value).getTime()); //Long.parseLong(readNode(parser, NODE_EXPIRATION))); // check if expiration is in long format or date format + share.setExpirationDate(WebdavUtils.parseResponseDate(value).getTime()); } } else if (name.equalsIgnoreCase(NODE_TOKEN)) { @@ -407,20 +403,5 @@ public class ShareXMLParser { } } } - - /** - * Convert String to Date - * @param dateString - * @return - */ - private Date convertToDate(String dateString){ - SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT); - Date convertedDate = new Date(); - try { - convertedDate = dateFormat.parse(dateString); - } catch (ParseException e) { - e.printStackTrace(); - } - return convertedDate; - } + } From 3bf858e2a7ea154e4a00e98fe95d98153b416bbf Mon Sep 17 00:00:00 2001 From: masensio Date: Thu, 20 Mar 2014 13:51:49 +0100 Subject: [PATCH 4/6] Changes from comments in PR#442, in oc-project --- .../shares/CreateRemoteShareOperation.java | 108 +++++++++++------- .../lib/resources/shares/ShareUtils.java | 3 + 2 files changed, 67 insertions(+), 44 deletions(-) diff --git a/src/com/owncloud/android/lib/resources/shares/CreateRemoteShareOperation.java b/src/com/owncloud/android/lib/resources/shares/CreateRemoteShareOperation.java index 7c97c40e..d31760da 100644 --- a/src/com/owncloud/android/lib/resources/shares/CreateRemoteShareOperation.java +++ b/src/com/owncloud/android/lib/resources/shares/CreateRemoteShareOperation.java @@ -101,55 +101,75 @@ public class CreateRemoteShareOperation extends RemoteOperation { PostMethod post = null; try { - // Post Method - post = new PostMethod(client.getBaseUri() + ShareUtils.SHARING_API_PATH); - Log.d(TAG, "URL ------> " + client.getBaseUri() + ShareUtils.SHARING_API_PATH); - post.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded; charset=utf-8"); // necessary for special characters - post.addParameter(PARAM_PATH, mRemoteFilePath); - post.addParameter(PARAM_SHARE_TYPE, Integer.toString(mShareType.getValue())); - post.addParameter(PARAM_SHARE_WITH, mShareWith); - post.addParameter(PARAM_PUBLIC_UPLOAD, Boolean.toString(mPublicUpload)); - if (mPassword != null && mPassword.length() > 0) { - post.addParameter(PARAM_PASSWORD, mPassword); - } - post.addParameter(PARAM_PERMISSIONS, Integer.toString(mPermissions)); + // Check if the share link already exists + GetRemoteSharesForFileOperation operation = new GetRemoteSharesForFileOperation(mRemoteFilePath, false, false); + result = ((GetRemoteSharesForFileOperation)operation).execute(client); - post.addRequestHeader(OCS_API_HEADER, OCS_API_HEADER_VALUE); - - status = client.executeMethod(post); - - if(isSuccess(status)) { - String response = post.getResponseBodyAsString(); - Log.d(TAG, "Successful response: " + response); - - result = new RemoteOperationResult(ResultCode.OK); - - // Parse xml response --> obtain the response in ShareFiles ArrayList - // convert String into InputStream - InputStream is = new ByteArrayInputStream(response.getBytes()); - ShareXMLParser xmlParser = new ShareXMLParser(); - mShares = xmlParser.parseXMLResponse(is); - if (xmlParser.isSuccess()) { - if (mShares != null) { - Log.d(TAG, "Shares: " + mShares.size()); - result = new RemoteOperationResult(ResultCode.OK); - ArrayList sharesObjects = new ArrayList(); - for (OCShare share: mShares) { - sharesObjects.add(share); - } - result.setData(sharesObjects); - } - } else if (xmlParser.isFileNotFound()){ - result = new RemoteOperationResult(ResultCode.SHARE_NOT_FOUND); + if (result.isSuccess()) { + if (result.getData().size() > 0) { + OCShare share = (OCShare) result.getData().get(0); + // Update the link, build it with the token: server address + "/public.php?service=files&t=" + token + share.setShareLink(client.getBaseUri() + ShareUtils.SHARING_LINK_TOKEN + share.getToken()); + Log.d(TAG, "Build Share link= " + share.getShareLink()); - } else { - result = new RemoteOperationResult(false, status, post.getResponseHeaders()); + result = new RemoteOperationResult(ResultCode.OK); + ArrayList sharesObjects = new ArrayList(); + sharesObjects.add(share); + result.setData(sharesObjects); } - } else { - result = new RemoteOperationResult(false, status, post.getResponseHeaders()); - } + // Post Method + post = new PostMethod(client.getBaseUri() + ShareUtils.SHARING_API_PATH); + Log.d(TAG, "URL ------> " + client.getBaseUri() + ShareUtils.SHARING_API_PATH); + + post.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded; charset=utf-8"); // necessary for special characters + post.addParameter(PARAM_PATH, mRemoteFilePath); + post.addParameter(PARAM_SHARE_TYPE, Integer.toString(mShareType.getValue())); + post.addParameter(PARAM_SHARE_WITH, mShareWith); + post.addParameter(PARAM_PUBLIC_UPLOAD, Boolean.toString(mPublicUpload)); + if (mPassword != null && mPassword.length() > 0) { + post.addParameter(PARAM_PASSWORD, mPassword); + } + post.addParameter(PARAM_PERMISSIONS, Integer.toString(mPermissions)); + + post.addRequestHeader(OCS_API_HEADER, OCS_API_HEADER_VALUE); + + status = client.executeMethod(post); + + if(isSuccess(status)) { + String response = post.getResponseBodyAsString(); + Log.d(TAG, "Successful response: " + response); + + result = new RemoteOperationResult(ResultCode.OK); + + // Parse xml response --> obtain the response in ShareFiles ArrayList + // convert String into InputStream + InputStream is = new ByteArrayInputStream(response.getBytes()); + ShareXMLParser xmlParser = new ShareXMLParser(); + mShares = xmlParser.parseXMLResponse(is); + if (xmlParser.isSuccess()) { + if (mShares != null) { + Log.d(TAG, "Shares: " + mShares.size()); + result = new RemoteOperationResult(ResultCode.OK); + ArrayList sharesObjects = new ArrayList(); + for (OCShare share: mShares) { + sharesObjects.add(share); + } + result.setData(sharesObjects); + } + } else if (xmlParser.isFileNotFound()){ + result = new RemoteOperationResult(ResultCode.SHARE_NOT_FOUND); + + } else { + result = new RemoteOperationResult(false, status, post.getResponseHeaders()); + } + + } else { + result = new RemoteOperationResult(false, status, post.getResponseHeaders()); + } + } + } catch (Exception e) { result = new RemoteOperationResult(e); diff --git a/src/com/owncloud/android/lib/resources/shares/ShareUtils.java b/src/com/owncloud/android/lib/resources/shares/ShareUtils.java index 9e2e6b99..d69f8473 100644 --- a/src/com/owncloud/android/lib/resources/shares/ShareUtils.java +++ b/src/com/owncloud/android/lib/resources/shares/ShareUtils.java @@ -35,5 +35,8 @@ public class ShareUtils { // OCS Route public static final String SHARING_API_PATH ="/ocs/v1.php/apps/files_sharing/api/v1/shares"; + + // String to build the link with the token of a share: server address + "/public.php?service=files&t=" + token + public static final String SHARING_LINK_TOKEN = "/public.php?service=files&t="; } From 7696616a440f6fc5f43b2163984f714c6f06e709 Mon Sep 17 00:00:00 2001 From: masensio Date: Thu, 20 Mar 2014 14:02:25 +0100 Subject: [PATCH 5/6] Revert "Changes from comments in PR#442, in oc-project" This reverts commit 3bf858e2a7ea154e4a00e98fe95d98153b416bbf. --- .../shares/CreateRemoteShareOperation.java | 102 +++++++----------- .../lib/resources/shares/ShareUtils.java | 3 - 2 files changed, 41 insertions(+), 64 deletions(-) diff --git a/src/com/owncloud/android/lib/resources/shares/CreateRemoteShareOperation.java b/src/com/owncloud/android/lib/resources/shares/CreateRemoteShareOperation.java index d31760da..7c97c40e 100644 --- a/src/com/owncloud/android/lib/resources/shares/CreateRemoteShareOperation.java +++ b/src/com/owncloud/android/lib/resources/shares/CreateRemoteShareOperation.java @@ -101,75 +101,55 @@ public class CreateRemoteShareOperation extends RemoteOperation { PostMethod post = null; try { + // Post Method + post = new PostMethod(client.getBaseUri() + ShareUtils.SHARING_API_PATH); + Log.d(TAG, "URL ------> " + client.getBaseUri() + ShareUtils.SHARING_API_PATH); - // Check if the share link already exists - GetRemoteSharesForFileOperation operation = new GetRemoteSharesForFileOperation(mRemoteFilePath, false, false); - result = ((GetRemoteSharesForFileOperation)operation).execute(client); + post.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded; charset=utf-8"); // necessary for special characters + post.addParameter(PARAM_PATH, mRemoteFilePath); + post.addParameter(PARAM_SHARE_TYPE, Integer.toString(mShareType.getValue())); + post.addParameter(PARAM_SHARE_WITH, mShareWith); + post.addParameter(PARAM_PUBLIC_UPLOAD, Boolean.toString(mPublicUpload)); + if (mPassword != null && mPassword.length() > 0) { + post.addParameter(PARAM_PASSWORD, mPassword); + } + post.addParameter(PARAM_PERMISSIONS, Integer.toString(mPermissions)); - if (result.isSuccess()) { - if (result.getData().size() > 0) { - OCShare share = (OCShare) result.getData().get(0); - // Update the link, build it with the token: server address + "/public.php?service=files&t=" + token - share.setShareLink(client.getBaseUri() + ShareUtils.SHARING_LINK_TOKEN + share.getToken()); - Log.d(TAG, "Build Share link= " + share.getShareLink()); - - result = new RemoteOperationResult(ResultCode.OK); - ArrayList sharesObjects = new ArrayList(); - sharesObjects.add(share); - result.setData(sharesObjects); - } - } else { - // Post Method - post = new PostMethod(client.getBaseUri() + ShareUtils.SHARING_API_PATH); - Log.d(TAG, "URL ------> " + client.getBaseUri() + ShareUtils.SHARING_API_PATH); + post.addRequestHeader(OCS_API_HEADER, OCS_API_HEADER_VALUE); + + status = client.executeMethod(post); - post.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded; charset=utf-8"); // necessary for special characters - post.addParameter(PARAM_PATH, mRemoteFilePath); - post.addParameter(PARAM_SHARE_TYPE, Integer.toString(mShareType.getValue())); - post.addParameter(PARAM_SHARE_WITH, mShareWith); - post.addParameter(PARAM_PUBLIC_UPLOAD, Boolean.toString(mPublicUpload)); - if (mPassword != null && mPassword.length() > 0) { - post.addParameter(PARAM_PASSWORD, mPassword); - } - post.addParameter(PARAM_PERMISSIONS, Integer.toString(mPermissions)); + if(isSuccess(status)) { + String response = post.getResponseBodyAsString(); + Log.d(TAG, "Successful response: " + response); - post.addRequestHeader(OCS_API_HEADER, OCS_API_HEADER_VALUE); - - status = client.executeMethod(post); - - if(isSuccess(status)) { - String response = post.getResponseBodyAsString(); - Log.d(TAG, "Successful response: " + response); - - result = new RemoteOperationResult(ResultCode.OK); - - // Parse xml response --> obtain the response in ShareFiles ArrayList - // convert String into InputStream - InputStream is = new ByteArrayInputStream(response.getBytes()); - ShareXMLParser xmlParser = new ShareXMLParser(); - mShares = xmlParser.parseXMLResponse(is); - if (xmlParser.isSuccess()) { - if (mShares != null) { - Log.d(TAG, "Shares: " + mShares.size()); - result = new RemoteOperationResult(ResultCode.OK); - ArrayList sharesObjects = new ArrayList(); - for (OCShare share: mShares) { - sharesObjects.add(share); - } - result.setData(sharesObjects); + result = new RemoteOperationResult(ResultCode.OK); + + // Parse xml response --> obtain the response in ShareFiles ArrayList + // convert String into InputStream + InputStream is = new ByteArrayInputStream(response.getBytes()); + ShareXMLParser xmlParser = new ShareXMLParser(); + mShares = xmlParser.parseXMLResponse(is); + if (xmlParser.isSuccess()) { + if (mShares != null) { + Log.d(TAG, "Shares: " + mShares.size()); + result = new RemoteOperationResult(ResultCode.OK); + ArrayList sharesObjects = new ArrayList(); + for (OCShare share: mShares) { + sharesObjects.add(share); } - } else if (xmlParser.isFileNotFound()){ - result = new RemoteOperationResult(ResultCode.SHARE_NOT_FOUND); - - } else { - result = new RemoteOperationResult(false, status, post.getResponseHeaders()); + result.setData(sharesObjects); } - + } else if (xmlParser.isFileNotFound()){ + result = new RemoteOperationResult(ResultCode.SHARE_NOT_FOUND); + } else { - result = new RemoteOperationResult(false, status, post.getResponseHeaders()); + result = new RemoteOperationResult(false, status, post.getResponseHeaders()); } - } - + + } else { + result = new RemoteOperationResult(false, status, post.getResponseHeaders()); + } } catch (Exception e) { result = new RemoteOperationResult(e); diff --git a/src/com/owncloud/android/lib/resources/shares/ShareUtils.java b/src/com/owncloud/android/lib/resources/shares/ShareUtils.java index d69f8473..9e2e6b99 100644 --- a/src/com/owncloud/android/lib/resources/shares/ShareUtils.java +++ b/src/com/owncloud/android/lib/resources/shares/ShareUtils.java @@ -35,8 +35,5 @@ public class ShareUtils { // OCS Route public static final String SHARING_API_PATH ="/ocs/v1.php/apps/files_sharing/api/v1/shares"; - - // String to build the link with the token of a share: server address + "/public.php?service=files&t=" + token - public static final String SHARING_LINK_TOKEN = "/public.php?service=files&t="; } From d8fd024f2adde05ceab2cb41fdcf72d9c2a9d6f5 Mon Sep 17 00:00:00 2001 From: masensio Date: Thu, 20 Mar 2014 15:34:54 +0100 Subject: [PATCH 6/6] Changes from comments in PR#442, in oc-project --- .../lib/resources/shares/GetRemoteSharesForFileOperation.java | 4 ++++ src/com/owncloud/android/lib/resources/shares/ShareUtils.java | 3 +++ 2 files changed, 7 insertions(+) diff --git a/src/com/owncloud/android/lib/resources/shares/GetRemoteSharesForFileOperation.java b/src/com/owncloud/android/lib/resources/shares/GetRemoteSharesForFileOperation.java index 48f8a023..4457bcde 100644 --- a/src/com/owncloud/android/lib/resources/shares/GetRemoteSharesForFileOperation.java +++ b/src/com/owncloud/android/lib/resources/shares/GetRemoteSharesForFileOperation.java @@ -116,6 +116,10 @@ public class GetRemoteSharesForFileOperation extends RemoteOperation { result = new RemoteOperationResult(ResultCode.OK); ArrayList sharesObjects = new ArrayList(); for (OCShare share: mShares) { + // Build the link + if (share.getToken().length() > 0) { + share.setShareLink(client.getBaseUri() + ShareUtils.SHARING_LINK_TOKEN + share.getToken()); + } sharesObjects.add(share); } result.setData(sharesObjects); diff --git a/src/com/owncloud/android/lib/resources/shares/ShareUtils.java b/src/com/owncloud/android/lib/resources/shares/ShareUtils.java index 9e2e6b99..c30d73b3 100644 --- a/src/com/owncloud/android/lib/resources/shares/ShareUtils.java +++ b/src/com/owncloud/android/lib/resources/shares/ShareUtils.java @@ -36,4 +36,7 @@ public class ShareUtils { // OCS Route public static final String SHARING_API_PATH ="/ocs/v1.php/apps/files_sharing/api/v1/shares"; + // String to build the link with the token of a share: server address + "/public.php?service=files&t=" + token + public static final String SHARING_LINK_TOKEN = "/public.php?service=files&t="; + }