From 3ccaec9efdf9a66b3b95797cf61efd8d4f194bb0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Abel=20Garci=CC=81a=20de=20Prada?= Date: Tue, 18 Jan 2022 09:23:26 +0100 Subject: [PATCH] Move content uri request body to a new file --- .../common/network/ContentUriRequestBody.kt | 63 +++++++++++++++++++ .../UploadFileFromContentUriOperation.kt | 43 ++----------- 2 files changed, 67 insertions(+), 39 deletions(-) create mode 100644 owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/network/ContentUriRequestBody.kt diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/network/ContentUriRequestBody.kt b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/network/ContentUriRequestBody.kt new file mode 100644 index 00000000..248d8527 --- /dev/null +++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/network/ContentUriRequestBody.kt @@ -0,0 +1,63 @@ +/* ownCloud Android Library is available under MIT license + * Copyright (C) 2022 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.common.network; + +import android.content.ContentResolver +import android.net.Uri +import android.provider.OpenableColumns +import okhttp3.MediaType +import okhttp3.MediaType.Companion.toMediaTypeOrNull +import okhttp3.RequestBody +import okio.BufferedSink +import okio.source +import java.io.IOException + +class ContentUriRequestBody( + private val contentResolver: ContentResolver, + private val contentUri: Uri +) : RequestBody() { + + override fun contentType(): MediaType? { + val contentType = contentResolver.getType(contentUri) ?: return null + return contentType.toMediaTypeOrNull() + } + + override fun contentLength(): Long { + contentResolver.query(contentUri, null, null, null, null)?.use { cursor -> + val sizeIndex = cursor.getColumnIndex(OpenableColumns.SIZE) + cursor.moveToFirst() + return cursor.getLong(sizeIndex) + } ?: return -1 + } + + override fun writeTo(sink: BufferedSink) { + val inputStream = contentResolver.openInputStream(contentUri) + ?: throw IOException("Couldn't open content URI for reading: $contentUri") + + inputStream.source().use { source -> + sink.writeAll(source) + } + } +} diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/UploadFileFromContentUriOperation.kt b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/UploadFileFromContentUriOperation.kt index dfcef34d..a2f2cb26 100644 --- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/UploadFileFromContentUriOperation.kt +++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/resources/files/UploadFileFromContentUriOperation.kt @@ -1,5 +1,5 @@ /* ownCloud Android Library is available under MIT license - * Copyright (C) 2021 ownCloud GmbH. + * Copyright (C) 2022 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,22 +24,15 @@ package com.owncloud.android.lib.resources.files -import android.content.ContentResolver -import android.net.Uri -import android.provider.OpenableColumns import com.owncloud.android.lib.common.OwnCloudClient import com.owncloud.android.lib.common.http.HttpConstants import com.owncloud.android.lib.common.http.methods.webdav.PutMethod +import com.owncloud.android.lib.common.network.ContentUriRequestBody import com.owncloud.android.lib.common.network.WebdavUtils import com.owncloud.android.lib.common.operations.RemoteOperation import com.owncloud.android.lib.common.operations.RemoteOperationResult -import okhttp3.MediaType -import okhttp3.MediaType.Companion.toMediaTypeOrNull -import okhttp3.RequestBody -import okio.BufferedSink -import okio.source +import com.owncloud.android.lib.common.utils.isOneOf import timber.log.Timber -import java.io.IOException import java.net.URL class UploadFileFromContentUriOperation( @@ -70,34 +63,6 @@ class UploadFileFromContentUriOperation( } fun isSuccess(status: Int): Boolean { - return status == HttpConstants.HTTP_OK || status == HttpConstants.HTTP_CREATED || status == HttpConstants.HTTP_NO_CONTENT - } -} - -class ContentUriRequestBody( - private val contentResolver: ContentResolver, - private val contentUri: Uri -) : RequestBody() { - - override fun contentType(): MediaType? { - val contentType = contentResolver.getType(contentUri) ?: return null - return contentType.toMediaTypeOrNull() - } - - override fun contentLength(): Long { - contentResolver.query(contentUri, null, null, null, null)?.use { cursor -> - val sizeIndex = cursor.getColumnIndex(OpenableColumns.SIZE) - cursor.moveToFirst() - return cursor.getLong(sizeIndex) - } ?: return -1 - } - - override fun writeTo(sink: BufferedSink) { - val inputStream = contentResolver.openInputStream(contentUri) - ?: throw IOException("Couldn't open content URI for reading: $contentUri") - - inputStream.source().use { source -> - sink.writeAll(source) - } + return status.isOneOf(HttpConstants.HTTP_OK, HttpConstants.HTTP_CREATED, HttpConstants.HTTP_NO_CONTENT) } }