From 5acba553db91065e0e21f9227e925c9d7ae1cedc Mon Sep 17 00:00:00 2001 From: Dariusz Rybicki <dariusz@elixxir.io> Date: Mon, 19 Sep 2022 10:09:44 +0200 Subject: [PATCH] WIP --- .../Functions/MessengerSendFile.swift | 82 +++++++++++++++++++ .../Messenger/MessengerEnvironment.swift | 9 ++ 2 files changed, 91 insertions(+) create mode 100644 Sources/XXMessengerClient/Messenger/Functions/MessengerSendFile.swift diff --git a/Sources/XXMessengerClient/Messenger/Functions/MessengerSendFile.swift b/Sources/XXMessengerClient/Messenger/Functions/MessengerSendFile.swift new file mode 100644 index 00000000..f665ace4 --- /dev/null +++ b/Sources/XXMessengerClient/Messenger/Functions/MessengerSendFile.swift @@ -0,0 +1,82 @@ +import Foundation +import XCTestDynamicOverlay +import XXClient + +public struct MessengerSendFile { + public struct CallbackData { + 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 { + case notConnected + } + + public var run: (FileTransferSend.Params, @escaping Callback) throws -> Void + + public func callAsFunction( + params: FileTransferSend.Params, + callback: @escaping Callback + ) throws -> Void { + try run(params, callback) + } +} + +extension MessengerSendFile { + public static func live(_ env: MessengerEnvironment) -> MessengerSendFile { + MessengerSendFile { params, callback in + guard let e2e = env.e2e() else { + throw Error.notConnected + } + let fileTransfer = try env.initFileTransfer( + params: InitFileTransfer.Params( + e2eId: e2e.getId(), + e2eFileTransferParamsJSON: env.getE2EFileTransferParams(), + fileTransferParamsJSON: env.getFileTransferParams() + ), + callback: .unimplemented + ) + let semaphore = DispatchSemaphore(value: 0) + var transferId: Data! = nil + transferId = try fileTransfer.send( + params: params, + callback: FileTransferProgressCallback { result in + callback(CallbackData( + transferId: transferId, + result: result + )) + switch result { + case .failure(_): + + semaphore.signal() + case .success(let callback): + if callback.progress.error != nil { + + } + if callback.progress.completed { + semaphore.signal() + } + } + } + ) + semaphore.wait() + try? fileTransfer.closeSend(transferId: transferId) + } + } +} + +extension MessengerSendFile { + public static let unimplemented = MessengerSendFile( + run: XCTUnimplemented("\(Self.self)") + ) +} diff --git a/Sources/XXMessengerClient/Messenger/MessengerEnvironment.swift b/Sources/XXMessengerClient/Messenger/MessengerEnvironment.swift index f125c1ef..4c136806 100644 --- a/Sources/XXMessengerClient/Messenger/MessengerEnvironment.swift +++ b/Sources/XXMessengerClient/Messenger/MessengerEnvironment.swift @@ -10,8 +10,11 @@ public struct MessengerEnvironment { public var fileManager: MessengerFileManager public var generateSecret: GenerateSecret public var getCMixParams: GetCMixParams + public var getE2EFileTransferParams: GetE2EFileTransferParams public var getE2EParams: GetE2EParams + public var getFileTransferParams: GetFileTransferParams public var getSingleUseParams: GetSingleUseParams + public var initFileTransfer: InitFileTransfer public var isRegisteredWithUD: IsRegisteredWithUD public var loadCMix: LoadCMix public var login: Login @@ -48,8 +51,11 @@ extension MessengerEnvironment { fileManager: .live(), generateSecret: .live, getCMixParams: .liveDefault, + getE2EFileTransferParams: .liveDefault, getE2EParams: .liveDefault, + getFileTransferParams: .liveDefault, getSingleUseParams: .liveDefault, + initFileTransfer: .live, isRegisteredWithUD: .live, loadCMix: .live, login: .live, @@ -81,8 +87,11 @@ extension MessengerEnvironment { fileManager: .unimplemented, generateSecret: .unimplemented, getCMixParams: .unimplemented, + getE2EFileTransferParams: .unimplemented, getE2EParams: .unimplemented, + getFileTransferParams: .unimplemented, getSingleUseParams: .unimplemented, + initFileTransfer: .unimplemented, isRegisteredWithUD: .unimplemented, loadCMix: .unimplemented, login: .unimplemented, -- GitLab