Skip to content

Commit 170ede9

Browse files
committed
fix(synchronize-file): sync with server npe
Signed-off-by: alperozturk96 <alper_ozturk@proton.me>
1 parent 0f6850e commit 170ede9

2 files changed

Lines changed: 33 additions & 10 deletions

File tree

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
/*
2+
* Nextcloud - Android Client
3+
*
4+
* SPDX-FileCopyrightText: 2026 Alper Ozturk <alper.ozturk@nextcloud.com>
5+
* SPDX-License-Identifier: AGPL-3.0-or-later
6+
*/
7+
package com.owncloud.android.operations
8+
9+
import com.owncloud.android.datamodel.OCFile
10+
import com.owncloud.android.lib.common.operations.RemoteOperationResult
11+
12+
internal sealed interface FetchServerFileResult {
13+
data class Found(val file: OCFile) : FetchServerFileResult
14+
data object Missing : FetchServerFileResult
15+
data class Failed(val result: RemoteOperationResult<*>) : FetchServerFileResult
16+
}

app/src/main/java/com/owncloud/android/operations/SynchronizeFileOperation.kt

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -119,29 +119,36 @@ class SynchronizeFileOperation : SyncOperation {
119119
}
120120

121121
private fun syncWithServer(client: OwnCloudClient?): RemoteOperationResult<*> {
122-
serverFile = serverFile ?: fetchServerFile(client).let { (result, file) ->
123-
if (file == null) return result!!
124-
file
122+
val givenServerFile = serverFile
123+
if (givenServerFile != null) {
124+
return resolveChanges(givenServerFile)
125125
}
126126

127-
return serverFile
128-
?.let { resolveChanges(it) }
129-
?: handleMissingRemoteFile()
127+
return when (val fetchResult = fetchServerFile(client)) {
128+
is FetchServerFileResult.Failed -> fetchResult.result
129+
130+
is FetchServerFileResult.Missing -> handleMissingRemoteFile()
131+
132+
is FetchServerFileResult.Found -> {
133+
serverFile = fetchResult.file
134+
resolveChanges(fetchResult.file)
135+
}
136+
}
130137
}
131138

132-
private fun fetchServerFile(client: OwnCloudClient?): Pair<RemoteOperationResult<*>?, OCFile?> {
139+
private fun fetchServerFile(client: OwnCloudClient?): FetchServerFileResult {
133140
val result = ReadFileRemoteOperation(remotePath).execute(client)
134141
return when {
135142
result?.isSuccess == true -> {
136143
val file = FileStorageUtils.fillOCFile(result.data[0] as RemoteFile?).apply {
137144
lastSyncDateForProperties = System.currentTimeMillis()
138145
}
139-
null to file
146+
FetchServerFileResult.Found(file)
140147
}
141148

142-
result?.code == RemoteOperationResult.ResultCode.FILE_NOT_FOUND -> null to null
149+
result?.code == RemoteOperationResult.ResultCode.FILE_NOT_FOUND -> FetchServerFileResult.Missing
143150

144-
else -> result to null
151+
else -> FetchServerFileResult.Failed(result)
145152
}
146153
}
147154

0 commit comments

Comments
 (0)