@@ -20,7 +20,7 @@ open class Client {
20
20
21
21
open var headers : [ String : String ] = [
22
22
" content-type " : " " ,
23
- " x-sdk-version " : " appwrite:swiftclient:0.3.1 " ,
23
+ " x-sdk-version " : " appwrite:swiftclient:0.4.0 " ,
24
24
" X-Appwrite-Response-Format " : " 0.13.0 "
25
25
]
26
26
@@ -249,7 +249,7 @@ open class Client {
249
249
headers: [ String : String ] = [ : ] ,
250
250
params: [ String : Any ? ] = [ : ] ,
251
251
sink: ( ( ByteBuffer ) -> Void ) ? = nil ,
252
- convert : ( ( [ String : Any ] ) -> T ) ? = nil
252
+ converter : ( ( [ String : Any ] ) -> T ) ? = nil
253
253
) async throws -> T {
254
254
let validParams = params. filter { $0. value != nil }
255
255
@@ -268,12 +268,12 @@ open class Client {
268
268
request. addDomainCookies ( )
269
269
270
270
if " GET " == method {
271
- return try await execute ( request, convert : convert )
271
+ return try await execute ( request, converter : converter )
272
272
}
273
273
274
274
try buildBody ( for: & request, with: validParams)
275
275
276
- return try await execute ( request, withSink: sink, convert : convert )
276
+ return try await execute ( request, withSink: sink, converter : converter )
277
277
}
278
278
279
279
private func buildBody(
@@ -290,7 +290,7 @@ open class Client {
290
290
private func execute< T> (
291
291
_ request: HTTPClientRequest ,
292
292
withSink bufferSink: ( ( ByteBuffer ) -> Void ) ? = nil ,
293
- convert : ( ( [ String : Any ] ) -> T ) ? = nil
293
+ converter : ( ( [ String : Any ] ) -> T ) ? = nil
294
294
) async throws -> T {
295
295
func complete( with response: HTTPClientResponse ) async throws -> T {
296
296
switch response. status. code {
@@ -310,7 +310,7 @@ open class Client {
310
310
let data = try await response. body. collect ( upTo: Int . max)
311
311
let dict = try JSONSerialization . jsonObject ( with: data) as? [ String : Any ]
312
312
313
- return convert ? ( dict!) ?? dict! as! T
313
+ return converter ? ( dict!) ?? dict! as! T
314
314
}
315
315
default :
316
316
var message = " "
@@ -351,7 +351,8 @@ open class Client {
351
351
headers: inout [ String : String ] ,
352
352
params: inout [ String : Any ? ] ,
353
353
paramName: String ,
354
- convert: ( ( [ String : Any ] ) -> T ) ? = nil ,
354
+ idParamName: String ? = nil ,
355
+ converter: ( ( [ String : Any ] ) -> T ) ? = nil ,
355
356
onProgress: ( ( UploadProgress ) -> Void ) ? = nil
356
357
) async throws -> T {
357
358
let file = params [ paramName] as! File
@@ -363,18 +364,31 @@ open class Client {
363
364
path: path,
364
365
headers: headers,
365
366
params: params,
366
- convert : convert
367
+ converter : converter
367
368
)
368
369
}
369
370
370
- var input = file. buffer
371
+ let input = file. buffer
371
372
var offset = 0
372
373
var result = [ String: Any] ( )
373
374
374
- while offset < size {
375
- let slice = input. readSlice ( length: Client . chunkSize)
376
- ?? input. readSlice ( length: Int ( size - offset) )
375
+ if idParamName != nil && params [ idParamName!] as! String != " unique() " {
376
+ // Make a request to check if a file already exists
377
+ let map = try ! await call (
378
+ method: " GET " ,
379
+ path: path + " / " + ( params [ idParamName!] as! String ) ,
380
+ headers: headers,
381
+ params: [ : ] ,
382
+ converter: { return $0 }
383
+ )
384
+ let chunksUploaded = map [ " chunksUploaded " ] as! Int
385
+ offset = min ( size, ( chunksUploaded * Client. chunkSize) )
386
+ }
377
387
388
+ while offset < size {
389
+ let slice = input. getSlice ( at: offset, length: Client . chunkSize)
390
+ ?? input. getSlice ( at: offset, length: Int ( size - offset) )
391
+
378
392
params [ paramName] = File (
379
393
name: file. name,
380
394
buffer: slice!
@@ -387,7 +401,7 @@ open class Client {
387
401
path: path,
388
402
headers: headers,
389
403
params: params,
390
- convert : { return $0 }
404
+ converter : { return $0 }
391
405
)
392
406
393
407
offset += Client . chunkSize
@@ -401,7 +415,7 @@ open class Client {
401
415
) )
402
416
}
403
417
404
- return convert !( result)
418
+ return converter !( result)
405
419
}
406
420
407
421
private static func randomBoundary( ) -> String {
0 commit comments