diff --git a/src/com/owncloud/android/lib/resources/shares/OCShare.java b/src/com/owncloud/android/lib/resources/shares/OCShare.java index 6bbf6458..1ce63504 100644 --- a/src/com/owncloud/android/lib/resources/shares/OCShare.java +++ b/src/com/owncloud/android/lib/resources/shares/OCShare.java @@ -1,5 +1,5 @@ /* ownCloud Android Library is available under MIT license - * Copyright (C) 2016 ownCloud GmbH. + * Copyright (C) 2017 ownCloud GmbH. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -24,6 +24,7 @@ package com.owncloud.android.lib.resources.shares; +import java.io.File; import java.io.Serializable; import android.os.Parcel; @@ -35,9 +36,9 @@ import com.owncloud.android.lib.resources.files.FileUtils; /** * Contains the data of a Share from the Share API - * - * @author masensio * + * @author masensio + * @author David A. Velasco */ public class OCShare implements Parcelable, Serializable { @@ -56,33 +57,27 @@ public class OCShare implements Parcelable, Serializable { public static final int SHARE_PERMISSION_FLAG = 16; public static final int MAXIMUM_PERMISSIONS_FOR_FILE = READ_PERMISSION_FLAG + - UPDATE_PERMISSION_FLAG + - SHARE_PERMISSION_FLAG - ; + UPDATE_PERMISSION_FLAG + + SHARE_PERMISSION_FLAG; public static final int MAXIMUM_PERMISSIONS_FOR_FOLDER = MAXIMUM_PERMISSIONS_FOR_FILE + - CREATE_PERMISSION_FLAG + - DELETE_PERMISSION_FLAG - ; + CREATE_PERMISSION_FLAG + + DELETE_PERMISSION_FLAG; public static final int FEDERATED_PERMISSIONS_FOR_FILE_UP_TO_OC9 = READ_PERMISSION_FLAG + - UPDATE_PERMISSION_FLAG - ; + UPDATE_PERMISSION_FLAG; public static final int FEDERATED_PERMISSIONS_FOR_FILE_AFTER_OC9 = READ_PERMISSION_FLAG + - UPDATE_PERMISSION_FLAG + - SHARE_PERMISSION_FLAG - ; + UPDATE_PERMISSION_FLAG + + SHARE_PERMISSION_FLAG; public static final int FEDERATED_PERMISSIONS_FOR_FOLDER_UP_TO_OC9 = READ_PERMISSION_FLAG + - UPDATE_PERMISSION_FLAG + - CREATE_PERMISSION_FLAG + - DELETE_PERMISSION_FLAG - ; + UPDATE_PERMISSION_FLAG + + CREATE_PERMISSION_FLAG + + DELETE_PERMISSION_FLAG; public static final int FEDERATED_PERMISSIONS_FOR_FOLDER_AFTER_OC9 = FEDERATED_PERMISSIONS_FOR_FOLDER_UP_TO_OC9 + - SHARE_PERMISSION_FLAG - ; + SHARE_PERMISSION_FLAG; private long mId; private long mFileSource; @@ -95,33 +90,34 @@ public class OCShare implements Parcelable, Serializable { private long mExpirationDate; private String mToken; private String mSharedWithDisplayName; + private String mName; private boolean mIsFolder; private long mUserId; private long mRemoteId; private String mShareLink; - + public OCShare() { - super(); - resetData(); + super(); + resetData(); } - - public OCShare(String path) { - resetData(); + + public OCShare(String path) { + resetData(); if (path == null || path.length() <= 0 || !path.startsWith(FileUtils.PATH_SEPARATOR)) { Log_OC.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; - } + } - /** + /** * Used internally. Reset all file properties */ private void resetData() { - mId = -1; + mId = -1; mFileSource = 0; mItemSource = 0; - mShareType = ShareType.NO_SHARED; + mShareType = ShareType.NO_SHARED; mShareWith = ""; mPath = ""; mPermissions = -1; @@ -133,18 +129,19 @@ public class OCShare implements Parcelable, Serializable { mUserId = -1; mRemoteId = -1; mShareLink = ""; - } - + mName = ""; + } + /// Getters and Setters - + public long getId() { return mId; } - - public void setId(long id){ + + public void setId(long id) { mId = id; } - + public long getFileSource() { return mFileSource; } @@ -225,6 +222,20 @@ public class OCShare implements Parcelable, Serializable { this.mSharedWithDisplayName = (sharedWithDisplayName != null) ? sharedWithDisplayName : ""; } + public String getName() { + if (mName.length() > 0) { + return mName; + } + if (mPath.length() > 0) { + return (new File(mPath)).getName(); + } + return ""; + } + + public void setName(String name) { + mName = (name != null) ? name : ""; + } + public boolean isFolder() { return mIsFolder; } @@ -248,11 +259,11 @@ public class OCShare implements Parcelable, Serializable { public void setIdRemoteShared(long remoteId) { this.mRemoteId = remoteId; } - + public String getShareLink() { - return this.mShareLink; + return this.mShareLink; } - + public void setShareLink(String shareLink) { this.mShareLink = (shareLink != null) ? shareLink : ""; } @@ -260,8 +271,8 @@ public class OCShare implements Parcelable, Serializable { public boolean isPasswordProtected() { return ShareType.PUBLIC_LINK.equals(mShareType) && mShareWith.length() > 0; } - - /** + + /** * Parcelable Methods */ public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { @@ -275,19 +286,19 @@ public class OCShare implements Parcelable, Serializable { return new OCShare[size]; } }; - + /** * Reconstruct from parcel - * + * * @param source The source parcel - */ + */ protected OCShare(Parcel source) { - readFromParcel(source); + readFromParcel(source); } - + public void readFromParcel(Parcel source) { mId = source.readLong(); - + mFileSource = source.readLong(); mItemSource = source.readLong(); try { @@ -306,18 +317,19 @@ public class OCShare implements Parcelable, Serializable { mUserId = source.readLong(); mRemoteId = source.readLong(); mShareLink = source.readString(); + mName = source.readString(); + } + + + @Override + public int describeContents() { + return this.hashCode(); } - @Override - public int describeContents() { - return this.hashCode(); - } - - @Override public void writeToParcel(Parcel dest, int flags) { - dest.writeLong(mId); + dest.writeLong(mId); dest.writeLong(mFileSource); dest.writeLong(mItemSource); dest.writeString((mShareType == null) ? "" : mShareType.name()); @@ -332,6 +344,7 @@ public class OCShare implements Parcelable, Serializable { dest.writeLong(mUserId); dest.writeLong(mRemoteId); dest.writeString(mShareLink); + dest.writeString(mName); } } diff --git a/src/com/owncloud/android/lib/resources/shares/ShareToRemoteOperationResultParser.java b/src/com/owncloud/android/lib/resources/shares/ShareToRemoteOperationResultParser.java index 0d1bbbb6..c39300f8 100644 --- a/src/com/owncloud/android/lib/resources/shares/ShareToRemoteOperationResultParser.java +++ b/src/com/owncloud/android/lib/resources/shares/ShareToRemoteOperationResultParser.java @@ -94,6 +94,7 @@ public class ShareToRemoteOperationResultParser { share.getShareLink().length() <= 0) && share.getToken().length() > 0 ) { + // TODO - deal with https://github.com/owncloud/android/issues/1811 if (mServerBaseUri != null) { String sharingLinkPath = ShareUtils.getSharingLinkPath(mOwnCloudVersion); share.setShareLink(mServerBaseUri + sharingLinkPath + share.getToken()); diff --git a/src/com/owncloud/android/lib/resources/shares/ShareXMLParser.java b/src/com/owncloud/android/lib/resources/shares/ShareXMLParser.java index a17bda02..0f02e6f3 100644 --- a/src/com/owncloud/android/lib/resources/shares/ShareXMLParser.java +++ b/src/com/owncloud/android/lib/resources/shares/ShareXMLParser.java @@ -76,6 +76,7 @@ public class ShareXMLParser { 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_NAME = "name"; private static final String NODE_URL = "url"; @@ -356,7 +357,10 @@ public class ShareXMLParser { String value = readNode(parser, NODE_URL); share.setShareLink(value); - } else { + } else if (name.equalsIgnoreCase(NODE_NAME)) { + share.setName(readNode(parser, NODE_NAME)); + + } else { skip(parser); } } diff --git a/src/com/owncloud/android/lib/resources/shares/UpdateRemoteShareOperation.java b/src/com/owncloud/android/lib/resources/shares/UpdateRemoteShareOperation.java index 7226cbe3..b64dd009 100644 --- a/src/com/owncloud/android/lib/resources/shares/UpdateRemoteShareOperation.java +++ b/src/com/owncloud/android/lib/resources/shares/UpdateRemoteShareOperation.java @@ -42,6 +42,7 @@ import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.List; +import java.util.Locale; /** @@ -54,6 +55,7 @@ public class UpdateRemoteShareOperation extends RemoteOperation { private static final String TAG = GetRemoteShareOperation.class.getSimpleName(); + private static final String PARAM_NAME = "name"; private static final String PARAM_PASSWORD = "password"; private static final String PARAM_EXPIRATION_DATE = "expireDate"; private static final String PARAM_PERMISSIONS = "permissions"; @@ -87,6 +89,7 @@ public class UpdateRemoteShareOperation extends RemoteOperation { * Upload permissions for the public link (only folders) */ private Boolean mPublicUpload; + private String mName; /** @@ -102,6 +105,17 @@ public class UpdateRemoteShareOperation extends RemoteOperation { } + /** + * Set name to update in Share resource. Ignored by servers previous to version 10.0.0 + * + * @param name Name to set to the target share. + * Empty string clears the current name. + * Null results in no update applied to the name. + */ + public void setName(String name) { + this.mName = name; + } + /** * Set password to update in Share resource. * @@ -150,38 +164,41 @@ public class UpdateRemoteShareOperation extends RemoteOperation { @Override protected RemoteOperationResult run(OwnCloudClient client) { RemoteOperationResult result = null; - int status = -1; + int status; /// prepare array of parameters to update - List> parametersToUpdate = new ArrayList>(); + List> parametersToUpdate = new ArrayList<>(); + if (mName != null) { + parametersToUpdate.add(new Pair<>(PARAM_NAME, mName)); + } if (mPassword != null) { - parametersToUpdate.add(new Pair(PARAM_PASSWORD, mPassword)); + parametersToUpdate.add(new Pair<>(PARAM_PASSWORD, mPassword)); } if (mExpirationDateInMillis < 0) { // clear expiration date - parametersToUpdate.add(new Pair(PARAM_EXPIRATION_DATE, "")); + parametersToUpdate.add(new Pair<>(PARAM_EXPIRATION_DATE, "")); } else if (mExpirationDateInMillis > 0) { // set expiration date - DateFormat dateFormat = new SimpleDateFormat(FORMAT_EXPIRATION_DATE); + DateFormat dateFormat = new SimpleDateFormat(FORMAT_EXPIRATION_DATE, Locale.GERMAN); Calendar expirationDate = Calendar.getInstance(); expirationDate.setTimeInMillis(mExpirationDateInMillis); String formattedExpirationDate = dateFormat.format(expirationDate.getTime()); - parametersToUpdate.add(new Pair(PARAM_EXPIRATION_DATE, formattedExpirationDate)); + parametersToUpdate.add(new Pair<>(PARAM_EXPIRATION_DATE, formattedExpirationDate)); } // else, ignore - no update if (mPermissions > 0) { // set permissions - parametersToUpdate.add(new Pair(PARAM_PERMISSIONS, Integer.toString(mPermissions))); + parametersToUpdate.add(new Pair<>(PARAM_PERMISSIONS, Integer.toString(mPermissions))); } if (mPublicUpload != null) { - parametersToUpdate.add(new Pair(PARAM_PUBLIC_UPLOAD, Boolean.toString(mPublicUpload))); + parametersToUpdate.add(new Pair<>(PARAM_PUBLIC_UPLOAD, Boolean.toString(mPublicUpload))); } /// perform required PUT requests PutMethod put = null; - String uriString = null; + String uriString; try { Uri requestUri = client.getBaseUri();