@@ -168,7 +168,6 @@ struct DFAPI {
168
168
public func renameFile( fileID: Int , name: String ) async -> Bool {
169
169
do {
170
170
let jsonData = try JSONSerialization . data ( withJSONObject: [ " name " : name] )
171
- let jsonString = String ( data: jsonData, encoding: . utf8) ?? " {} "
172
171
173
172
let _ = try await makeAPIRequest (
174
173
body: jsonData,
@@ -183,7 +182,9 @@ struct DFAPI {
183
182
}
184
183
}
185
184
186
- public func uploadFile( url: URL , fileName: String ? = nil , taskDelegate: URLSessionTaskDelegate ? = nil ) async -> DFUploadResponse ? {
185
+
186
+
187
+ public func uploadFile( url: URL , fileName: String ? = nil , albums: String = " " , privateUpload: Bool = false , taskDelegate: URLSessionTaskDelegate ? = nil ) async -> DFUploadResponse ? {
187
188
let boundary = UUID ( ) . uuidString
188
189
let filename = fileName ?? ( url. absoluteString as NSString ) . lastPathComponent
189
190
@@ -201,9 +202,16 @@ struct DFAPI {
201
202
data. append ( " \r \n -- \( boundary) -- \r \n " . data ( using: . utf8) !)
202
203
203
204
do {
204
- let responseBody = try await makeAPIRequest ( body: data, path: getAPIPath ( . upload) , parameters: [ : ] , method: . post, expectedResponse: . ok, headerFields: [ . contentType: " multipart/form-data; boundary= \( boundary) " ] , taskDelegate: taskDelegate)
205
+ var headers : [ HTTPField . Name : String ] = [ . contentType: " multipart/form-data; boundary= \( boundary) " ]
206
+ if !albums. isEmpty {
207
+ headers [ HTTPField . Name ( " Albums " ) !] = albums
208
+ }
209
+ if privateUpload {
210
+ headers [ HTTPField . Name ( " Private " ) !] = " true "
211
+ }
212
+ let responseBody = try await makeAPIRequest ( body: data, path: getAPIPath ( . upload) , parameters: [ : ] , method: . post, expectedResponse: . ok, headerFields: headers, taskDelegate: taskDelegate)
205
213
return try decoder. decode ( DFUploadResponse . self, from: responseBody)
206
- } catch {
214
+ } catch {
207
215
print ( " Request failed \( error) " )
208
216
return nil ;
209
217
}
@@ -281,6 +289,16 @@ struct DFAPI {
281
289
let token : String
282
290
}
283
291
292
+ @MainActor
293
+ private func updateSessionCookies( _ selectedServer: DjangoFilesSession , _ cookies: [ HTTPCookie ] ) {
294
+ selectedServer. cookies = cookies
295
+ }
296
+
297
+ @MainActor
298
+ private func updateSessionToken( _ selectedServer: DjangoFilesSession , _ token: String ) {
299
+ selectedServer. token = token
300
+ }
301
+
284
302
public func localLogin( username: String , password: String , selectedServer: DjangoFilesSession ) async -> Bool {
285
303
let request = DFLocalLoginRequest ( username: username, password: password)
286
304
do {
@@ -309,17 +327,13 @@ struct DFAPI {
309
327
cookies. forEach { cookie in
310
328
HTTPCookieStorage . shared. setCookie ( cookie)
311
329
}
312
- await MainActor . run {
313
- selectedServer. cookies = cookies
314
- }
330
+ await updateSessionCookies ( selectedServer, cookies)
315
331
}
316
332
317
333
let userToken = try JSONDecoder ( ) . decode ( UserToken . self, from: data)
318
334
319
335
// Update the token in the server object
320
- await MainActor . run {
321
- selectedServer. token = userToken. token
322
- }
336
+ await updateSessionToken ( selectedServer, userToken. token)
323
337
return true
324
338
} catch {
325
339
print ( " Local login request failed \( error) " )
@@ -406,15 +420,11 @@ struct DFAPI {
406
420
HTTPCookieStorage . shared. setCookie ( cookie)
407
421
print ( " Received cookie from response: \( cookie) " )
408
422
}
409
- await MainActor . run {
410
- selectedServer. cookies = cookies
411
- }
423
+ await updateSessionCookies ( selectedServer, cookies)
412
424
}
413
425
414
- // Update the token in the server object
415
- await MainActor . run {
416
- selectedServer. token = token
417
- }
426
+ // Update the token in the server object using the MainActor method
427
+ await updateSessionToken ( selectedServer, token)
418
428
419
429
return true
420
430
} catch {
@@ -423,17 +433,18 @@ struct DFAPI {
423
433
}
424
434
}
425
435
426
- public func getFiles( page: Int = 1 ) async -> DFFilesResponse ? {
436
+ public func getFiles( page: Int = 1 , album : Int ? = nil ) async -> DFFilesResponse ? {
427
437
do {
438
+ var parameters : [ String : String ] = [ : ]
439
+ if let album = album {
440
+ parameters [ " album " ] = String ( album)
441
+ }
442
+
428
443
let responseBody = try await makeAPIRequest (
429
444
path: getAPIPath ( . files) + " \( page) / " ,
430
- parameters: [ : ] ,
445
+ parameters: parameters ,
431
446
method: . get
432
447
)
433
-
434
- print ( String ( data: responseBody, encoding: String . Encoding. utf8) )
435
-
436
- // Use the default decoder since dates are now handled as strings
437
448
let specialDecoder = JSONDecoder ( )
438
449
specialDecoder. keyDecodingStrategy = . convertFromSnakeCase
439
450
return try specialDecoder. decode ( DFFilesResponse . self, from: responseBody)
0 commit comments