Skip to content
Snippets Groups Projects

Messenger send file

Merged Dariusz Rybicki requested to merge feature/messenger-send-file into development
1 file
+ 19
28
Compare changes
  • Side-by-side
  • Inline
@@ -3,20 +3,7 @@ import XCTestDynamicOverlay
@@ -3,20 +3,7 @@ import XCTestDynamicOverlay
import XXClient
import XXClient
public struct MessengerSendFile {
public struct MessengerSendFile {
public struct CallbackData {
public typealias Callback = (Data, XXClient.Progress) -> Void
public init(
transferId: Data,
result: Result<FileTransferProgressCallback.Callback, NSError>
) {
self.transferId = transferId
self.result = result
}
public var transferId: Data
public var result: Result<FileTransferProgressCallback.Callback, NSError>
}
public typealias Callback = (CallbackData) -> Void
public enum Error: Swift.Error, Equatable {
public enum Error: Swift.Error, Equatable {
case notConnected
case notConnected
@@ -25,7 +12,7 @@ public struct MessengerSendFile {
@@ -25,7 +12,7 @@ public struct MessengerSendFile {
public var run: (FileTransferSend.Params, @escaping Callback) throws -> Void
public var run: (FileTransferSend.Params, @escaping Callback) throws -> Void
public func callAsFunction(
public func callAsFunction(
params: FileTransferSend.Params,
_ params: FileTransferSend.Params,
callback: @escaping Callback
callback: @escaping Callback
) throws -> Void {
) throws -> Void {
try run(params, callback)
try run(params, callback)
@@ -44,33 +31,37 @@ extension MessengerSendFile {
@@ -44,33 +31,37 @@ extension MessengerSendFile {
e2eFileTransferParamsJSON: env.getE2EFileTransferParams(),
e2eFileTransferParamsJSON: env.getE2EFileTransferParams(),
fileTransferParamsJSON: env.getFileTransferParams()
fileTransferParamsJSON: env.getFileTransferParams()
),
),
callback: .unimplemented
callback: ReceiveFileCallback { _ in
 
fatalError("Bindings issue: ReceiveFileCallback called when sending file.")
 
}
)
)
let semaphore = DispatchSemaphore(value: 0)
let semaphore = DispatchSemaphore(value: 0)
var transferId: Data! = nil
var transferId: Data!
 
var error: Swift.Error?
transferId = try fileTransfer.send(
transferId = try fileTransfer.send(
params: params,
params: params,
callback: FileTransferProgressCallback { result in
callback: FileTransferProgressCallback { result in
callback(CallbackData(
guard let transferId else {
transferId: transferId,
fatalError("Bindings issue: file transfer progress callback was called before send function returned transfer id.")
result: result
}
))
switch result {
switch result {
case .failure(_):
case .failure(let err):
error = err
semaphore.signal()
semaphore.signal()
case .success(let callback):
if callback.progress.error != nil {
}
case .success(let cb):
if callback.progress.completed {
callback(transferId, cb.progress)
 
if cb.progress.completed || cb.progress.error != nil {
semaphore.signal()
semaphore.signal()
}
}
}
}
}
}
)
)
semaphore.wait()
semaphore.wait()
try? fileTransfer.closeSend(transferId: transferId)
try fileTransfer.closeSend(transferId: transferId)
 
if let error {
 
throw error
 
}
}
}
}
}
}
}
Loading