Skip to content
Snippets Groups Projects
Commit a688a03e authored by Dariusz Rybicki's avatar Dariusz Rybicki
Browse files

Refactor MessengerSendFile

parent cc0946dc
No related branches found
No related tags found
2 merge requests!122Messenger send file,!102Release 1.0.0
...@@ -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
}
} }
} }
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment