@@ -107,40 +107,22 @@ extension NCNetworking {
107
107
return ( account, metadata, results. error)
108
108
}
109
109
110
- func fileExists( serverUrlFileName: String ,
111
- account: String ,
112
- completion: @escaping ( _ account: String , _ exists: Bool , _ file: NKFile ? , _ error: NKError ) -> Void ) {
113
- let options = NKRequestOptions ( timeout: 10 , queue: NextcloudKit . shared. nkCommonInstance. backgroundQueue)
110
+ func fileExists( serverUrlFileName: String , account: String ) async -> NKError ? {
114
111
let requestBody = NKDataFileXML ( nkCommonInstance: NextcloudKit . shared. nkCommonInstance) . getRequestBodyFileExists ( ) . data ( using: . utf8)
115
112
116
- NextcloudKit . shared. readFileOrFolder ( serverUrlFileName: serverUrlFileName,
117
- depth: " 0 " ,
118
- requestBody: requestBody,
119
- account: account,
120
- options: options) { task in
113
+ let results = await NextcloudKit . shared. readFileOrFolderAsync ( serverUrlFileName: serverUrlFileName,
114
+ depth: " 0 " ,
115
+ requestBody: requestBody,
116
+ account: account) { task in
121
117
Task {
122
118
let identifier = await NCNetworking . shared. networkingTasks. createIdentifier ( account: account,
123
119
path: serverUrlFileName,
124
120
name: " readFileOrFolder " )
125
121
await NCNetworking . shared. networkingTasks. track ( identifier: identifier, task: task)
126
122
}
127
- } completion: { account, files, _, error in
128
- if error == . success, let file = files? . first {
129
- completion ( account, true , file, error)
130
- } else if error. errorCode == self . global. errorResourceNotFound {
131
- completion ( account, false , nil , error)
132
- } else {
133
- completion ( account, false , nil , error)
134
- }
135
123
}
136
- }
137
124
138
- func fileExists( serverUrlFileName: String , account: String ) async -> ( account: String , exists: Bool , file: NKFile ? , error: NKError ) {
139
- await withUnsafeContinuation ( { continuation in
140
- fileExists ( serverUrlFileName: serverUrlFileName, account: account) { account, exists, file, error in
141
- continuation. resume ( returning: ( account, exists, file, error) )
142
- }
143
- } )
125
+ return results. error
144
126
}
145
127
146
128
// MARK: - Create Filename
@@ -187,8 +169,8 @@ extension NCNetworking {
187
169
continue
188
170
}
189
171
let serverUrlFileName = utilityFileSystem. createServerUrl ( serverUrl: serverUrl, fileName: resultFileName)
190
- let results = await fileExists ( serverUrlFileName: serverUrlFileName, account: account)
191
- if results . exists {
172
+ let error = await fileExists ( serverUrlFileName: serverUrlFileName, account: account)
173
+ if error == . success {
192
174
newFileName ( )
193
175
} else {
194
176
exitLoop = true
@@ -204,15 +186,14 @@ extension NCNetworking {
204
186
overwrite: Bool ,
205
187
session: NCSession . Session ,
206
188
selector: String ? = nil ,
207
- options: NKRequestOptions = NKRequestOptions ( ) ) async -> ( serverExists: Bool , error: NKError ) {
208
-
189
+ options: NKRequestOptions = NKRequestOptions ( ) ) async -> NKError {
209
190
let capabilities = await NKCapabilities . shared. getCapabilities ( for: session. account)
210
191
var fileNameFolder = FileAutoRenamer . rename ( fileName, isFolderPath: true , capabilities: capabilities)
211
192
if !overwrite {
212
193
fileNameFolder = utilityFileSystem. createFileName ( fileNameFolder, serverUrl: serverUrl, account: session. account)
213
194
}
214
195
if fileNameFolder. isEmpty {
215
- return ( false , NKError ( errorCode: global. errorIncorrectFileName, errorDescription: " " ) )
196
+ return NKError ( errorCode: global. errorIncorrectFileName, errorDescription: " " )
216
197
}
217
198
let serverUrlFileName = utilityFileSystem. createServerUrl ( serverUrl: serverUrl, fileName: fileNameFolder)
218
199
@@ -221,7 +202,7 @@ extension NCNetworking {
221
202
if resultReadFile. error == . success,
222
203
let metadata = resultReadFile. metadata {
223
204
await NCManageDatabase . shared. createDirectory ( metadata: metadata)
224
- return ( true , . success)
205
+ return . success
225
206
}
226
207
227
208
/* create folder */
@@ -239,9 +220,47 @@ extension NCNetworking {
239
220
let metadata = resultReadFile. metadata {
240
221
await NCManageDatabase . shared. createDirectory ( metadata: metadata)
241
222
}
223
+ } else {
224
+ await NCManageDatabase . shared. setMetadataSessionAsync ( account: session. account,
225
+ serverUrlFileName: serverUrlFileName,
226
+ sessionError: resultCreateFolder. error. errorDescription,
227
+ errorCode: resultCreateFolder. error. errorCode)
228
+ }
229
+
230
+ return resultCreateFolder. error
231
+ }
232
+
233
+ func createFolderForAutoUpload( serverUrlFileName: String ,
234
+ account: String ) async -> NKError {
235
+ // Fast path: directory already exists → cleanup + success
236
+ let error = await fileExists ( serverUrlFileName: serverUrlFileName, account: account)
237
+ if error == . success {
238
+ await NCManageDatabase . shared. deleteMetadataAsync ( predicate: NSPredicate ( format: " account == %@ AND serverUrlFileName == %@ " , account, serverUrlFileName) )
239
+ return ( . success)
240
+ }
241
+
242
+ // Try to create the directory
243
+ let results = await NextcloudKit . shared. createFolderAsync ( serverUrlFileName: serverUrlFileName, account: account) { task in
244
+ Task {
245
+ let identifier = await NCNetworking . shared. networkingTasks. createIdentifier ( account: account,
246
+ path: serverUrlFileName,
247
+ name: " createFolder " )
248
+ await NCNetworking . shared. networkingTasks. track ( identifier: identifier, task: task)
249
+ }
250
+ }
251
+
252
+ // If creation reported success → cleanup
253
+ if results. error == . success {
254
+ await NCManageDatabase . shared. deleteMetadataAsync ( predicate: NSPredicate ( format: " account == %@ AND serverUrlFileName == %@ " , account, serverUrlFileName) )
255
+ } else {
256
+ // set error
257
+ await NCManageDatabase . shared. setMetadataSessionAsync ( account: account,
258
+ serverUrlFileName: serverUrlFileName,
259
+ sessionError: results. error. errorDescription,
260
+ errorCode: results. error. errorCode)
242
261
}
243
262
244
- return ( false , resultCreateFolder . error)
263
+ return results . error
245
264
}
246
265
247
266
// MARK: - Delete
0 commit comments