From c0376c8eed1e39fbdeb02c56e67740e908a428a2 Mon Sep 17 00:00:00 2001 From: sowjanyakch Date: Wed, 26 Feb 2025 19:43:04 +0100 Subject: [PATCH] uploading file works for first time users Signed-off-by: sowjanyakch --- .../talk/upload/normal/FileUploader.kt | 54 ++++++++++--------- .../java/com/nextcloud/talk/utils/ApiUtils.kt | 6 ++- 2 files changed, 34 insertions(+), 26 deletions(-) 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 0dc26523b..e730961f6 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 @@ -41,7 +41,8 @@ class FileUploader( ) { private var okHttpClientNoRedirects: OkHttpClient? = null - private var uploadFileUri:String = "" + private var okhttpClient:OkHttpClient = okHttpClient + init { initHttpClient(okHttpClient, currentUser) @@ -54,39 +55,40 @@ class FileUploader( createRequestBody(sourceFileUri) ) .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()).map { response -> + .observeOn(AndroidSchedulers.mainThread()) + .flatMap { response -> if (response.isSuccessful) { - ShareOperationWorker.shareFile( - roomToken, - currentUser, - remotePath, - metaData - ) + ShareOperationWorker.shareFile(roomToken, currentUser, remotePath, metaData) FileUtils.copyFileToCache(context, sourceFileUri, fileName) - true + Observable.just(true) } else { - if (response.code() == 404 || response.code() == 409) { - uploadFileUri = ApiUtils.getUrlForFile( - currentUser.baseUrl!!, currentUser.userId!!, - ) - - val davResource = - DavResource( - okHttpClientNoRedirects!!, - uploadFileUri.toHttpUrlOrNull()!! - - ) - - createFolder(davResource) - val value: Observable = upload(sourceFileUri, remotePath, fileName, metaData) - value.blockingFirst() + if (response.code() == HTTP_CODE_NOT_FOUND || response.code() == HTTP_CODE_CONFLICT) { + createDavResource(sourceFileUri, fileName, remotePath, metaData) } else { - false + Observable.just(false) } } } } + + private fun createDavResource(sourceFileUri: Uri, fileName: String, remotePath: String, metaData: String?): Observable { + return Observable.fromCallable { + val userFileUploadPath = ApiUtils.userFileUploadPath(currentUser.baseUrl!!, currentUser.userId!!) + val userTalkAttachmentsUploadPath = ApiUtils.userTalkAttachmentsUploadPath(currentUser.baseUrl!!, currentUser.userId!!) + + var davResource = DavResource(okHttpClientNoRedirects!!, userFileUploadPath.toHttpUrlOrNull()!!) + createFolder(davResource) + initHttpClient(okHttpClient = okhttpClient, currentUser) + davResource = DavResource(okHttpClientNoRedirects!!, userTalkAttachmentsUploadPath.toHttpUrlOrNull()!!) + createFolder(davResource) + true + } + .subscribeOn(Schedulers.io()) + .flatMap { upload(sourceFileUri, fileName, remotePath, metaData) } + } + + @Suppress("Detekt.TooGenericExceptionCaught") private fun createRequestBody(sourceFileUri: Uri): RequestBody? { var requestBody: RequestBody? = null @@ -146,5 +148,7 @@ class FileUploader( companion object { private val TAG = FileUploader::class.simpleName private const val METHOD_NOT_ALLOWED_CODE: Int = 405 + private const val HTTP_CODE_NOT_FOUND:Int = 404 + private const val HTTP_CODE_CONFLICT : Int = 409 } } 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 eeff803cd..66cb5b2cb 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.kt +++ b/app/src/main/java/com/nextcloud/talk/utils/ApiUtils.kt @@ -459,7 +459,11 @@ object ApiUtils { return "$baseUrl/remote.php/dav/files/$user/$remotePath" } - fun getUrlForFile(baseUrl: String, user: String): String { + fun userFileUploadPath(baseUrl: String, user: String): String { + return "$baseUrl/remote.php/dav/files/$user" + } + + fun userTalkAttachmentsUploadPath(baseUrl: String, user: String): String { return "$baseUrl/remote.php/dav/files/$user/Talk" }