diff --git a/app/src/main/java/com/owncloud/android/operations/FetchServerFileResult.kt b/app/src/main/java/com/owncloud/android/operations/FetchServerFileResult.kt new file mode 100644 index 000000000000..a55e256e24b2 --- /dev/null +++ b/app/src/main/java/com/owncloud/android/operations/FetchServerFileResult.kt @@ -0,0 +1,16 @@ +/* + * Nextcloud - Android Client + * + * SPDX-FileCopyrightText: 2026 Alper Ozturk + * SPDX-License-Identifier: AGPL-3.0-or-later + */ +package com.owncloud.android.operations + +import com.owncloud.android.datamodel.OCFile +import com.owncloud.android.lib.common.operations.RemoteOperationResult + +internal sealed interface FetchServerFileResult { + data class Found(val file: OCFile) : FetchServerFileResult + data object Missing : FetchServerFileResult + data class Failed(val result: RemoteOperationResult<*>) : FetchServerFileResult +} diff --git a/app/src/main/java/com/owncloud/android/operations/SynchronizeFileOperation.kt b/app/src/main/java/com/owncloud/android/operations/SynchronizeFileOperation.kt index 9fd8b1511590..345c56dd882b 100644 --- a/app/src/main/java/com/owncloud/android/operations/SynchronizeFileOperation.kt +++ b/app/src/main/java/com/owncloud/android/operations/SynchronizeFileOperation.kt @@ -119,29 +119,36 @@ class SynchronizeFileOperation : SyncOperation { } private fun syncWithServer(client: OwnCloudClient?): RemoteOperationResult<*> { - serverFile = serverFile ?: fetchServerFile(client).let { (result, file) -> - if (file == null) return result!! - file + val givenServerFile = serverFile + if (givenServerFile != null) { + return resolveChanges(givenServerFile) } - return serverFile - ?.let { resolveChanges(it) } - ?: handleMissingRemoteFile() + return when (val fetchResult = fetchServerFile(client)) { + is FetchServerFileResult.Failed -> fetchResult.result + + is FetchServerFileResult.Missing -> handleMissingRemoteFile() + + is FetchServerFileResult.Found -> { + serverFile = fetchResult.file + resolveChanges(fetchResult.file) + } + } } - private fun fetchServerFile(client: OwnCloudClient?): Pair?, OCFile?> { + private fun fetchServerFile(client: OwnCloudClient?): FetchServerFileResult { val result = ReadFileRemoteOperation(remotePath).execute(client) return when { result?.isSuccess == true -> { val file = FileStorageUtils.fillOCFile(result.data[0] as RemoteFile?).apply { lastSyncDateForProperties = System.currentTimeMillis() } - null to file + FetchServerFileResult.Found(file) } - result?.code == RemoteOperationResult.ResultCode.FILE_NOT_FOUND -> null to null + result?.code == RemoteOperationResult.ResultCode.FILE_NOT_FOUND -> FetchServerFileResult.Missing - else -> result to null + else -> FetchServerFileResult.Failed(result) } }