mirror of
				https://github.com/owncloud/android-library.git
				synced 2025-10-31 02:17:41 +00:00 
			
		
		
		
	Transform RemoteFile to kotlin and apply necessary changes
This commit is contained in:
		
							parent
							
								
									5e478036ae
								
							
						
					
					
						commit
						53c99a21c2
					
				| @ -1,6 +1,7 @@ | |||||||
| apply plugin: 'com.android.library' | apply plugin: 'com.android.library' | ||||||
| apply plugin: 'kotlin-android' | apply plugin: 'kotlin-android' | ||||||
| apply plugin: 'kotlin-kapt' | apply plugin: 'kotlin-kapt' | ||||||
|  | apply plugin: 'kotlin-android-extensions' | ||||||
| 
 | 
 | ||||||
| dependencies { | dependencies { | ||||||
|     api 'com.squareup.okhttp3:okhttp:4.6.0' |     api 'com.squareup.okhttp3:okhttp:4.6.0' | ||||||
|  | |||||||
| @ -88,7 +88,8 @@ public class ReadRemoteFileOperation extends RemoteOperation<RemoteFile> { | |||||||
|             if (status == HttpConstants.HTTP_MULTI_STATUS |             if (status == HttpConstants.HTTP_MULTI_STATUS | ||||||
|                     || status == HttpConstants.HTTP_OK) { |                     || status == HttpConstants.HTTP_OK) { | ||||||
| 
 | 
 | ||||||
|                 final RemoteFile file = new RemoteFile(propfind.getRoot(), AccountUtils.getUserId(mAccount, mContext)); |                 final RemoteFile file = RemoteFile.Companion.getRemoteFileFromDav(propfind.getRoot(), | ||||||
|  |                         AccountUtils.getUserId(mAccount, mContext), mAccount.name); | ||||||
| 
 | 
 | ||||||
|                 result = new RemoteOperationResult<>(OK); |                 result = new RemoteOperationResult<>(OK); | ||||||
|                 result.setData(file); |                 result.setData(file); | ||||||
|  | |||||||
| @ -70,16 +70,22 @@ class ReadRemoteFolderOperation( | |||||||
|                 val mFolderAndFiles = ArrayList<RemoteFile>() |                 val mFolderAndFiles = ArrayList<RemoteFile>() | ||||||
| 
 | 
 | ||||||
|                 // parse data from remote folder |                 // parse data from remote folder | ||||||
|                 val remoteFolder = RemoteFile(propfindMethod.root, AccountUtils.getUserId(mAccount, mContext)).apply { |                 // TODO: Remove that !! | ||||||
|                     owner = mAccount.name |                 val remoteFolder = RemoteFile.getRemoteFileFromDav( | ||||||
|                 } |                     davResource = propfindMethod.root!!, | ||||||
|  |                     userId = AccountUtils.getUserId(mAccount, mContext), | ||||||
|  |                     userName = mAccount.name | ||||||
|  |                 ) | ||||||
|                 mFolderAndFiles.add(remoteFolder) |                 mFolderAndFiles.add(remoteFolder) | ||||||
| 
 | 
 | ||||||
|                 // loop to update every child |                 // loop to update every child | ||||||
|                 propfindMethod.members.forEach { resource -> |                 propfindMethod.members.forEach { resource -> | ||||||
|                     val file = RemoteFile(resource, AccountUtils.getUserId(mAccount, mContext)) |                     val remoteFile = RemoteFile.getRemoteFileFromDav( | ||||||
|                     file.owner = mAccount.name |                         davResource = resource, | ||||||
|                     mFolderAndFiles.add(file) |                         userId = AccountUtils.getUserId(mAccount, mContext), | ||||||
|  |                         userName = mAccount.name | ||||||
|  |                     ) | ||||||
|  |                     mFolderAndFiles.add(remoteFile) | ||||||
|                 } |                 } | ||||||
| 
 | 
 | ||||||
|                 // Result of the operation |                 // Result of the operation | ||||||
|  | |||||||
| @ -1,372 +0,0 @@ | |||||||
| /* ownCloud Android Library is available under MIT license |  | ||||||
|  *   Copyright (C) 2020 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 |  | ||||||
|  *   in the Software without restriction, including without limitation the rights |  | ||||||
|  *   to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |  | ||||||
|  *   copies of the Software, and to permit persons to whom the Software is |  | ||||||
|  *   furnished to do so, subject to the following conditions: |  | ||||||
|  * |  | ||||||
|  *   The above copyright notice and this permission notice shall be included in |  | ||||||
|  *   all copies or substantial portions of the Software. |  | ||||||
|  * |  | ||||||
|  *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |  | ||||||
|  *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |  | ||||||
|  *   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |  | ||||||
|  *   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS |  | ||||||
|  *   BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN |  | ||||||
|  *   ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN |  | ||||||
|  *   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |  | ||||||
|  *   THE SOFTWARE. |  | ||||||
|  * |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| package com.owncloud.android.lib.resources.files; |  | ||||||
| 
 |  | ||||||
| import android.os.Parcel; |  | ||||||
| import android.os.Parcelable; |  | ||||||
| 
 |  | ||||||
| import at.bitfire.dav4jvm.Property; |  | ||||||
| import at.bitfire.dav4jvm.Response; |  | ||||||
| import at.bitfire.dav4jvm.property.CreationDate; |  | ||||||
| import at.bitfire.dav4jvm.property.GetContentLength; |  | ||||||
| import at.bitfire.dav4jvm.property.GetContentType; |  | ||||||
| import at.bitfire.dav4jvm.property.GetETag; |  | ||||||
| import at.bitfire.dav4jvm.property.GetLastModified; |  | ||||||
| import at.bitfire.dav4jvm.property.OCId; |  | ||||||
| import at.bitfire.dav4jvm.property.OCPermissions; |  | ||||||
| import at.bitfire.dav4jvm.property.OCPrivatelink; |  | ||||||
| import at.bitfire.dav4jvm.property.OCSize; |  | ||||||
| import at.bitfire.dav4jvm.property.QuotaAvailableBytes; |  | ||||||
| import at.bitfire.dav4jvm.property.QuotaUsedBytes; |  | ||||||
| import com.owncloud.android.lib.common.http.methods.webdav.properties.OCShareTypes; |  | ||||||
| import com.owncloud.android.lib.resources.shares.ShareType; |  | ||||||
| import timber.log.Timber; |  | ||||||
| 
 |  | ||||||
| import java.io.File; |  | ||||||
| import java.io.Serializable; |  | ||||||
| import java.math.BigDecimal; |  | ||||||
| import java.util.LinkedList; |  | ||||||
| import java.util.List; |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * Contains the data of a Remote File from a WebDavEntry |  | ||||||
|  * |  | ||||||
|  * @author masensio |  | ||||||
|  * @author Christian Schabesberger |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| public class RemoteFile implements Parcelable, Serializable { |  | ||||||
| 
 |  | ||||||
|     /** |  | ||||||
|      * Parcelable Methods |  | ||||||
|      */ |  | ||||||
|     public static final Parcelable.Creator<RemoteFile> CREATOR = new Parcelable.Creator<RemoteFile>() { |  | ||||||
|         @Override |  | ||||||
|         public RemoteFile createFromParcel(Parcel source) { |  | ||||||
|             return new RemoteFile(source); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         @Override |  | ||||||
|         public RemoteFile[] newArray(int size) { |  | ||||||
|             return new RemoteFile[size]; |  | ||||||
|         } |  | ||||||
|     }; |  | ||||||
|     /** |  | ||||||
|      * 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; |  | ||||||
|     private boolean mSharedByLink; |  | ||||||
|     private boolean mSharedWithSharee; |  | ||||||
|     private String mOwner; |  | ||||||
| 
 |  | ||||||
|     public RemoteFile() { |  | ||||||
|         resetData(); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     /** |  | ||||||
|      * Create new {@link RemoteFile} with given path. |  | ||||||
|      * <p> |  | ||||||
|      * The path received must be URL-decoded. Path separator must be File.separator, and it must be the first |  | ||||||
|      * character in 'path'. |  | ||||||
|      * |  | ||||||
|      * @param path The remote path of the file. |  | ||||||
|      */ |  | ||||||
|     public RemoteFile(String path) { |  | ||||||
|         resetData(); |  | ||||||
|         if (path == null || path.length() <= 0 || !path.startsWith(File.separator)) { |  | ||||||
|             throw new IllegalArgumentException("Trying to create a OCFile with a non valid remote path: " + path); |  | ||||||
|         } |  | ||||||
|         mRemotePath = path; |  | ||||||
|         mCreationTimestamp = 0; |  | ||||||
|         mLength = 0; |  | ||||||
|         mMimeType = FileUtils.MIME_DIR; |  | ||||||
|         mQuotaUsedBytes = BigDecimal.ZERO; |  | ||||||
|         mQuotaAvailableBytes = BigDecimal.ZERO; |  | ||||||
|         mPrivateLink = null; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public RemoteFile(final Response davResource, String userId) { |  | ||||||
|         this(RemoteFileUtil.Companion.getRemotePathFromUrl(davResource.getHref(), userId)); |  | ||||||
|         final List<Property> properties = RemoteFileUtil.Companion.getProperties(davResource); |  | ||||||
| 
 |  | ||||||
|         for (Property property : properties) { |  | ||||||
|             if (property instanceof CreationDate) { |  | ||||||
|                 this.setCreationTimestamp( |  | ||||||
|                         Long.parseLong(((CreationDate) property).getCreationDate())); |  | ||||||
|             } |  | ||||||
|             if (property instanceof GetContentLength) { |  | ||||||
|                 this.setLength(((GetContentLength) property).getContentLength()); |  | ||||||
|             } |  | ||||||
|             if (property instanceof GetContentType) { |  | ||||||
|                 this.setMimeType(((GetContentType) property).getType()); |  | ||||||
|             } |  | ||||||
|             if (property instanceof GetLastModified) { |  | ||||||
|                 this.setModifiedTimestamp(((GetLastModified) property).getLastModified()); |  | ||||||
|             } |  | ||||||
|             if (property instanceof GetETag) { |  | ||||||
|                 this.setEtag(((GetETag) property).getETag()); |  | ||||||
|             } |  | ||||||
|             if (property instanceof OCPermissions) { |  | ||||||
|                 this.setPermissions(((OCPermissions) property).getPermission()); |  | ||||||
|             } |  | ||||||
|             if (property instanceof OCId) { |  | ||||||
|                 this.setRemoteId(((OCId) property).getId()); |  | ||||||
|             } |  | ||||||
|             if (property instanceof OCSize) { |  | ||||||
|                 this.setSize(((OCSize) property).getSize()); |  | ||||||
|             } |  | ||||||
|             if (property instanceof QuotaUsedBytes) { |  | ||||||
|                 this.setQuotaUsedBytes( |  | ||||||
|                         BigDecimal.valueOf(((QuotaUsedBytes) property).getQuotaUsedBytes())); |  | ||||||
|             } |  | ||||||
|             if (property instanceof QuotaAvailableBytes) { |  | ||||||
|                 this.setQuotaAvailableBytes( |  | ||||||
|                         BigDecimal.valueOf(((QuotaAvailableBytes) property).getQuotaAvailableBytes())); |  | ||||||
|             } |  | ||||||
|             if (property instanceof OCPrivatelink) { |  | ||||||
|                 this.setPrivateLink(((OCPrivatelink) property).getLink()); |  | ||||||
|             } |  | ||||||
|             if (property instanceof OCShareTypes) { |  | ||||||
|                 LinkedList<String> list = ((OCShareTypes) property).getShareTypes(); |  | ||||||
|                 for (int i = 0; i < list.size(); i++) { |  | ||||||
|                     ShareType shareType = ShareType.Companion.fromValue(Integer.parseInt(list.get(i))); |  | ||||||
|                     if (shareType == null) { |  | ||||||
|                         Timber.d("Illegal share type value: " + list.get(i)); |  | ||||||
|                         continue; |  | ||||||
|                     } |  | ||||||
|                     if (shareType.equals(ShareType.PUBLIC_LINK)) { |  | ||||||
|                         this.setSharedViaLink(true); |  | ||||||
|                     } else if (shareType.equals(ShareType.USER) || |  | ||||||
|                             shareType.equals(ShareType.FEDERATED) || |  | ||||||
|                             shareType.equals(ShareType.GROUP)) { |  | ||||||
|                         this.setSharedWithSharee(true); |  | ||||||
|                     } |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     /** |  | ||||||
|      * Reconstruct from parcel |  | ||||||
|      * |  | ||||||
|      * @param source The source parcel |  | ||||||
|      */ |  | ||||||
|     protected RemoteFile(Parcel source) { |  | ||||||
|         readFromParcel(source); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     /** |  | ||||||
|      * Use this to find out if this file is a folder. |  | ||||||
|      * |  | ||||||
|      * @return true if it is a folder |  | ||||||
|      */ |  | ||||||
|     public boolean isFolder() { |  | ||||||
|         return mMimeType != null && (mMimeType.equals(FileUtils.MIME_DIR) || mMimeType.equals(FileUtils.MIME_DIR_UNIX)); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     /** |  | ||||||
|      * Getters and Setters |  | ||||||
|      */ |  | ||||||
| 
 |  | ||||||
|     public String getRemotePath() { |  | ||||||
|         return mRemotePath; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public void setRemotePath(String remotePath) { |  | ||||||
|         this.mRemotePath = remotePath; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public String getMimeType() { |  | ||||||
|         return mMimeType; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public void setMimeType(String mimeType) { |  | ||||||
|         this.mMimeType = mimeType; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public long getLength() { |  | ||||||
|         return mLength; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public void setLength(long length) { |  | ||||||
|         this.mLength = length; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public long getCreationTimestamp() { |  | ||||||
|         return mCreationTimestamp; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public void setCreationTimestamp(long creationTimestamp) { |  | ||||||
|         this.mCreationTimestamp = creationTimestamp; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public long getModifiedTimestamp() { |  | ||||||
|         return mModifiedTimestamp; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public void setModifiedTimestamp(long modifiedTimestamp) { |  | ||||||
|         this.mModifiedTimestamp = modifiedTimestamp; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public String getEtag() { |  | ||||||
|         return mEtag; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public void setEtag(String etag) { |  | ||||||
|         this.mEtag = etag; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public String getPermissions() { |  | ||||||
|         return mPermissions; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public void setPermissions(String permissions) { |  | ||||||
|         this.mPermissions = permissions; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public String getRemoteId() { |  | ||||||
|         return mRemoteId; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public void setRemoteId(String remoteId) { |  | ||||||
|         this.mRemoteId = remoteId; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public long getSize() { |  | ||||||
|         return mSize; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public void setSize(long size) { |  | ||||||
|         mSize = size; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public void setQuotaUsedBytes(BigDecimal quotaUsedBytes) { |  | ||||||
|         mQuotaUsedBytes = quotaUsedBytes; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public void setQuotaAvailableBytes(BigDecimal quotaAvailableBytes) { |  | ||||||
|         mQuotaAvailableBytes = quotaAvailableBytes; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public String getPrivateLink() { |  | ||||||
|         return mPrivateLink; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public void setPrivateLink(String privateLink) { |  | ||||||
|         mPrivateLink = privateLink; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public void setSharedWithSharee(boolean shareWithSharee) { |  | ||||||
|         mSharedWithSharee = shareWithSharee; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public boolean isSharedWithSharee() { |  | ||||||
|         return mSharedWithSharee; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public void setSharedViaLink(boolean sharedViaLink) { |  | ||||||
|         mSharedByLink = sharedViaLink; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public boolean isSharedByLink() { |  | ||||||
|         return mSharedByLink; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public String getOwner() { |  | ||||||
|         return mOwner; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public void setOwner(String owner) { |  | ||||||
|         mOwner = owner; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     /** |  | ||||||
|      * Used internally. Reset all file properties |  | ||||||
|      */ |  | ||||||
|     private void resetData() { |  | ||||||
|         mRemotePath = null; |  | ||||||
|         mMimeType = null; |  | ||||||
|         mLength = 0; |  | ||||||
|         mCreationTimestamp = 0; |  | ||||||
|         mModifiedTimestamp = 0; |  | ||||||
|         mEtag = null; |  | ||||||
|         mPermissions = null; |  | ||||||
|         mRemoteId = null; |  | ||||||
|         mSize = 0; |  | ||||||
|         mQuotaUsedBytes = null; |  | ||||||
|         mQuotaAvailableBytes = null; |  | ||||||
|         mPrivateLink = null; |  | ||||||
|         mSharedWithSharee = false; |  | ||||||
|         mSharedByLink = false; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     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(); |  | ||||||
|         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); |  | ||||||
|         dest.writeLong(mSize); |  | ||||||
|         dest.writeSerializable(mQuotaUsedBytes); |  | ||||||
|         dest.writeSerializable(mQuotaAvailableBytes); |  | ||||||
|         dest.writeString(mPrivateLink); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @ -0,0 +1,174 @@ | |||||||
|  | /* ownCloud Android Library is available under MIT license | ||||||
|  |  *   Copyright (C) 2020 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 | ||||||
|  |  *   in the Software without restriction, including without limitation the rights | ||||||
|  |  *   to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||||||
|  |  *   copies of the Software, and to permit persons to whom the Software is | ||||||
|  |  *   furnished to do so, subject to the following conditions: | ||||||
|  |  * | ||||||
|  |  *   The above copyright notice and this permission notice shall be included in | ||||||
|  |  *   all copies or substantial portions of the Software. | ||||||
|  |  * | ||||||
|  |  *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | ||||||
|  |  *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | ||||||
|  |  *   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND | ||||||
|  |  *   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS | ||||||
|  |  *   BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||||||
|  |  *   ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | ||||||
|  |  *   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||||||
|  |  *   THE SOFTWARE. | ||||||
|  |  * | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | package com.owncloud.android.lib.resources.files | ||||||
|  | 
 | ||||||
|  | import android.net.Uri | ||||||
|  | import android.os.Parcelable | ||||||
|  | import at.bitfire.dav4jvm.PropStat | ||||||
|  | import at.bitfire.dav4jvm.Property | ||||||
|  | import at.bitfire.dav4jvm.Response | ||||||
|  | import at.bitfire.dav4jvm.property.CreationDate | ||||||
|  | import at.bitfire.dav4jvm.property.GetContentLength | ||||||
|  | import at.bitfire.dav4jvm.property.GetContentType | ||||||
|  | import at.bitfire.dav4jvm.property.GetETag | ||||||
|  | import at.bitfire.dav4jvm.property.GetLastModified | ||||||
|  | import at.bitfire.dav4jvm.property.OCId | ||||||
|  | import at.bitfire.dav4jvm.property.OCPermissions | ||||||
|  | import at.bitfire.dav4jvm.property.OCPrivatelink | ||||||
|  | import at.bitfire.dav4jvm.property.OCSize | ||||||
|  | import at.bitfire.dav4jvm.property.QuotaAvailableBytes | ||||||
|  | import at.bitfire.dav4jvm.property.QuotaUsedBytes | ||||||
|  | import com.owncloud.android.lib.common.OwnCloudClient | ||||||
|  | import com.owncloud.android.lib.common.http.HttpConstants | ||||||
|  | import com.owncloud.android.lib.common.http.methods.webdav.properties.OCShareTypes | ||||||
|  | import com.owncloud.android.lib.resources.shares.ShareType | ||||||
|  | import com.owncloud.android.lib.resources.shares.ShareType.Companion.fromValue | ||||||
|  | import kotlinx.parcelize.Parcelize | ||||||
|  | import okhttp3.HttpUrl | ||||||
|  | import timber.log.Timber | ||||||
|  | import java.io.File | ||||||
|  | import java.math.BigDecimal | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Contains the data of a Remote File from a WebDavEntry | ||||||
|  |  * | ||||||
|  |  * The path received must be URL-decoded. Path separator must be File.separator, and it must be the first character in 'path'. | ||||||
|  |  * | ||||||
|  |  * @author masensio | ||||||
|  |  * @author Christian Schabesberger | ||||||
|  |  * @author Abel García de Prada | ||||||
|  |  */ | ||||||
|  | @Parcelize | ||||||
|  | data class RemoteFile( | ||||||
|  |     var remotePath: String, | ||||||
|  |     var mimeType: String = "DIR", | ||||||
|  |     var length: Long = 0, | ||||||
|  |     var creationTimestamp: Long = 0, | ||||||
|  |     var modifiedTimestamp: Long = 0, | ||||||
|  |     var etag: String? = null, | ||||||
|  |     var permissions: String? = null, | ||||||
|  |     var remoteId: String? = null, | ||||||
|  |     var size: Long = 0, | ||||||
|  |     var quotaUsedBytes: BigDecimal? = null, | ||||||
|  |     var quotaAvailableBytes: BigDecimal? = null, | ||||||
|  |     var privateLink: String? = null, | ||||||
|  |     var owner: String, | ||||||
|  |     var sharedByLink: Boolean = false, | ||||||
|  |     var sharedWithSharee: Boolean = false, | ||||||
|  | ) : Parcelable { | ||||||
|  | 
 | ||||||
|  |     init { | ||||||
|  |         require(!(remotePath.isEmpty() || !remotePath.startsWith(File.separator))) { "Trying to create a OCFile with a non valid remote path: $remotePath" } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     companion object { | ||||||
|  | 
 | ||||||
|  |         fun getRemoteFileFromDav(davResource: Response, userId: String, userName: String): RemoteFile { | ||||||
|  |             val remotePath = getRemotePathFromUrl(davResource.href, userId) | ||||||
|  |             val remoteFile = RemoteFile(remotePath = remotePath, owner = userName) | ||||||
|  |             val properties = getPropertiesEvenIfPostProcessing(davResource) | ||||||
|  | 
 | ||||||
|  |             for (property in properties) { | ||||||
|  |                 when (property) { | ||||||
|  |                     is CreationDate -> { | ||||||
|  |                         remoteFile.creationTimestamp = property.creationDate.toLong() | ||||||
|  |                     } | ||||||
|  |                     is GetContentLength -> { | ||||||
|  |                         remoteFile.length = property.contentLength | ||||||
|  |                     } | ||||||
|  |                     is GetContentType -> { | ||||||
|  |                         property.type?.let { remoteFile.mimeType = it } | ||||||
|  |                     } | ||||||
|  |                     is GetLastModified -> { | ||||||
|  |                         remoteFile.modifiedTimestamp = property.lastModified | ||||||
|  |                     } | ||||||
|  |                     is GetETag -> { | ||||||
|  |                         remoteFile.etag = property.eTag | ||||||
|  |                     } | ||||||
|  |                     is OCPermissions -> { | ||||||
|  |                         remoteFile.permissions = property.permission | ||||||
|  |                     } | ||||||
|  |                     is OCId -> { | ||||||
|  |                         remoteFile.remoteId = property.id | ||||||
|  |                     } | ||||||
|  |                     is OCSize -> { | ||||||
|  |                         remoteFile.size = property.size | ||||||
|  |                     } | ||||||
|  |                     is QuotaUsedBytes -> { | ||||||
|  |                         remoteFile.quotaUsedBytes = BigDecimal.valueOf(property.quotaUsedBytes) | ||||||
|  |                     } | ||||||
|  |                     is QuotaAvailableBytes -> { | ||||||
|  |                         remoteFile.quotaAvailableBytes = BigDecimal.valueOf(property.quotaAvailableBytes) | ||||||
|  |                     } | ||||||
|  |                     is OCPrivatelink -> { | ||||||
|  |                         remoteFile.privateLink = property.link | ||||||
|  |                     } | ||||||
|  |                     is OCShareTypes -> { | ||||||
|  |                         val list = property.shareTypes | ||||||
|  |                         for (i in list.indices) { | ||||||
|  |                             val shareType = fromValue(list[i].toInt()) | ||||||
|  |                             if (shareType == null) { | ||||||
|  |                                 Timber.d("Illegal share type value: " + list[i]) | ||||||
|  |                                 continue | ||||||
|  |                             } | ||||||
|  |                             if (shareType == ShareType.PUBLIC_LINK) { | ||||||
|  |                                 remoteFile.sharedByLink = true | ||||||
|  |                             } else if (shareType == ShareType.USER || shareType == ShareType.FEDERATED || shareType == ShareType.GROUP) { | ||||||
|  |                                 remoteFile.sharedWithSharee = true | ||||||
|  |                             } | ||||||
|  |                         } | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |             return remoteFile | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         /** | ||||||
|  |          * Retrieves a relative path from a remote file url | ||||||
|  |          * | ||||||
|  |          * | ||||||
|  |          * Example: url:port/remote.php/dav/files/username/Documents/text.txt => /Documents/text.txt | ||||||
|  |          * | ||||||
|  |          * @param url    remote file url | ||||||
|  |          * @param userId file owner | ||||||
|  |          * @return remote relative path of the file | ||||||
|  |          */ | ||||||
|  |         private fun getRemotePathFromUrl(url: HttpUrl, userId: String): String { | ||||||
|  |             val davFilesPath = OwnCloudClient.WEBDAV_FILES_PATH_4_0 + userId | ||||||
|  |             val absoluteDavPath = Uri.decode(url.encodedPath) | ||||||
|  |             val pathToOc = absoluteDavPath.split(davFilesPath)[0] | ||||||
|  |             return absoluteDavPath.replace(pathToOc + davFilesPath, "") | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         private fun getPropertiesEvenIfPostProcessing(response: Response): List<Property> { | ||||||
|  |             return if (response.isSuccess()) | ||||||
|  |                 response.propstat.filter { propStat -> propStat.isSuccessOrPostProcessing() }.map { it.properties }.flatten() | ||||||
|  |             else | ||||||
|  |                 emptyList() | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         private fun PropStat.isSuccessOrPostProcessing() = (status.code / 100 == 2 || status.code == HttpConstants.HTTP_TOO_EARLY) | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -1,62 +0,0 @@ | |||||||
| /* ownCloud Android Library is available under MIT license |  | ||||||
|  *   Copyright (C) 2020 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 |  | ||||||
|  *   in the Software without restriction, including without limitation the rights |  | ||||||
|  *   to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |  | ||||||
|  *   copies of the Software, and to permit persons to whom the Software is |  | ||||||
|  *   furnished to do so, subject to the following conditions: |  | ||||||
|  * |  | ||||||
|  *   The above copyright notice and this permission notice shall be included in |  | ||||||
|  *   all copies or substantial portions of the Software. |  | ||||||
|  * |  | ||||||
|  *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |  | ||||||
|  *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |  | ||||||
|  *   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |  | ||||||
|  *   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS |  | ||||||
|  *   BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN |  | ||||||
|  *   ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN |  | ||||||
|  *   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |  | ||||||
|  *   THE SOFTWARE. |  | ||||||
|  * |  | ||||||
|  */ |  | ||||||
| package com.owncloud.android.lib.resources.files |  | ||||||
| 
 |  | ||||||
| import android.net.Uri |  | ||||||
| import at.bitfire.dav4jvm.PropStat |  | ||||||
| import at.bitfire.dav4jvm.Property |  | ||||||
| import at.bitfire.dav4jvm.Response |  | ||||||
| import com.owncloud.android.lib.common.OwnCloudClient |  | ||||||
| import com.owncloud.android.lib.common.http.HttpConstants |  | ||||||
| import okhttp3.HttpUrl |  | ||||||
| 
 |  | ||||||
| class RemoteFileUtil { |  | ||||||
|     companion object { |  | ||||||
|         /** |  | ||||||
|          * Retrieves a relative path from a remote file url |  | ||||||
|          * |  | ||||||
|          * |  | ||||||
|          * Example: url:port/remote.php/dav/files/username/Documents/text.txt => /Documents/text.txt |  | ||||||
|          * |  | ||||||
|          * @param url    remote file url |  | ||||||
|          * @param userId file owner |  | ||||||
|          * @return remote relative path of the file |  | ||||||
|          */ |  | ||||||
|         fun getRemotePathFromUrl(url: HttpUrl, userId: String): String? { |  | ||||||
|             val davFilesPath = OwnCloudClient.WEBDAV_FILES_PATH_4_0 + userId |  | ||||||
|             val absoluteDavPath = Uri.decode(url.encodedPath) |  | ||||||
|             val pathToOc = absoluteDavPath.split(davFilesPath)[0] |  | ||||||
|             return absoluteDavPath.replace(pathToOc + davFilesPath, "") |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         fun getProperties(response: Response): List<Property> { |  | ||||||
|             return if (response.isSuccess()) |  | ||||||
|                 response.propstat.filter { propStat -> propStat.isSuccessOrPostProcessing() }.map { it.properties }.flatten() |  | ||||||
|             else |  | ||||||
|                 emptyList() |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         private fun PropStat.isSuccessOrPostProcessing() = (status.code / 100 == 2 || status.code == HttpConstants.HTTP_TOO_EARLY) |  | ||||||
|     } |  | ||||||
| } |  | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user