From ef4d83a691bccc8fa8e12fb72a131031e9128273 Mon Sep 17 00:00:00 2001 From: sowjanyakch Date: Tue, 25 Feb 2025 23:58:39 +0100 Subject: [PATCH] create a new folder Signed-off-by: sowjanyakch --- .../talk/jobs/UploadAndShareFilesWorker.kt | 2 +- .../talk/upload/normal/FileUploader.kt | 64 +++++++++++-------- .../java/com/nextcloud/talk/utils/ApiUtils.kt | 4 ++ .../res/layout/activity_conversation_info.xml | 58 ++++++++--------- 4 files changed, 73 insertions(+), 55 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/jobs/UploadAndShareFilesWorker.kt b/app/src/main/java/com/nextcloud/talk/jobs/UploadAndShareFilesWorker.kt index d875e5071..709e44473 100644 --- a/app/src/main/java/com/nextcloud/talk/jobs/UploadAndShareFilesWorker.kt +++ b/app/src/main/java/com/nextcloud/talk/jobs/UploadAndShareFilesWorker.kt @@ -151,7 +151,7 @@ class UploadAndShareFilesWorker(val context: Context, workerParameters: WorkerPa } else { Log.d(TAG, "starting normal upload (not chunked) of $fileName") - FileUploader(okHttpClient, context, currentUser, roomToken, ncApi) + FileUploader(okHttpClient, context, currentUser, roomToken, ncApi, file!!) .upload(sourceFileUri, fileName, remotePath, metaData) .blockingFirst() } diff --git a/app/src/main/java/com/nextcloud/talk/upload/normal/FileUploader.kt b/app/src/main/java/com/nextcloud/talk/upload/normal/FileUploader.kt index cfe811814..6438eb28e 100644 --- a/app/src/main/java/com/nextcloud/talk/upload/normal/FileUploader.kt +++ b/app/src/main/java/com/nextcloud/talk/upload/normal/FileUploader.kt @@ -27,6 +27,7 @@ import okhttp3.OkHttpClient import okhttp3.Protocol import okhttp3.RequestBody import okhttp3.Response +import java.io.File import java.io.IOException import java.io.InputStream @@ -35,11 +36,14 @@ class FileUploader( val context: Context, val currentUser: User, val roomToken: String, - val ncApi: NcApi + val ncApi: NcApi, + val file: File ) { private var okHttpClientNoRedirects: OkHttpClient? = null private var uploadFolderUri: String = "" + private var uploadFileUri:String = "" + init { initHttpClient(okHttpClient, currentUser) } @@ -63,17 +67,21 @@ class FileUploader( true } else { if (response.code() == 404 || response.code() == 409) { - uploadFolderUri = ApiUtils.getUrlForFileUpload( + uploadFileUri = ApiUtils.getUrlForFile( currentUser.baseUrl!!, currentUser.userId!!, - remotePath ) + + uploadFolderUri = uploadFileUri + "/" + FileUtils.md5Sum(file) + val davResource = DavResource( okHttpClientNoRedirects!!, uploadFolderUri.toHttpUrlOrNull()!! + ) + createFolder(davResource) - retryUpload(sourceFileUri, remotePath, fileName, metaData) - true + val value = retryUpload(sourceFileUri, remotePath, fileName, metaData) + value } else { false } @@ -100,9 +108,9 @@ class FileUploader( private fun initHttpClient(okHttpClient: OkHttpClient, currentUser: User) { val okHttpClientBuilder: OkHttpClient.Builder = okHttpClient.newBuilder() - okHttpClientBuilder.followRedirects(true) - okHttpClientBuilder.followSslRedirects(true) - okHttpClientBuilder.protocols(listOf(Protocol.HTTP_1_1, Protocol.HTTP_2)) + okHttpClientBuilder.followRedirects(false) + okHttpClientBuilder.followSslRedirects(false) + okHttpClientBuilder.protocols(listOf(Protocol.HTTP_1_1)) okHttpClientBuilder.authenticator( RestModule.HttpAuthenticator( ApiUtils.getCredentials( @@ -137,26 +145,32 @@ class FileUploader( private fun retryUpload( sourceFileUri: Uri, - uploadUrl: String, + remotePath: String, fileName: String, metaData: String? - ): Observable { - return ncApi.uploadFile( - ApiUtils.getCredentials(currentUser.username, currentUser.token), - uploadUrl, - createRequestBody(sourceFileUri) - ) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .map { retryResponse -> - if (retryResponse.isSuccessful) { - ShareOperationWorker.shareFile(roomToken, currentUser, uploadUrl, metaData) - FileUtils.copyFileToCache(context, sourceFileUri, fileName) - true - } else { - false + ): Boolean { + return try { + ncApi.uploadFile( + ApiUtils.getCredentials(currentUser.username, currentUser.token), + ApiUtils.getUrlForFileUpload(currentUser.baseUrl!!, currentUser.userId!!, remotePath), + createRequestBody(sourceFileUri) + ) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .map { retryResponse -> + if (retryResponse.isSuccessful) { + ShareOperationWorker.shareFile(roomToken, currentUser, remotePath, metaData) + FileUtils.copyFileToCache(context, sourceFileUri, fileName) + true + } else { + false + } } - } + .blockingFirst() + } catch (e: Exception) { + Log.e(TAG, "Retry upload failed", e) + false + } } companion object { diff --git a/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.kt b/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.kt index 755e8959b..bf37df1b2 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.kt +++ b/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.kt @@ -459,6 +459,10 @@ object ApiUtils { return "$baseUrl/remote.php/dav/files/$user/$remotePath" } + fun getUrlForFile(baseUrl: String, user: String): String { + return "$baseUrl/remote.php/dav/files/$user" + } + fun getUrlForTempAvatar(baseUrl: String): String { return "$baseUrl$OCS_API_VERSION/apps/spreed/temp-user-avatar" } diff --git a/app/src/main/res/layout/activity_conversation_info.xml b/app/src/main/res/layout/activity_conversation_info.xml index 9da666b8b..f67dac31e 100644 --- a/app/src/main/res/layout/activity_conversation_info.xml +++ b/app/src/main/res/layout/activity_conversation_info.xml @@ -90,6 +90,35 @@ + + + + + + + + + + - - - - - - - - - -