diff --git a/src/com/owncloud/android/lib/common/network/WebdavEntry.java b/src/com/owncloud/android/lib/common/network/WebdavEntry.java index 59f4a4bf..d93286b3 100644 --- a/src/com/owncloud/android/lib/common/network/WebdavEntry.java +++ b/src/com/owncloud/android/lib/common/network/WebdavEntry.java @@ -41,21 +41,22 @@ public class WebdavEntry { private static final String TAG = WebdavEntry.class.getSimpleName(); - public static final String NAMESPACE_OC = "http://owncloud.org/ns"; - public static final String EXTENDED_PROPERTY_NAME_PERMISSIONS = "permissions"; - public static final String EXTENDED_PROPERTY_NAME_REMOTE_ID = "id"; + public static final String NAMESPACE_OC = "http://owncloud.org/ns"; + public static final String EXTENDED_PROPERTY_NAME_PERMISSIONS = "permissions"; + public static final String EXTENDED_PROPERTY_NAME_REMOTE_ID = "id"; public static final String EXTENDED_PROPERTY_NAME_SIZE = "size"; + public static final String EXTENDED_PROPERTY_NAME_PRIVATE_LINK = "privatelink"; public static final String PROPERTY_QUOTA_USED_BYTES = "quota-used-bytes"; public static final String PROPERTY_QUOTA_AVAILABLE_BYTES = "quota-available-bytes"; private static final int CODE_PROP_NOT_FOUND = 404; - private String mName, mPath, mUri, mContentType, mEtag, mPermissions, mRemoteId; - private long mContentLength, mCreateTimestamp, mModifiedTimestamp, mSize; + private String mName, mPath, mUri, mContentType, mEtag, mPermissions, mRemoteId, mPrivateLink; + private long mContentLength, mCreateTimestamp, mModifiedTimestamp, mSize; private BigDecimal mQuotaUsedBytes, mQuotaAvailableBytes; - public WebdavEntry(MultiStatusResponse ms, String splitElement) { + public WebdavEntry(MultiStatusResponse ms, String splitElement) { resetData(); if (ms.getStatus().length != 0) { mUri = ms.getHref(); @@ -63,7 +64,7 @@ public class WebdavEntry { mPath = mUri.split(splitElement, 2)[1]; int status = ms.getStatus()[0].getStatusCode(); - if ( status == CODE_PROP_NOT_FOUND ) { + if (status == CODE_PROP_NOT_FOUND) { status = ms.getStatus()[1].getStatusCode(); } DavPropertySet propSet = ms.getProperties(status); @@ -71,9 +72,8 @@ public class WebdavEntry { DavProperty prop = propSet.get(DavPropertyName.DISPLAYNAME); if (prop != null) { mName = (String) prop.getName().toString(); - mName = mName.substring(1, mName.length()-1); - } - else { + mName = mName.substring(1, mName.length() - 1); + } else { String[] tmp = mPath.split("/"); if (tmp.length > 0) mName = tmp[tmp.length - 1]; @@ -91,17 +91,17 @@ public class WebdavEntry { mContentType = mContentType.substring(0, mContentType.indexOf(";")); } } - + // check if it's a folder in the standard way: see RFC2518 12.2 . RFC4918 14.3 // {DAV:}resourcetype prop = propSet.get(DavPropertyName.RESOURCETYPE); - if (prop!= null) { + if (prop != null) { Object value = prop.getValue(); if (value != null) { mContentType = "DIR"; // a specific attribute would be better, - // but this is enough; - // unless while we have no reason to distinguish - // MIME types for folders + // but this is enough; + // unless while we have no reason to distinguish + // MIME types for folders } } @@ -114,14 +114,14 @@ public class WebdavEntry { prop = propSet.get(DavPropertyName.GETLASTMODIFIED); if (prop != null) { Date d = WebdavUtils - .parseResponseDate((String) prop.getValue()); + .parseResponseDate((String) prop.getValue()); mModifiedTimestamp = (d != null) ? d.getTime() : 0; } prop = propSet.get(DavPropertyName.CREATIONDATE); if (prop != null) { Date d = WebdavUtils - .parseResponseDate((String) prop.getValue()); + .parseResponseDate((String) prop.getValue()); mCreateTimestamp = (d != null) ? d.getTime() : 0; } @@ -140,10 +140,10 @@ public class WebdavEntry { mQuotaUsedBytes = new BigDecimal(quotaUsedBytesSt); } catch (NumberFormatException e) { Log_OC.w(TAG, "No value for QuotaUsedBytes - NumberFormatException"); - } catch (NullPointerException e ){ + } catch (NullPointerException e) { Log_OC.w(TAG, "No value for QuotaUsedBytes - NullPointerException"); } - Log_OC.d(TAG , "QUOTA_USED_BYTES " + quotaUsedBytesSt ); + Log_OC.d(TAG, "QUOTA_USED_BYTES " + quotaUsedBytesSt); } // {DAV:}quota-available-bytes @@ -154,47 +154,54 @@ public class WebdavEntry { mQuotaAvailableBytes = new BigDecimal(quotaAvailableBytesSt); } catch (NumberFormatException e) { Log_OC.w(TAG, "No value for QuotaAvailableBytes - NumberFormatException"); - } catch (NullPointerException e ){ + } catch (NullPointerException e) { Log_OC.w(TAG, "No value for QuotaAvailableBytes"); } - Log_OC.d(TAG , "QUOTA_AVAILABLE_BYTES " + quotaAvailableBytesSt ); + Log_OC.d(TAG, "QUOTA_AVAILABLE_BYTES " + quotaAvailableBytesSt); } // OC permissions property prop = propSet.get( - EXTENDED_PROPERTY_NAME_PERMISSIONS, Namespace.getNamespace(NAMESPACE_OC) - ); + EXTENDED_PROPERTY_NAME_PERMISSIONS, Namespace.getNamespace(NAMESPACE_OC) + ); if (prop != null) { mPermissions = prop.getValue().toString(); } // OC remote id property prop = propSet.get( - EXTENDED_PROPERTY_NAME_REMOTE_ID, Namespace.getNamespace(NAMESPACE_OC) - ); + EXTENDED_PROPERTY_NAME_REMOTE_ID, Namespace.getNamespace(NAMESPACE_OC) + ); if (prop != null) { mRemoteId = prop.getValue().toString(); } - // TODO: is it necessary? // OC size property prop = propSet.get( - EXTENDED_PROPERTY_NAME_SIZE, Namespace.getNamespace(NAMESPACE_OC) - ); + EXTENDED_PROPERTY_NAME_SIZE, Namespace.getNamespace(NAMESPACE_OC) + ); if (prop != null) { mSize = Long.parseLong((String) prop.getValue()); } + // OC privatelink property + prop = propSet.get( + EXTENDED_PROPERTY_NAME_PRIVATE_LINK, Namespace.getNamespace(NAMESPACE_OC) + ); + if (prop != null) { + mPrivateLink = prop.getValue().toString(); + } + } else { Log_OC.e("WebdavEntry", - "General fuckup, no status for webdav response"); + "General fuckup, no status for webdav response"); } } public String path() { return mPath; } - + public String decodedPath() { return Uri.decode(mPath); } @@ -226,7 +233,7 @@ public class WebdavEntry { public long modifiedTimestamp() { return mModifiedTimestamp; } - + public String etag() { return mEtag; } @@ -239,7 +246,7 @@ public class WebdavEntry { return mRemoteId; } - public long size(){ + public long size() { return mSize; } @@ -251,11 +258,17 @@ public class WebdavEntry { return mQuotaAvailableBytes; } + public String privateLink() { + return mPrivateLink; + } + private void resetData() { - mName = mUri = mContentType = mPermissions = null; mRemoteId = null; + mName = mUri = mContentType = mPermissions = null; + mRemoteId = null; mContentLength = mCreateTimestamp = mModifiedTimestamp = 0; mSize = 0; mQuotaUsedBytes = null; mQuotaAvailableBytes = null; + mPrivateLink = null; } } diff --git a/src/com/owncloud/android/lib/common/network/WebdavUtils.java b/src/com/owncloud/android/lib/common/network/WebdavUtils.java index 3e9c986d..8c307b60 100644 --- a/src/com/owncloud/android/lib/common/network/WebdavUtils.java +++ b/src/com/owncloud/android/lib/common/network/WebdavUtils.java @@ -107,6 +107,8 @@ public class WebdavUtils { Namespace.getNamespace(WebdavEntry.NAMESPACE_OC)); propSet.add(WebdavEntry.EXTENDED_PROPERTY_NAME_SIZE, Namespace.getNamespace(WebdavEntry.NAMESPACE_OC)); + propSet.add(WebdavEntry.EXTENDED_PROPERTY_NAME_PRIVATE_LINK, + Namespace.getNamespace(WebdavEntry.NAMESPACE_OC)); return propSet; } @@ -130,6 +132,10 @@ public class WebdavUtils { Namespace.getNamespace(WebdavEntry.NAMESPACE_OC)); propSet.add(WebdavEntry.EXTENDED_PROPERTY_NAME_SIZE, Namespace.getNamespace(WebdavEntry.NAMESPACE_OC)); + propSet.add(WebdavEntry.EXTENDED_PROPERTY_NAME_SIZE, + Namespace.getNamespace(WebdavEntry.NAMESPACE_OC)); + propSet.add(WebdavEntry.EXTENDED_PROPERTY_NAME_PRIVATE_LINK, + Namespace.getNamespace(WebdavEntry.NAMESPACE_OC)); return propSet; } diff --git a/src/com/owncloud/android/lib/resources/files/ReadRemoteFolderOperation.java b/src/com/owncloud/android/lib/resources/files/ReadRemoteFolderOperation.java index 2b260e2f..53b8295f 100644 --- a/src/com/owncloud/android/lib/resources/files/ReadRemoteFolderOperation.java +++ b/src/com/owncloud/android/lib/resources/files/ReadRemoteFolderOperation.java @@ -171,6 +171,7 @@ public class ReadRemoteFolderOperation extends RemoteOperation { file.setSize(we.size()); file.setQuotaUsedBytes(we.quotaUsedBytes()); file.setQuotaAvailableBytes(we.quotaAvailableBytes()); + file.setPrivateLink(we.privateLink()); return file; } } diff --git a/src/com/owncloud/android/lib/resources/files/RemoteFile.java b/src/com/owncloud/android/lib/resources/files/RemoteFile.java index 0c65affb..f2dc7330 100644 --- a/src/com/owncloud/android/lib/resources/files/RemoteFile.java +++ b/src/com/owncloud/android/lib/resources/files/RemoteFile.java @@ -33,146 +33,158 @@ import android.os.Parcelable; import com.owncloud.android.lib.common.network.WebdavEntry; /** - * Contains the data of a Remote File from a WebDavEntry - * - * @author masensio + * Contains the data of a Remote File from a WebDavEntry + * + * @author masensio */ public class RemoteFile implements Parcelable, Serializable { - /** Generated - should be refreshed every time the class changes!! */ - private static final long serialVersionUID = 3130865437811248451L; - - private String mRemotePath; - private String mMimeType; - private long mLength; - private long mCreationTimestamp; - private long mModifiedTimestamp; - private String mEtag; - private String mPermissions; - private String mRemoteId; + /** + * Generated - should be refreshed every time the class changes!! + */ + private static final long serialVersionUID = -8965995357413958539L; + + private String mRemotePath; + private String mMimeType; + private long mLength; + private long mCreationTimestamp; + private long mModifiedTimestamp; + private String mEtag; + private String mPermissions; + private String mRemoteId; private long mSize; private BigDecimal mQuotaUsedBytes; private BigDecimal mQuotaAvailableBytes; + private String mPrivateLink; + + /** + * Getters and Setters + */ - /** - * Getters and Setters - */ - public String getRemotePath() { - return mRemotePath; - } + return mRemotePath; + } - public void setRemotePath(String remotePath) { - this.mRemotePath = remotePath; - } + public void setRemotePath(String remotePath) { + this.mRemotePath = remotePath; + } - public String getMimeType() { - return mMimeType; - } + public String getMimeType() { + return mMimeType; + } - public void setMimeType(String mimeType) { - this.mMimeType = mimeType; - } + public void setMimeType(String mimeType) { + this.mMimeType = mimeType; + } - public long getLength() { - return mLength; - } + public long getLength() { + return mLength; + } - public void setLength(long length) { - this.mLength = length; - } + public void setLength(long length) { + this.mLength = length; + } - public long getCreationTimestamp() { - return mCreationTimestamp; - } + public long getCreationTimestamp() { + return mCreationTimestamp; + } - public void setCreationTimestamp(long creationTimestamp) { - this.mCreationTimestamp = creationTimestamp; - } + public void setCreationTimestamp(long creationTimestamp) { + this.mCreationTimestamp = creationTimestamp; + } - public long getModifiedTimestamp() { - return mModifiedTimestamp; - } + public long getModifiedTimestamp() { + return mModifiedTimestamp; + } - public void setModifiedTimestamp(long modifiedTimestamp) { - this.mModifiedTimestamp = modifiedTimestamp; - } + public void setModifiedTimestamp(long modifiedTimestamp) { + this.mModifiedTimestamp = modifiedTimestamp; + } - public String getEtag() { - return mEtag; - } + public String getEtag() { + return mEtag; + } - public void setEtag(String etag) { - this.mEtag = etag; - } - - public String getPermissions() { - return mPermissions; - } + public void setEtag(String etag) { + this.mEtag = etag; + } - public void setPermissions(String permissions) { - this.mPermissions = permissions; - } + public String getPermissions() { + return mPermissions; + } - public String getRemoteId() { - return mRemoteId; - } + public void setPermissions(String permissions) { + this.mPermissions = permissions; + } - public void setRemoteId(String remoteId) { - this.mRemoteId = remoteId; - } + public String getRemoteId() { + return mRemoteId; + } + + public void setRemoteId(String remoteId) { + this.mRemoteId = remoteId; + } public long getSize() { return mSize; } - public void setSize (long size){ + public void setSize(long size) { mSize = size; } - public void setQuotaUsedBytes (BigDecimal quotaUsedBytes) { + public void setQuotaUsedBytes(BigDecimal quotaUsedBytes) { mQuotaUsedBytes = quotaUsedBytes; } - public void setQuotaAvailableBytes (BigDecimal quotaAvailableBytes) { + public void setQuotaAvailableBytes(BigDecimal quotaAvailableBytes) { mQuotaAvailableBytes = quotaAvailableBytes; } - public RemoteFile() { - resetData(); - } + public String getPrivateLink() { + return mPrivateLink; + } - /** + public void setPrivateLink(String privateLink) { + mPrivateLink = privateLink; + } + + public RemoteFile() { + resetData(); + } + + /** * Create new {@link RemoteFile} with given path. - * + *

* The path received must be URL-decoded. Path separator must be OCFile.PATH_SEPARATOR, and it must be the first character in 'path'. - * + * * @param path The remote path of the file. */ - public RemoteFile(String path) { - resetData(); + public RemoteFile(String path) { + resetData(); if (path == null || path.length() <= 0 || !path.startsWith(FileUtils.PATH_SEPARATOR)) { throw new IllegalArgumentException("Trying to create a OCFile with a non valid remote path: " + path); } mRemotePath = path; - } - - public RemoteFile(WebdavEntry we) { - this(we.decodedPath()); - this.setCreationTimestamp(we.createTimestamp()); - this.setLength(we.contentLength()); - this.setMimeType(we.contentType()); - this.setModifiedTimestamp(we.modifiedTimestamp()); - this.setEtag(we.etag()); - this.setPermissions(we.permissions()); - this.setRemoteId(we.remoteId()); - this.setSize(we.size()); - this.setQuotaUsedBytes(we.quotaUsedBytes()); - this.setQuotaAvailableBytes(we.quotaAvailableBytes()); - } + } - /** + public RemoteFile(WebdavEntry webdavEntry) { + this(webdavEntry.decodedPath()); + this.setCreationTimestamp(webdavEntry.createTimestamp()); + this.setLength(webdavEntry.contentLength()); + this.setMimeType(webdavEntry.contentType()); + this.setModifiedTimestamp(webdavEntry.modifiedTimestamp()); + this.setEtag(webdavEntry.etag()); + this.setPermissions(webdavEntry.permissions()); + this.setRemoteId(webdavEntry.remoteId()); + this.setSize(webdavEntry.size()); + this.setQuotaUsedBytes(webdavEntry.quotaUsedBytes()); + this.setQuotaAvailableBytes(webdavEntry.quotaAvailableBytes()); + this.setPrivateLink(webdavEntry.privateLink()); + } + + /** * Used internally. Reset all file properties */ private void resetData() { @@ -187,9 +199,10 @@ public class RemoteFile implements Parcelable, Serializable { mSize = 0; mQuotaUsedBytes = null; mQuotaAvailableBytes = null; + mPrivateLink = null; } - /** + /** * Parcelable Methods */ public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { @@ -203,49 +216,51 @@ public class RemoteFile implements Parcelable, Serializable { return new RemoteFile[size]; } }; - - + + /** * Reconstruct from parcel - * + * * @param source The source parcel */ protected RemoteFile(Parcel source) { - readFromParcel(source); + readFromParcel(source); } - - public void readFromParcel (Parcel source) { + + public void readFromParcel(Parcel source) { mRemotePath = source.readString(); mMimeType = source.readString(); mLength = source.readLong(); mCreationTimestamp = source.readLong(); mModifiedTimestamp = source.readLong(); mEtag = source.readString(); - mPermissions= source.readString(); + mPermissions = source.readString(); mRemoteId = source.readString(); mSize = source.readLong(); mQuotaUsedBytes = (BigDecimal) source.readSerializable(); mQuotaAvailableBytes = (BigDecimal) source.readSerializable(); + mPrivateLink = source.readString(); } - - @Override - public int describeContents() { - return this.hashCode(); - } - @Override - public void writeToParcel(Parcel dest, int flags) { - dest.writeString(mRemotePath); - dest.writeString(mMimeType); - dest.writeLong(mLength); - dest.writeLong(mCreationTimestamp); - dest.writeLong(mModifiedTimestamp); - dest.writeString(mEtag); - dest.writeString(mPermissions); - dest.writeString(mRemoteId); + @Override + public int describeContents() { + return this.hashCode(); + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeString(mRemotePath); + dest.writeString(mMimeType); + dest.writeLong(mLength); + dest.writeLong(mCreationTimestamp); + dest.writeLong(mModifiedTimestamp); + dest.writeString(mEtag); + dest.writeString(mPermissions); + dest.writeString(mRemoteId); dest.writeLong(mSize); dest.writeSerializable(mQuotaUsedBytes); dest.writeSerializable(mQuotaAvailableBytes); - } + dest.writeString(mPrivateLink); + } }