X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/blobdiff_plain/d58d6ca4d02233d4a9370104dd3d10bdac7aa4b8..refs/heads/master:/src/com/owncloud/android/datamodel/OCFile.java diff --git a/src/com/owncloud/android/datamodel/OCFile.java b/src/com/owncloud/android/datamodel/OCFile.java index cf25d278..2b9bd5e7 100644 --- a/src/com/owncloud/android/datamodel/OCFile.java +++ b/src/com/owncloud/android/datamodel/OCFile.java @@ -1,6 +1,10 @@ -/* ownCloud Android client application +/** + * ownCloud Android client application + * + * @author Bartek Przybylski + * @author David A. Velasco * Copyright (C) 2012 Bartek Przybylski - * Copyright (C) 2012-2013 ownCloud Inc. + * Copyright (C) 2015 ownCloud Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2, @@ -18,6 +22,8 @@ package com.owncloud.android.datamodel; +import android.content.ContentResolver; +import android.net.Uri; import android.os.Parcel; import android.os.Parcelable; import android.webkit.MimeTypeMap; @@ -41,6 +47,8 @@ public class OCFile implements Parcelable, Comparable { } }; + private final static String PERMISSION_SHARED_WITH_ME = "S"; // TODO move to better location + public static final String PATH_SEPARATOR = "/"; public static final String ROOT_PATH = PATH_SEPARATOR; @@ -58,7 +66,7 @@ public class OCFile implements Parcelable, Comparable { private boolean mNeedsUpdating; private long mLastSyncDateForProperties; private long mLastSyncDateForData; - private boolean mKeepInSync; + private boolean mFavorite; private String mEtag; @@ -70,6 +78,18 @@ public class OCFile implements Parcelable, Comparable { private boolean mNeedsUpdateThumbnail; + private boolean mIsDownloading; + + private String mEtagInConflict; // Save file etag in the server, when there is a conflict. No conflict = null + + private boolean mShareWithSharee; + + /** + * URI to the local path of the file contents, if stored in the device; cached after first call + * to {@link #getStorageUri()} + */ + private Uri mLocalUri; + /** * Create new {@link OCFile} with given path. @@ -103,7 +123,7 @@ public class OCFile implements Parcelable, Comparable { mLocalPath = source.readString(); mMimeType = source.readString(); mNeedsUpdating = source.readInt() == 0; - mKeepInSync = source.readInt() == 1; + mFavorite = source.readInt() == 1; mLastSyncDateForProperties = source.readLong(); mLastSyncDateForData = source.readLong(); mEtag = source.readString(); @@ -111,7 +131,10 @@ public class OCFile implements Parcelable, Comparable { mPublicLink = source.readString(); mPermissions = source.readString(); mRemoteId = source.readString(); - mNeedsUpdateThumbnail = source.readInt() == 0; + mNeedsUpdateThumbnail = source.readInt() == 1; + mIsDownloading = source.readInt() == 1; + mEtagInConflict = source.readString(); + mShareWithSharee = source.readInt() == 1; } @@ -127,7 +150,7 @@ public class OCFile implements Parcelable, Comparable { dest.writeString(mLocalPath); dest.writeString(mMimeType); dest.writeInt(mNeedsUpdating ? 1 : 0); - dest.writeInt(mKeepInSync ? 1 : 0); + dest.writeInt(mFavorite ? 1 : 0); dest.writeLong(mLastSyncDateForProperties); dest.writeLong(mLastSyncDateForData); dest.writeString(mEtag); @@ -136,6 +159,9 @@ public class OCFile implements Parcelable, Comparable { dest.writeString(mPermissions); dest.writeString(mRemoteId); dest.writeInt(mNeedsUpdateThumbnail ? 1 : 0); + dest.writeInt(mIsDownloading ? 1 : 0); + dest.writeString(mEtagInConflict); + dest.writeInt(mShareWithSharee ? 1 : 0); } /** @@ -198,12 +224,31 @@ public class OCFile implements Parcelable, Comparable { } /** + * The URI to the file contents, if stored locally + * + * @return A URI to the local copy of the file, or NULL if not stored in the device + */ + public Uri getStorageUri() { + if (mLocalPath == null || mLocalPath.length() == 0) { + return null; + } + if (mLocalUri == null) { + Uri.Builder builder = new Uri.Builder(); + builder.scheme(ContentResolver.SCHEME_FILE); + builder.path(mLocalPath); + mLocalUri = builder.build(); + } + return mLocalUri; + } + + /** * Can be used to set the path where the file is stored * * @param storage_path to set */ public void setStoragePath(String storage_path) { mLocalPath = storage_path; + mLocalUri = null; } /** @@ -283,11 +328,13 @@ public class OCFile implements Parcelable, Comparable { /** * Sets the name of the file *

- * Does nothing if the new name is null, empty or includes "/" ; or if the file is the root directory + * Does nothing if the new name is null, empty or includes "/" ; or if the file is the root + * directory */ public void setFileName(String name) { Log_OC.d(TAG, "OCFile name changin from " + mRemotePath); - if (name != null && name.length() > 0 && !name.contains(PATH_SEPARATOR) && !mRemotePath.equals(ROOT_PATH)) { + if (name != null && name.length() > 0 && !name.contains(PATH_SEPARATOR) && + !mRemotePath.equals(ROOT_PATH)) { String parent = (new File(getRemotePath())).getParent(); parent = (parent.endsWith(PATH_SEPARATOR)) ? parent : parent + PATH_SEPARATOR; mRemotePath = parent + name; @@ -308,24 +355,6 @@ public class OCFile implements Parcelable, Comparable { } /** - * Adds a file to this directory. If this file is not a directory, an - * exception gets thrown. - * - * @param file to add - * @throws IllegalStateException if you try to add a something and this is - * not a directory - */ - public void addFile(OCFile file) throws IllegalStateException { - if (isFolder()) { - file.mParentId = mId; - mNeedsUpdating = true; - return; - } - throw new IllegalStateException( - "This is not a directory where you can add stuff to!"); - } - - /** * Used internally. Reset all file properties */ private void resetData() { @@ -340,7 +369,7 @@ public class OCFile implements Parcelable, Comparable { mModifiedTimestampAtLastSyncForData = 0; mLastSyncDateForProperties = 0; mLastSyncDateForData = 0; - mKeepInSync = false; + mFavorite = false; mNeedsUpdating = false; mEtag = null; mShareByLink = false; @@ -348,6 +377,9 @@ public class OCFile implements Parcelable, Comparable { mPermissions = null; mRemoteId = null; mNeedsUpdateThumbnail = false; + mIsDownloading = false; + mEtagInConflict = null; + mShareWithSharee = false; } /** @@ -437,17 +469,17 @@ public class OCFile implements Parcelable, Comparable { mLastSyncDateForData = lastSyncDate; } - public void setKeepInSync(boolean keepInSync) { - mKeepInSync = keepInSync; + public void setFavorite(boolean favorite) { + mFavorite = favorite; } - public boolean keepInSync() { - return mKeepInSync; + public boolean isFavorite() { + return mFavorite; } @Override public int describeContents() { - return ((Object) this).hashCode(); + return super.hashCode(); } @Override @@ -476,8 +508,11 @@ public class OCFile implements Parcelable, Comparable { @Override public String toString() { - String asString = "[id=%s, name=%s, mime=%s, downloaded=%s, local=%s, remote=%s, parentId=%s, keepInSync=%s etag=%s]"; - asString = String.format(asString, Long.valueOf(mId), getFileName(), mMimeType, isDown(), mLocalPath, mRemotePath, Long.valueOf(mParentId), Boolean.valueOf(mKeepInSync), mEtag); + String asString = "[id=%s, name=%s, mime=%s, downloaded=%s, local=%s, remote=%s, " + + "parentId=%s, favorite=%s etag=%s]"; + asString = String.format(asString, Long.valueOf(mId), getFileName(), mMimeType, isDown(), + mLocalPath, mRemotePath, Long.valueOf(mParentId), Boolean.valueOf(mFavorite), + mEtag); return asString; } @@ -486,15 +521,15 @@ public class OCFile implements Parcelable, Comparable { } public void setEtag(String etag) { - this.mEtag = etag; + this.mEtag = (etag != null ? etag : ""); } - public boolean isShareByLink() { + public boolean isSharedViaLink() { return mShareByLink; } - public void setShareByLink(boolean shareByLink) { + public void setShareViaLink(boolean shareByLink) { this.mShareByLink = shareByLink; } @@ -536,16 +571,32 @@ public class OCFile implements Parcelable, Comparable { getMimeTypeFromName().startsWith("image/")); } + /** + * @return 'True' if the file is simple text (e.g. not application-dependent, like .doc or .docx) + */ + public boolean isText() { + return ((mMimeType != null && mMimeType.startsWith("text/")) || + getMimeTypeFromName().startsWith("text/")); + } + public String getMimeTypeFromName() { String extension = ""; int pos = mRemotePath.lastIndexOf('.'); if (pos >= 0) { extension = mRemotePath.substring(pos + 1); } - String result = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension.toLowerCase()); + String result = MimeTypeMap.getSingleton(). + getMimeTypeFromExtension(extension.toLowerCase()); return (result != null) ? result : ""; } + /** + * @return 'True' if the file is hidden + */ + public boolean isHidden() { + return getFileName().startsWith("."); + } + public String getPermissions() { return mPermissions; } @@ -562,4 +613,32 @@ public class OCFile implements Parcelable, Comparable { this.mRemoteId = remoteId; } + public boolean isDownloading() { + return mIsDownloading; + } + + public void setDownloading(boolean isDownloading) { + this.mIsDownloading = isDownloading; + } + + public String getEtagInConflict() { + return mEtagInConflict; + } + + public void setEtagInConflict(String etagInConflict) { + mEtagInConflict = etagInConflict; + } + + public boolean isSharedWithSharee() { + return mShareWithSharee; + } + + public void setShareWithSharee(boolean shareWithSharee) { + this.mShareWithSharee = shareWithSharee; + } + + public boolean isSharedWithMe() { + String permissions = getPermissions(); + return (permissions != null && permissions.contains(PERMISSION_SHARED_WITH_ME)); + } }