@@ -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