From 973cd52fafacb22854a96ed72b6ce340902f45b0 Mon Sep 17 00:00:00 2001
From: Dariusz Rybicki <dariusz@elixxir.io>
Date: Fri, 14 Oct 2022 12:40:07 +0200
Subject: [PATCH 01/18] Add MessengerReceiveFile function

---
 .../Functions/MessengerReceiveFile.swift      | 32 +++++++++++++++++++
 .../Messenger/Messenger.swift                 |  7 ++--
 .../Functions/MessengerReceiveFileTests.swift | 27 ++++++++++++++++
 3 files changed, 64 insertions(+), 2 deletions(-)
 create mode 100644 Sources/XXMessengerClient/Messenger/Functions/MessengerReceiveFile.swift
 create mode 100644 Tests/XXMessengerClientTests/Messenger/Functions/MessengerReceiveFileTests.swift

diff --git a/Sources/XXMessengerClient/Messenger/Functions/MessengerReceiveFile.swift b/Sources/XXMessengerClient/Messenger/Functions/MessengerReceiveFile.swift
new file mode 100644
index 00000000..91230c63
--- /dev/null
+++ b/Sources/XXMessengerClient/Messenger/Functions/MessengerReceiveFile.swift
@@ -0,0 +1,32 @@
+import Foundation
+import XCTestDynamicOverlay
+import XXClient
+
+public struct MessengerReceiveFile {
+  public enum Error: Swift.Error, Equatable {
+    case notConnected
+  }
+
+  public var run: () throws -> Void
+
+  public func callAsFunction() throws -> Void {
+    try run()
+  }
+}
+
+extension MessengerReceiveFile {
+  public static func live(_ env: MessengerEnvironment) -> MessengerReceiveFile {
+    MessengerReceiveFile {
+      guard let e2e = env.e2e() else {
+        throw Error.notConnected
+      }
+      // TODO: implement receiving file
+    }
+  }
+}
+
+extension MessengerReceiveFile {
+  public static let unimplemented = MessengerReceiveFile(
+    run: XCTUnimplemented("\(Self.self)")
+  )
+}
diff --git a/Sources/XXMessengerClient/Messenger/Messenger.swift b/Sources/XXMessengerClient/Messenger/Messenger.swift
index 22f11030..b2cc82fb 100644
--- a/Sources/XXMessengerClient/Messenger/Messenger.swift
+++ b/Sources/XXMessengerClient/Messenger/Messenger.swift
@@ -40,6 +40,7 @@ public struct Messenger {
   public var stopBackup: MessengerStopBackup
   public var setLogLevel: MessengerSetLogLevel
   public var startLogging: MessengerStartLogging
+  public var receiveFile: MessengerReceiveFile
 }
 
 extension Messenger {
@@ -83,7 +84,8 @@ extension Messenger {
       backupParams: .live(env),
       stopBackup: .live(env),
       setLogLevel: .live(env),
-      startLogging: .live(env)
+      startLogging: .live(env),
+      receiveFile: .live(env)
     )
   }
 }
@@ -128,6 +130,7 @@ extension Messenger {
     backupParams: .unimplemented,
     stopBackup: .unimplemented,
     setLogLevel: .unimplemented,
-    startLogging: .unimplemented
+    startLogging: .unimplemented,
+    receiveFile: .unimplemented
   )
 }
diff --git a/Tests/XXMessengerClientTests/Messenger/Functions/MessengerReceiveFileTests.swift b/Tests/XXMessengerClientTests/Messenger/Functions/MessengerReceiveFileTests.swift
new file mode 100644
index 00000000..ef9b5864
--- /dev/null
+++ b/Tests/XXMessengerClientTests/Messenger/Functions/MessengerReceiveFileTests.swift
@@ -0,0 +1,27 @@
+import CustomDump
+import XCTest
+import XXClient
+@testable import XXMessengerClient
+
+final class MessengerReceiveFileTests: XCTestCase {
+  func testReceiveFile() throws {
+    var env: MessengerEnvironment = .unimplemented
+    env.e2e.get = { .unimplemented }
+    let receiveFile: MessengerReceiveFile = .live(env)
+
+    try receiveFile()
+  }
+
+  func testReceiveFileWhenNotConnected() {
+    var env: MessengerEnvironment = .unimplemented
+    env.e2e.get = { nil }
+    let receiveFile: MessengerReceiveFile = .live(env)
+
+    XCTAssertThrowsError(try receiveFile()) { error in
+      XCTAssertNoDifference(
+        error as? MessengerReceiveFile.Error,
+        MessengerReceiveFile.Error.notConnected
+      )
+    }
+  }
+}
-- 
GitLab


From 5057d2ab14dca1796d8f4221db3e6d709ede87c5 Mon Sep 17 00:00:00 2001
From: Dariusz Rybicki <dariusz@elixxir.io>
Date: Sun, 16 Oct 2022 22:56:00 +0200
Subject: [PATCH 02/18] Store FileTransfer in MessengerEnvironment

---
 Sources/XXMessengerClient/Messenger/MessengerEnvironment.swift | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/Sources/XXMessengerClient/Messenger/MessengerEnvironment.swift b/Sources/XXMessengerClient/Messenger/MessengerEnvironment.swift
index 0bd1212c..30f3b22e 100644
--- a/Sources/XXMessengerClient/Messenger/MessengerEnvironment.swift
+++ b/Sources/XXMessengerClient/Messenger/MessengerEnvironment.swift
@@ -10,6 +10,7 @@ public struct MessengerEnvironment {
   public var downloadNDF: DownloadAndVerifySignedNdf
   public var e2e: Stored<E2E?>
   public var fileManager: MessengerFileManager
+  public var fileTransfer: Stored<FileTransfer?>
   public var generateSecret: GenerateSecret
   public var getCMixParams: GetCMixParams
   public var getE2EFileTransferParams: GetE2EFileTransferParams
@@ -59,6 +60,7 @@ extension MessengerEnvironment {
       downloadNDF: .live,
       e2e: .inMemory(),
       fileManager: .live(),
+      fileTransfer: .inMemory(),
       generateSecret: .live,
       getCMixParams: .liveDefault,
       getE2EFileTransferParams: .liveDefault,
@@ -103,6 +105,7 @@ extension MessengerEnvironment {
     downloadNDF: .unimplemented,
     e2e: .unimplemented(),
     fileManager: .unimplemented,
+    fileTransfer: .unimplemented(),
     generateSecret: .unimplemented,
     getCMixParams: .unimplemented,
     getE2EFileTransferParams: .unimplemented,
-- 
GitLab


From e378d3add5eaf42c48dc7933938d0dde742c81aa Mon Sep 17 00:00:00 2001
From: Dariusz Rybicki <dariusz@elixxir.io>
Date: Sun, 16 Oct 2022 23:09:28 +0200
Subject: [PATCH 03/18] Add MessengerStartFileTransfer function

---
 .../MessengerStartFileTransfer.swift          | 41 ++++++++++++
 .../Messenger/Messenger.swift                 |  3 +
 .../MessengerStartFileTransferTests.swift     | 63 +++++++++++++++++++
 3 files changed, 107 insertions(+)
 create mode 100644 Sources/XXMessengerClient/Messenger/Functions/MessengerStartFileTransfer.swift
 create mode 100644 Tests/XXMessengerClientTests/Messenger/Functions/MessengerStartFileTransferTests.swift

diff --git a/Sources/XXMessengerClient/Messenger/Functions/MessengerStartFileTransfer.swift b/Sources/XXMessengerClient/Messenger/Functions/MessengerStartFileTransfer.swift
new file mode 100644
index 00000000..4a8e460d
--- /dev/null
+++ b/Sources/XXMessengerClient/Messenger/Functions/MessengerStartFileTransfer.swift
@@ -0,0 +1,41 @@
+import XCTestDynamicOverlay
+import XXClient
+
+public struct MessengerStartFileTransfer {
+  public enum Error: Swift.Error, Equatable {
+    case notConnected
+  }
+
+  public var run: () throws -> Void
+
+  public func callAsFunction() throws -> Void {
+    try run()
+  }
+}
+
+extension MessengerStartFileTransfer {
+  public static func live(_ env: MessengerEnvironment) -> MessengerStartFileTransfer {
+    MessengerStartFileTransfer {
+      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: ReceiveFileCallback { result in
+          // TODO:
+        }
+      )
+      env.fileTransfer.set(fileTransfer)
+    }
+  }
+}
+
+extension MessengerStartFileTransfer {
+  public static let unimplemented = MessengerStartFileTransfer(
+    run: XCTUnimplemented("\(Self.self)")
+  )
+}
diff --git a/Sources/XXMessengerClient/Messenger/Messenger.swift b/Sources/XXMessengerClient/Messenger/Messenger.swift
index 0dce7ff2..793daab0 100644
--- a/Sources/XXMessengerClient/Messenger/Messenger.swift
+++ b/Sources/XXMessengerClient/Messenger/Messenger.swift
@@ -40,6 +40,7 @@ public struct Messenger {
   public var stopBackup: MessengerStopBackup
   public var setLogLevel: MessengerSetLogLevel
   public var startLogging: MessengerStartLogging
+  public var startFileTransfer: MessengerStartFileTransfer
   public var sendFile: MessengerSendFile
   public var receiveFile: MessengerReceiveFile
 }
@@ -86,6 +87,7 @@ extension Messenger {
       stopBackup: .live(env),
       setLogLevel: .live(env),
       startLogging: .live(env),
+      startFileTransfer: .live(env),
       sendFile: .live(env),
       receiveFile: .live(env)
     )
@@ -133,6 +135,7 @@ extension Messenger {
     stopBackup: .unimplemented,
     setLogLevel: .unimplemented,
     startLogging: .unimplemented,
+    startFileTransfer: .unimplemented,
     sendFile: .unimplemented,
     receiveFile: .unimplemented
   )
diff --git a/Tests/XXMessengerClientTests/Messenger/Functions/MessengerStartFileTransferTests.swift b/Tests/XXMessengerClientTests/Messenger/Functions/MessengerStartFileTransferTests.swift
new file mode 100644
index 00000000..56195f23
--- /dev/null
+++ b/Tests/XXMessengerClientTests/Messenger/Functions/MessengerStartFileTransferTests.swift
@@ -0,0 +1,63 @@
+import CustomDump
+import XCTest
+import XXClient
+@testable import XXMessengerClient
+
+final class MessengerStartFileTransferTests: XCTestCase {
+  func testStart() throws {
+    let e2eId = 123
+    let e2eFileTransferParams = "e2eFileTransferParams".data(using: .utf8)!
+    let fileTransferParams = "fileTransferParams".data(using: .utf8)!
+
+    var didInitFileTransfer: [InitFileTransfer.Params] = []
+    var receiveFileCallback: ReceiveFileCallback?
+    var didSetFileTransfer: [FileTransfer?] = []
+
+    var env: MessengerEnvironment = .unimplemented
+    env.e2e.get = {
+      var e2e: E2E = .unimplemented
+      e2e.getId.run = { e2eId }
+      return e2e
+    }
+    env.getE2EFileTransferParams.run = {
+      e2eFileTransferParams
+    }
+    env.getFileTransferParams.run = {
+      fileTransferParams
+    }
+    env.initFileTransfer.run = { params, callback in
+      didInitFileTransfer.append(params)
+      receiveFileCallback = callback
+      var fileTransfer: FileTransfer = .unimplemented
+      return fileTransfer
+    }
+    env.fileTransfer.set = {
+      didSetFileTransfer.append($0)
+    }
+
+    let start: MessengerStartFileTransfer = .live(env)
+
+    try start()
+
+    XCTAssertNoDifference(didInitFileTransfer, [.init(
+      e2eId: e2eId,
+      e2eFileTransferParamsJSON: e2eFileTransferParams,
+      fileTransferParamsJSON: fileTransferParams
+    )])
+    XCTAssertNotNil(receiveFileCallback)
+    XCTAssertNoDifference(didSetFileTransfer.map { $0 != nil }, [true])
+  }
+
+  func testStartWhenNotConnected() {
+    var env: MessengerEnvironment = .unimplemented
+    env.e2e.get = { nil }
+    let start: MessengerStartFileTransfer = .live(env)
+
+    XCTAssertThrowsError(try start()) { error in
+      XCTAssertNoDifference(
+        error as NSError,
+        MessengerStartFileTransfer.Error.notConnected as NSError
+      )
+    }
+  }
+}
-- 
GitLab


From cb3fbbb2211ff21e887c7062d464c2b7c6ff65c1 Mon Sep 17 00:00:00 2001
From: Dariusz Rybicki <dariusz@elixxir.io>
Date: Sun, 16 Oct 2022 23:15:27 +0200
Subject: [PATCH 04/18] Update MessengerSendFile function

Use stored FileTransfer manager
---
 .../Functions/MessengerSendFile.swift         | 16 ++----
 .../Functions/MessengerSendFileTests.swift    | 53 +++----------------
 2 files changed, 10 insertions(+), 59 deletions(-)

diff --git a/Sources/XXMessengerClient/Messenger/Functions/MessengerSendFile.swift b/Sources/XXMessengerClient/Messenger/Functions/MessengerSendFile.swift
index 8aca65c4..fde8607c 100644
--- a/Sources/XXMessengerClient/Messenger/Functions/MessengerSendFile.swift
+++ b/Sources/XXMessengerClient/Messenger/Functions/MessengerSendFile.swift
@@ -37,7 +37,7 @@ public struct MessengerSendFile {
   public typealias Callback = (CallbackInfo) -> Void
 
   public enum Error: Swift.Error, Equatable {
-    case notConnected
+    case fileTransferNotStarted
   }
 
   public var run: (Params, @escaping Callback) throws -> Data
@@ -53,19 +53,9 @@ public struct MessengerSendFile {
 extension MessengerSendFile {
   public static func live(_ env: MessengerEnvironment) -> MessengerSendFile {
     MessengerSendFile { params, callback in
-      guard let e2e = env.e2e() else {
-        throw Error.notConnected
+      guard let fileTransfer = env.fileTransfer() else {
+        throw Error.fileTransferNotStarted
       }
-      let fileTransfer = try env.initFileTransfer(
-        params: InitFileTransfer.Params(
-          e2eId: e2e.getId(),
-          e2eFileTransferParamsJSON: env.getE2EFileTransferParams(),
-          fileTransferParamsJSON: env.getFileTransferParams()
-        ),
-        callback: ReceiveFileCallback { _ in
-          fatalError("Bindings issue: ReceiveFileCallback called when sending file.")
-        }
-      )
       func close(id: Data) {
         do {
           try fileTransfer.closeSend(transferId: id)
diff --git a/Tests/XXMessengerClientTests/Messenger/Functions/MessengerSendFileTests.swift b/Tests/XXMessengerClientTests/Messenger/Functions/MessengerSendFileTests.swift
index 9adc15b1..5ea8410d 100644
--- a/Tests/XXMessengerClientTests/Messenger/Functions/MessengerSendFileTests.swift
+++ b/Tests/XXMessengerClientTests/Messenger/Functions/MessengerSendFileTests.swift
@@ -5,28 +5,17 @@ import XXClient
 
 final class MessengerSendFileTests: XCTestCase {
   func testSendFile() throws {
-    let e2eId = 123
     let e2eFileTransferParams = "e2eFileTransferParams".data(using: .utf8)!
     let fileTransferParams = "fileTransferParams".data(using: .utf8)!
     let newTransferId = "transferId".data(using: .utf8)!
 
-    var didInitFileTransfer: [InitFileTransfer.Params] = []
     var didSendFile: [FileTransferSend.Params] = []
     var didCloseSend: [Data] = []
     var didReceiveCallback: [MessengerSendFile.CallbackInfo] = []
-
     var fileTransferProgressCallback: FileTransferProgressCallback!
 
     var env: MessengerEnvironment = .unimplemented
-    env.e2e.get = {
-      var e2e: E2E = .unimplemented
-      e2e.getId.run = { e2eId }
-      return e2e
-    }
-    env.getE2EFileTransferParams.run = { e2eFileTransferParams }
-    env.getFileTransferParams.run = { fileTransferParams }
-    env.initFileTransfer.run = { params, callback in
-      didInitFileTransfer.append(params)
+    env.fileTransfer.get = {
       var fileTransfer: FileTransfer = .unimplemented
       fileTransfer.send.run = { params, callback in
         didSendFile.append(params)
@@ -47,13 +36,6 @@ final class MessengerSendFileTests: XCTestCase {
     }
 
     XCTAssertNoDifference(transferId, newTransferId)
-    XCTAssertNoDifference(didInitFileTransfer, [
-      .init(
-        e2eId: e2eId,
-        e2eFileTransferParamsJSON: e2eFileTransferParams,
-        fileTransferParamsJSON: fileTransferParams
-      )
-    ])
     XCTAssertNoDifference(didSendFile, [
       .init(
         payload: params.file,
@@ -99,15 +81,15 @@ final class MessengerSendFileTests: XCTestCase {
     XCTAssertNoDifference(didCloseSend, [transferId])
   }
 
-  func testSendFileWhenNotConnected() {
+  func testSendFileWhenNotStarted() {
     var env: MessengerEnvironment = .unimplemented
-    env.e2e.get = { nil }
+    env.fileTransfer.get = { nil }
     let sendFile: MessengerSendFile = .live(env)
 
     XCTAssertThrowsError(try sendFile(.stub) { _ in }) { error in
       XCTAssertNoDifference(
         error as? MessengerSendFile.Error,
-        MessengerSendFile.Error.notConnected
+        MessengerSendFile.Error.fileTransferNotStarted
       )
     }
   }
@@ -118,14 +100,7 @@ final class MessengerSendFileTests: XCTestCase {
     var fileTransferProgressCallback: FileTransferProgressCallback!
 
     var env: MessengerEnvironment = .unimplemented
-    env.e2e.get = {
-      var e2e: E2E = .unimplemented
-      e2e.getId.run = { 123 }
-      return e2e
-    }
-    env.getE2EFileTransferParams.run = { Data() }
-    env.getFileTransferParams.run = { Data() }
-    env.initFileTransfer.run = { params, callback in
+    env.fileTransfer.get = {
       var fileTransfer: FileTransfer = .unimplemented
       fileTransfer.send.run = { _, callback in
         fileTransferProgressCallback = callback
@@ -157,14 +132,7 @@ final class MessengerSendFileTests: XCTestCase {
     var fileTransferProgressCallback: FileTransferProgressCallback!
 
     var env: MessengerEnvironment = .unimplemented
-    env.e2e.get = {
-      var e2e: E2E = .unimplemented
-      e2e.getId.run = { 123 }
-      return e2e
-    }
-    env.getE2EFileTransferParams.run = { Data() }
-    env.getFileTransferParams.run = { Data() }
-    env.initFileTransfer.run = { params, callback in
+    env.fileTransfer.get = {
       var fileTransfer: FileTransfer = .unimplemented
       fileTransfer.send.run = { _, callback in
         fileTransferProgressCallback = callback
@@ -205,14 +173,7 @@ final class MessengerSendFileTests: XCTestCase {
     var fileTransferProgressCallback: FileTransferProgressCallback!
 
     var env: MessengerEnvironment = .unimplemented
-    env.e2e.get = {
-      var e2e: E2E = .unimplemented
-      e2e.getId.run = { 123 }
-      return e2e
-    }
-    env.getE2EFileTransferParams.run = { Data() }
-    env.getFileTransferParams.run = { Data() }
-    env.initFileTransfer.run = { params, callback in
+    env.fileTransfer.get = {
       var fileTransfer: FileTransfer = .unimplemented
       fileTransfer.send.run = { _, callback in
         fileTransferProgressCallback = callback
-- 
GitLab


From ff222fa40d2c70d73bee5fdc5fd4ec8243480f82 Mon Sep 17 00:00:00 2001
From: Dariusz Rybicki <dariusz@elixxir.io>
Date: Sun, 16 Oct 2022 23:16:46 +0200
Subject: [PATCH 05/18] Remove MessengerReceiveFile function

---
 .../Functions/MessengerReceiveFile.swift      | 32 -------------------
 .../Messenger/Messenger.swift                 |  7 ++--
 .../Functions/MessengerReceiveFileTests.swift | 27 ----------------
 3 files changed, 2 insertions(+), 64 deletions(-)
 delete mode 100644 Sources/XXMessengerClient/Messenger/Functions/MessengerReceiveFile.swift
 delete mode 100644 Tests/XXMessengerClientTests/Messenger/Functions/MessengerReceiveFileTests.swift

diff --git a/Sources/XXMessengerClient/Messenger/Functions/MessengerReceiveFile.swift b/Sources/XXMessengerClient/Messenger/Functions/MessengerReceiveFile.swift
deleted file mode 100644
index 91230c63..00000000
--- a/Sources/XXMessengerClient/Messenger/Functions/MessengerReceiveFile.swift
+++ /dev/null
@@ -1,32 +0,0 @@
-import Foundation
-import XCTestDynamicOverlay
-import XXClient
-
-public struct MessengerReceiveFile {
-  public enum Error: Swift.Error, Equatable {
-    case notConnected
-  }
-
-  public var run: () throws -> Void
-
-  public func callAsFunction() throws -> Void {
-    try run()
-  }
-}
-
-extension MessengerReceiveFile {
-  public static func live(_ env: MessengerEnvironment) -> MessengerReceiveFile {
-    MessengerReceiveFile {
-      guard let e2e = env.e2e() else {
-        throw Error.notConnected
-      }
-      // TODO: implement receiving file
-    }
-  }
-}
-
-extension MessengerReceiveFile {
-  public static let unimplemented = MessengerReceiveFile(
-    run: XCTUnimplemented("\(Self.self)")
-  )
-}
diff --git a/Sources/XXMessengerClient/Messenger/Messenger.swift b/Sources/XXMessengerClient/Messenger/Messenger.swift
index 793daab0..2c8ef5d5 100644
--- a/Sources/XXMessengerClient/Messenger/Messenger.swift
+++ b/Sources/XXMessengerClient/Messenger/Messenger.swift
@@ -42,7 +42,6 @@ public struct Messenger {
   public var startLogging: MessengerStartLogging
   public var startFileTransfer: MessengerStartFileTransfer
   public var sendFile: MessengerSendFile
-  public var receiveFile: MessengerReceiveFile
 }
 
 extension Messenger {
@@ -88,8 +87,7 @@ extension Messenger {
       setLogLevel: .live(env),
       startLogging: .live(env),
       startFileTransfer: .live(env),
-      sendFile: .live(env),
-      receiveFile: .live(env)
+      sendFile: .live(env)
     )
   }
 }
@@ -136,7 +134,6 @@ extension Messenger {
     setLogLevel: .unimplemented,
     startLogging: .unimplemented,
     startFileTransfer: .unimplemented,
-    sendFile: .unimplemented,
-    receiveFile: .unimplemented
+    sendFile: .unimplemented
   )
 }
diff --git a/Tests/XXMessengerClientTests/Messenger/Functions/MessengerReceiveFileTests.swift b/Tests/XXMessengerClientTests/Messenger/Functions/MessengerReceiveFileTests.swift
deleted file mode 100644
index ef9b5864..00000000
--- a/Tests/XXMessengerClientTests/Messenger/Functions/MessengerReceiveFileTests.swift
+++ /dev/null
@@ -1,27 +0,0 @@
-import CustomDump
-import XCTest
-import XXClient
-@testable import XXMessengerClient
-
-final class MessengerReceiveFileTests: XCTestCase {
-  func testReceiveFile() throws {
-    var env: MessengerEnvironment = .unimplemented
-    env.e2e.get = { .unimplemented }
-    let receiveFile: MessengerReceiveFile = .live(env)
-
-    try receiveFile()
-  }
-
-  func testReceiveFileWhenNotConnected() {
-    var env: MessengerEnvironment = .unimplemented
-    env.e2e.get = { nil }
-    let receiveFile: MessengerReceiveFile = .live(env)
-
-    XCTAssertThrowsError(try receiveFile()) { error in
-      XCTAssertNoDifference(
-        error as? MessengerReceiveFile.Error,
-        MessengerReceiveFile.Error.notConnected
-      )
-    }
-  }
-}
-- 
GitLab


From a11960d92a477cb23f59d30a110089775d4b0a63 Mon Sep 17 00:00:00 2001
From: Dariusz Rybicki <dariusz@elixxir.io>
Date: Sun, 16 Oct 2022 23:17:08 +0200
Subject: [PATCH 06/18] Clean up unused code

---
 .../Messenger/Functions/MessengerSendFileTests.swift           | 2 --
 .../Messenger/Functions/MessengerStartFileTransferTests.swift  | 3 +--
 2 files changed, 1 insertion(+), 4 deletions(-)

diff --git a/Tests/XXMessengerClientTests/Messenger/Functions/MessengerSendFileTests.swift b/Tests/XXMessengerClientTests/Messenger/Functions/MessengerSendFileTests.swift
index 5ea8410d..4e1c1763 100644
--- a/Tests/XXMessengerClientTests/Messenger/Functions/MessengerSendFileTests.swift
+++ b/Tests/XXMessengerClientTests/Messenger/Functions/MessengerSendFileTests.swift
@@ -5,8 +5,6 @@ import XXClient
 
 final class MessengerSendFileTests: XCTestCase {
   func testSendFile() throws {
-    let e2eFileTransferParams = "e2eFileTransferParams".data(using: .utf8)!
-    let fileTransferParams = "fileTransferParams".data(using: .utf8)!
     let newTransferId = "transferId".data(using: .utf8)!
 
     var didSendFile: [FileTransferSend.Params] = []
diff --git a/Tests/XXMessengerClientTests/Messenger/Functions/MessengerStartFileTransferTests.swift b/Tests/XXMessengerClientTests/Messenger/Functions/MessengerStartFileTransferTests.swift
index 56195f23..5164700f 100644
--- a/Tests/XXMessengerClientTests/Messenger/Functions/MessengerStartFileTransferTests.swift
+++ b/Tests/XXMessengerClientTests/Messenger/Functions/MessengerStartFileTransferTests.swift
@@ -28,8 +28,7 @@ final class MessengerStartFileTransferTests: XCTestCase {
     env.initFileTransfer.run = { params, callback in
       didInitFileTransfer.append(params)
       receiveFileCallback = callback
-      var fileTransfer: FileTransfer = .unimplemented
-      return fileTransfer
+      return .unimplemented
     }
     env.fileTransfer.set = {
       didSetFileTransfer.append($0)
-- 
GitLab


From 42f41741011fe99b33b0b7c6f01530d39b1bfb64 Mon Sep 17 00:00:00 2001
From: Dariusz Rybicki <dariusz@elixxir.io>
Date: Sun, 16 Oct 2022 23:22:26 +0200
Subject: [PATCH 07/18] Revert "Remove MessengerReceiveFile function"

This reverts commit ff222fa40d2c70d73bee5fdc5fd4ec8243480f82.
---
 .../Functions/MessengerReceiveFile.swift      | 32 +++++++++++++++++++
 .../Messenger/Messenger.swift                 |  7 ++--
 .../Functions/MessengerReceiveFileTests.swift | 27 ++++++++++++++++
 3 files changed, 64 insertions(+), 2 deletions(-)
 create mode 100644 Sources/XXMessengerClient/Messenger/Functions/MessengerReceiveFile.swift
 create mode 100644 Tests/XXMessengerClientTests/Messenger/Functions/MessengerReceiveFileTests.swift

diff --git a/Sources/XXMessengerClient/Messenger/Functions/MessengerReceiveFile.swift b/Sources/XXMessengerClient/Messenger/Functions/MessengerReceiveFile.swift
new file mode 100644
index 00000000..91230c63
--- /dev/null
+++ b/Sources/XXMessengerClient/Messenger/Functions/MessengerReceiveFile.swift
@@ -0,0 +1,32 @@
+import Foundation
+import XCTestDynamicOverlay
+import XXClient
+
+public struct MessengerReceiveFile {
+  public enum Error: Swift.Error, Equatable {
+    case notConnected
+  }
+
+  public var run: () throws -> Void
+
+  public func callAsFunction() throws -> Void {
+    try run()
+  }
+}
+
+extension MessengerReceiveFile {
+  public static func live(_ env: MessengerEnvironment) -> MessengerReceiveFile {
+    MessengerReceiveFile {
+      guard let e2e = env.e2e() else {
+        throw Error.notConnected
+      }
+      // TODO: implement receiving file
+    }
+  }
+}
+
+extension MessengerReceiveFile {
+  public static let unimplemented = MessengerReceiveFile(
+    run: XCTUnimplemented("\(Self.self)")
+  )
+}
diff --git a/Sources/XXMessengerClient/Messenger/Messenger.swift b/Sources/XXMessengerClient/Messenger/Messenger.swift
index 2c8ef5d5..793daab0 100644
--- a/Sources/XXMessengerClient/Messenger/Messenger.swift
+++ b/Sources/XXMessengerClient/Messenger/Messenger.swift
@@ -42,6 +42,7 @@ public struct Messenger {
   public var startLogging: MessengerStartLogging
   public var startFileTransfer: MessengerStartFileTransfer
   public var sendFile: MessengerSendFile
+  public var receiveFile: MessengerReceiveFile
 }
 
 extension Messenger {
@@ -87,7 +88,8 @@ extension Messenger {
       setLogLevel: .live(env),
       startLogging: .live(env),
       startFileTransfer: .live(env),
-      sendFile: .live(env)
+      sendFile: .live(env),
+      receiveFile: .live(env)
     )
   }
 }
@@ -134,6 +136,7 @@ extension Messenger {
     setLogLevel: .unimplemented,
     startLogging: .unimplemented,
     startFileTransfer: .unimplemented,
-    sendFile: .unimplemented
+    sendFile: .unimplemented,
+    receiveFile: .unimplemented
   )
 }
diff --git a/Tests/XXMessengerClientTests/Messenger/Functions/MessengerReceiveFileTests.swift b/Tests/XXMessengerClientTests/Messenger/Functions/MessengerReceiveFileTests.swift
new file mode 100644
index 00000000..ef9b5864
--- /dev/null
+++ b/Tests/XXMessengerClientTests/Messenger/Functions/MessengerReceiveFileTests.swift
@@ -0,0 +1,27 @@
+import CustomDump
+import XCTest
+import XXClient
+@testable import XXMessengerClient
+
+final class MessengerReceiveFileTests: XCTestCase {
+  func testReceiveFile() throws {
+    var env: MessengerEnvironment = .unimplemented
+    env.e2e.get = { .unimplemented }
+    let receiveFile: MessengerReceiveFile = .live(env)
+
+    try receiveFile()
+  }
+
+  func testReceiveFileWhenNotConnected() {
+    var env: MessengerEnvironment = .unimplemented
+    env.e2e.get = { nil }
+    let receiveFile: MessengerReceiveFile = .live(env)
+
+    XCTAssertThrowsError(try receiveFile()) { error in
+      XCTAssertNoDifference(
+        error as? MessengerReceiveFile.Error,
+        MessengerReceiveFile.Error.notConnected
+      )
+    }
+  }
+}
-- 
GitLab


From cb7787002e2e0bf5059d5e84ef7436e01b1be2d0 Mon Sep 17 00:00:00 2001
From: Dariusz Rybicki <dariusz@elixxir.io>
Date: Sun, 16 Oct 2022 23:57:36 +0200
Subject: [PATCH 08/18] Implement MessengerReceiveFile function

---
 .../Functions/MessengerReceiveFile.swift      |  71 +++++-
 .../Functions/MessengerReceiveFileTests.swift | 206 +++++++++++++++++-
 2 files changed, 264 insertions(+), 13 deletions(-)

diff --git a/Sources/XXMessengerClient/Messenger/Functions/MessengerReceiveFile.swift b/Sources/XXMessengerClient/Messenger/Functions/MessengerReceiveFile.swift
index 91230c63..ef4290f8 100644
--- a/Sources/XXMessengerClient/Messenger/Functions/MessengerReceiveFile.swift
+++ b/Sources/XXMessengerClient/Messenger/Functions/MessengerReceiveFile.swift
@@ -3,24 +3,79 @@ import XCTestDynamicOverlay
 import XXClient
 
 public struct MessengerReceiveFile {
+  public struct Params: Equatable {
+    public init(
+      transferId: Data,
+      callbackIntervalMS: Int = 250
+    ) {
+      self.transferId = transferId
+      self.callbackIntervalMS = callbackIntervalMS
+    }
+
+    public var transferId: Data
+    public var callbackIntervalMS: Int
+  }
+
+  public enum CallbackInfo: Equatable {
+    public enum Failure: Equatable {
+      case callbackError(NSError)
+      case progressError(String)
+      case receiveError(NSError)
+    }
+
+    case progress(transmitted: Int, total: Int)
+    case finished(Data)
+    case failed(Failure)
+  }
+
+  public typealias Callback = (CallbackInfo) -> Void
+
   public enum Error: Swift.Error, Equatable {
-    case notConnected
+    case fileTransferNotStarted
   }
 
-  public var run: () throws -> Void
+  public var run: (Params, @escaping Callback) throws -> Void
 
-  public func callAsFunction() throws -> Void {
-    try run()
+  public func callAsFunction(
+    _ params: Params,
+    callback: @escaping Callback
+  ) throws -> Void {
+    try run(params, callback)
   }
 }
 
 extension MessengerReceiveFile {
   public static func live(_ env: MessengerEnvironment) -> MessengerReceiveFile {
-    MessengerReceiveFile {
-      guard let e2e = env.e2e() else {
-        throw Error.notConnected
+    MessengerReceiveFile { params, callback in
+      guard let fileTransfer = env.fileTransfer() else {
+        throw Error.fileTransferNotStarted
       }
-      // TODO: implement receiving file
+      try fileTransfer.registerReceivedProgressCallback(
+        transferId: params.transferId,
+        period: params.callbackIntervalMS,
+        callback: FileTransferProgressCallback { result in
+          switch result {
+          case .success(let info):
+            if let error = info.progress.error {
+              callback(.failed(.progressError(error)))
+            } else if info.progress.completed {
+              do {
+                callback(.finished(try fileTransfer.receive(transferId: params.transferId)))
+              } catch {
+                callback(.failed(.receiveError(error as NSError)))
+              }
+            } else {
+              callback(.progress(
+                transmitted: info.progress.transmitted,
+                total: info.progress.total
+              ))
+            }
+
+          case .failure(let error):
+            callback(.failed(.callbackError(error)))
+          }
+        }
+      )
     }
   }
 }
diff --git a/Tests/XXMessengerClientTests/Messenger/Functions/MessengerReceiveFileTests.swift b/Tests/XXMessengerClientTests/Messenger/Functions/MessengerReceiveFileTests.swift
index ef9b5864..554b7f30 100644
--- a/Tests/XXMessengerClientTests/Messenger/Functions/MessengerReceiveFileTests.swift
+++ b/Tests/XXMessengerClientTests/Messenger/Functions/MessengerReceiveFileTests.swift
@@ -5,23 +5,219 @@ import XXClient
 
 final class MessengerReceiveFileTests: XCTestCase {
   func testReceiveFile() throws {
+    let params: MessengerReceiveFile.Params = .stub
+    let receivedData = "received".data(using: .utf8)!
+
+    var didRegisterReceivedProgressCallbackWithTransferId: [Data] = []
+    var didRegisterReceivedProgressCallbackWithPeriod: [Int] = []
+    var didRegisterReceivedProgressCallbackWithCallback: [FileTransferProgressCallback] = []
+    var didReceiveTransferId: [Data] = []
+    var didReceiveCallback: [MessengerReceiveFile.CallbackInfo] = []
+
     var env: MessengerEnvironment = .unimplemented
-    env.e2e.get = { .unimplemented }
+    env.fileTransfer.get = {
+      var fileTransfer: FileTransfer = .unimplemented
+      fileTransfer.registerReceivedProgressCallback.run = { transferId, period, callback in
+        didRegisterReceivedProgressCallbackWithTransferId.append(transferId)
+        didRegisterReceivedProgressCallbackWithPeriod.append(period)
+        didRegisterReceivedProgressCallbackWithCallback.append(callback)
+      }
+      fileTransfer.receive.run = { transferId in
+        didReceiveTransferId.append(transferId)
+        return receivedData
+      }
+      return fileTransfer
+    }
     let receiveFile: MessengerReceiveFile = .live(env)
 
-    try receiveFile()
+    try receiveFile(params) { info in
+      didReceiveCallback.append(info)
+    }
+
+    XCTAssertNoDifference(didRegisterReceivedProgressCallbackWithTransferId, [
+      params.transferId
+    ])
+    XCTAssertNoDifference(didRegisterReceivedProgressCallbackWithPeriod, [
+      params.callbackIntervalMS
+    ])
+    XCTAssertNoDifference(didReceiveCallback, [])
+
+    didReceiveCallback = []
+    didRegisterReceivedProgressCallbackWithCallback.first?.handle(.success(
+      FileTransferProgressCallback.Callback(
+        progress: Progress(
+          completed: false,
+          transmitted: 1,
+          total: 3,
+          error: nil
+        ),
+        partTracker: .unimplemented
+      )
+    ))
+
+    XCTAssertNoDifference(didReceiveCallback, [
+      .progress(transmitted: 1, total: 3),
+    ])
+
+    didReceiveCallback = []
+    didRegisterReceivedProgressCallbackWithCallback.first?.handle(.success(
+      FileTransferProgressCallback.Callback(
+        progress: Progress(
+          completed: false,
+          transmitted: 2,
+          total: 3,
+          error: nil
+        ),
+        partTracker: .unimplemented
+      )
+    ))
+
+    XCTAssertNoDifference(didReceiveCallback, [
+      .progress(transmitted: 2, total: 3),
+    ])
+
+    didReceiveCallback = []
+    didRegisterReceivedProgressCallbackWithCallback.first?.handle(.success(
+      FileTransferProgressCallback.Callback(
+        progress: Progress(
+          completed: true,
+          transmitted: 3,
+          total: 3,
+          error: nil
+        ),
+        partTracker: .unimplemented
+      )
+    ))
+
+    XCTAssertNoDifference(didReceiveTransferId, [
+      params.transferId,
+    ])
+    XCTAssertNoDifference(didReceiveCallback, [
+      .finished(receivedData),
+    ])
   }
 
   func testReceiveFileWhenNotConnected() {
     var env: MessengerEnvironment = .unimplemented
-    env.e2e.get = { nil }
+    env.fileTransfer.get = { nil }
     let receiveFile: MessengerReceiveFile = .live(env)
 
-    XCTAssertThrowsError(try receiveFile()) { error in
+    XCTAssertThrowsError(try receiveFile(.stub) { _ in }) { error in
       XCTAssertNoDifference(
         error as? MessengerReceiveFile.Error,
-        MessengerReceiveFile.Error.notConnected
+        MessengerReceiveFile.Error.fileTransferNotStarted
       )
     }
   }
+
+  func testReceiveFileProgressError() throws {
+    let error = "Something went wrong..."
+
+    var receivedProgressCallback: FileTransferProgressCallback?
+    var didReceiveCallback: [MessengerReceiveFile.CallbackInfo] = []
+
+    var env: MessengerEnvironment = .unimplemented
+    env.fileTransfer.get = {
+      var fileTransfer: FileTransfer = .unimplemented
+      fileTransfer.registerReceivedProgressCallback.run = { _, _, callback in
+        receivedProgressCallback = callback
+      }
+      return fileTransfer
+    }
+    let receiveFile: MessengerReceiveFile = .live(env)
+
+    try receiveFile(.stub) { info in
+      didReceiveCallback.append(info)
+    }
+
+    receivedProgressCallback?.handle(.success(
+      FileTransferProgressCallback.Callback(
+        progress: Progress(
+          completed: false,
+          transmitted: 1,
+          total: 3,
+          error: error
+        ),
+        partTracker: .unimplemented
+      )
+    ))
+
+    XCTAssertNoDifference(didReceiveCallback, [
+      .failed(.progressError(error))
+    ])
+  }
+
+  func testReceiveFileCallbackError() throws {
+    let error = NSError(domain: "test", code: 123)
+
+    var receivedProgressCallback: FileTransferProgressCallback?
+    var didReceiveCallback: [MessengerReceiveFile.CallbackInfo] = []
+
+    var env: MessengerEnvironment = .unimplemented
+    env.fileTransfer.get = {
+      var fileTransfer: FileTransfer = .unimplemented
+      fileTransfer.registerReceivedProgressCallback.run = { _, _, callback in
+        receivedProgressCallback = callback
+      }
+      return fileTransfer
+    }
+    let receiveFile: MessengerReceiveFile = .live(env)
+
+    try receiveFile(.stub) { info in
+      didReceiveCallback.append(info)
+    }
+
+    receivedProgressCallback?.handle(.failure(error))
+
+    XCTAssertNoDifference(didReceiveCallback, [
+      .failed(.callbackError(error))
+    ])
+  }
+
+  func testReceiveFileReceiveError() throws {
+    let error = NSError(domain: "test", code: 123)
+
+    var receivedProgressCallback: FileTransferProgressCallback?
+    var didReceiveCallback: [MessengerReceiveFile.CallbackInfo] = []
+
+    var env: MessengerEnvironment = .unimplemented
+    env.fileTransfer.get = {
+      var fileTransfer: FileTransfer = .unimplemented
+      fileTransfer.registerReceivedProgressCallback.run = { _, _, callback in
+        receivedProgressCallback = callback
+      }
+      fileTransfer.receive.run = { _ in
+        throw error
+      }
+      return fileTransfer
+    }
+    let receiveFile: MessengerReceiveFile = .live(env)
+
+    try receiveFile(.stub) { info in
+      didReceiveCallback.append(info)
+    }
+
+    receivedProgressCallback?.handle(.success(
+      FileTransferProgressCallback.Callback(
+        progress: Progress(
+          completed: true,
+          transmitted: 3,
+          total: 3,
+          error: nil
+        ),
+        partTracker: .unimplemented
+      )
+    ))
+
+    XCTAssertNoDifference(didReceiveCallback, [
+      .failed(.receiveError(error))
+    ])
+  }
+}
+
+private extension MessengerReceiveFile.Params {
+  static let stub = MessengerReceiveFile.Params(
+    transferId: "transfer-id".data(using: .utf8)!,
+    callbackIntervalMS: 123
+  )
 }
-- 
GitLab


From c7898f41acf12d0c60f064102e94f049ed63ef6a Mon Sep 17 00:00:00 2001
From: Dariusz Rybicki <dariusz@elixxir.io>
Date: Mon, 17 Oct 2022 00:23:25 +0200
Subject: [PATCH 09/18] Add ReceiveFileCallbacksRegistry

---
 .../Utils/ReceiveFileCallbacksRegistry.swift  | 36 ++++++++++++
 .../ReceiveFileCallbacksRegistryTests.swift   | 57 +++++++++++++++++++
 2 files changed, 93 insertions(+)
 create mode 100644 Sources/XXMessengerClient/Utils/ReceiveFileCallbacksRegistry.swift
 create mode 100644 Tests/XXMessengerClientTests/Utils/ReceiveFileCallbacksRegistryTests.swift

diff --git a/Sources/XXMessengerClient/Utils/ReceiveFileCallbacksRegistry.swift b/Sources/XXMessengerClient/Utils/ReceiveFileCallbacksRegistry.swift
new file mode 100644
index 00000000..e82670ca
--- /dev/null
+++ b/Sources/XXMessengerClient/Utils/ReceiveFileCallbacksRegistry.swift
@@ -0,0 +1,36 @@
+import Foundation
+import XCTestDynamicOverlay
+import XXClient
+
+public struct ReceiveFileCallbacksRegistry {
+  public var register: (ReceiveFileCallback) -> Cancellable
+  public var registered: () -> ReceiveFileCallback
+}
+
+extension ReceiveFileCallbacksRegistry {
+  public static func live() -> ReceiveFileCallbacksRegistry {
+    class Registry {
+      var callbacks: [UUID: ReceiveFileCallback] = [:]
+    }
+    let registry = Registry()
+    return ReceiveFileCallbacksRegistry(
+      register: { callback in
+        let id = UUID()
+        registry.callbacks[id] = callback
+        return Cancellable { registry.callbacks[id] = nil }
+      },
+      registered: {
+        ReceiveFileCallback { result in
+          registry.callbacks.values.forEach { $0.handle(result) }
+        }
+      }
+    )
+  }
+}
+
+extension ReceiveFileCallbacksRegistry {
+  public static let unimplemented = ReceiveFileCallbacksRegistry(
+    register: XCTUnimplemented("\(Self.self).register", placeholder: Cancellable {}),
+    registered: XCTUnimplemented("\(Self.self).registered", placeholder: .unimplemented)
+  )
+}
diff --git a/Tests/XXMessengerClientTests/Utils/ReceiveFileCallbacksRegistryTests.swift b/Tests/XXMessengerClientTests/Utils/ReceiveFileCallbacksRegistryTests.swift
new file mode 100644
index 00000000..d40e6d79
--- /dev/null
+++ b/Tests/XXMessengerClientTests/Utils/ReceiveFileCallbacksRegistryTests.swift
@@ -0,0 +1,57 @@
+import CustomDump
+import XCTest
+import XXClient
+@testable import XXMessengerClient
+
+final class ReceiveFileCallbacksRegistryTests: XCTestCase {
+  func testRegistry() {
+    var firstCallbackDidHandle: [Result<ReceivedFile, NSError>] = []
+    var secondCallbackDidHandle: [Result<ReceivedFile, NSError>] = []
+
+    let firstCallback = ReceiveFileCallback { result in
+      firstCallbackDidHandle.append(result)
+    }
+    let secondCallback = ReceiveFileCallback { result in
+      secondCallbackDidHandle.append(result)
+    }
+    let callbackRegistry: ReceiveFileCallbacksRegistry = .live()
+    let registeredCallbacks = callbackRegistry.registered()
+    let firstCallbackCancellable = callbackRegistry.register(firstCallback)
+    let secondCallbackCancellable = callbackRegistry.register(secondCallback)
+
+    let firstResult = Result<ReceivedFile, NSError>.success(.stub(1))
+    registeredCallbacks.handle(firstResult)
+
+    XCTAssertNoDifference(firstCallbackDidHandle, [firstResult])
+    XCTAssertNoDifference(secondCallbackDidHandle, [firstResult])
+
+    firstCallbackCancellable.cancel()
+    let secondError = NSError(domain: "test", code: 321)
+    let secondResult = Result<ReceivedFile, NSError>.failure(secondError)
+    registeredCallbacks.handle(secondResult)
+
+    XCTAssertNoDifference(firstCallbackDidHandle, [firstResult])
+    XCTAssertNoDifference(secondCallbackDidHandle, [firstResult, secondResult])
+
+    secondCallbackCancellable.cancel()
+
+    let thirdData = Result<ReceivedFile, NSError>.success(.stub(2))
+    registeredCallbacks.handle(thirdData)
+
+    XCTAssertNoDifference(firstCallbackDidHandle, [firstResult])
+    XCTAssertNoDifference(secondCallbackDidHandle, [firstResult, secondResult])
+  }
+}
+
+private extension ReceivedFile {
+  static func stub(_ id: Int) -> ReceivedFile {
+    ReceivedFile(
+      transferId: "transfer-id-\(id)".data(using: .utf8)!,
+      senderId: "sender-id-\(id)".data(using: .utf8)!,
+      preview: "preview-\(id)".data(using: .utf8)!,
+      name: "name-\(id)",
+      type: "type-\(id)",
+      size: id
+    )
+  }
+}
-- 
GitLab


From eeef2850d04be71742308bbe49c1aca6898aef19 Mon Sep 17 00:00:00 2001
From: Dariusz Rybicki <dariusz@elixxir.io>
Date: Mon, 17 Oct 2022 00:28:49 +0200
Subject: [PATCH 10/18] Refactor ReceiveFileCallback

---
 Sources/XXClient/Callbacks/ReceiveFileCallback.swift   |  6 ++++--
 .../Utils/ReceiveFileCallbacksRegistryTests.swift      | 10 +++++-----
 2 files changed, 9 insertions(+), 7 deletions(-)

diff --git a/Sources/XXClient/Callbacks/ReceiveFileCallback.swift b/Sources/XXClient/Callbacks/ReceiveFileCallback.swift
index 3f414934..2c1d94be 100644
--- a/Sources/XXClient/Callbacks/ReceiveFileCallback.swift
+++ b/Sources/XXClient/Callbacks/ReceiveFileCallback.swift
@@ -2,11 +2,13 @@ import Bindings
 import XCTestDynamicOverlay
 
 public struct ReceiveFileCallback {
-  public init(handle: @escaping (Result<ReceivedFile, NSError>) -> Void) {
+  public typealias Result = Swift.Result<ReceivedFile, NSError>
+
+  public init(handle: @escaping (Result) -> Void) {
     self.handle = handle
   }
 
-  public var handle: (Result<ReceivedFile, NSError>) -> Void
+  public var handle: (Result) -> Void
 }
 
 extension ReceiveFileCallback {
diff --git a/Tests/XXMessengerClientTests/Utils/ReceiveFileCallbacksRegistryTests.swift b/Tests/XXMessengerClientTests/Utils/ReceiveFileCallbacksRegistryTests.swift
index d40e6d79..e99890b4 100644
--- a/Tests/XXMessengerClientTests/Utils/ReceiveFileCallbacksRegistryTests.swift
+++ b/Tests/XXMessengerClientTests/Utils/ReceiveFileCallbacksRegistryTests.swift
@@ -5,8 +5,8 @@ import XXClient
 
 final class ReceiveFileCallbacksRegistryTests: XCTestCase {
   func testRegistry() {
-    var firstCallbackDidHandle: [Result<ReceivedFile, NSError>] = []
-    var secondCallbackDidHandle: [Result<ReceivedFile, NSError>] = []
+    var firstCallbackDidHandle: [ReceiveFileCallback.Result] = []
+    var secondCallbackDidHandle: [ReceiveFileCallback.Result] = []
 
     let firstCallback = ReceiveFileCallback { result in
       firstCallbackDidHandle.append(result)
@@ -19,7 +19,7 @@ final class ReceiveFileCallbacksRegistryTests: XCTestCase {
     let firstCallbackCancellable = callbackRegistry.register(firstCallback)
     let secondCallbackCancellable = callbackRegistry.register(secondCallback)
 
-    let firstResult = Result<ReceivedFile, NSError>.success(.stub(1))
+    let firstResult = ReceiveFileCallback.Result.success(.stub(1))
     registeredCallbacks.handle(firstResult)
 
     XCTAssertNoDifference(firstCallbackDidHandle, [firstResult])
@@ -27,7 +27,7 @@ final class ReceiveFileCallbacksRegistryTests: XCTestCase {
 
     firstCallbackCancellable.cancel()
     let secondError = NSError(domain: "test", code: 321)
-    let secondResult = Result<ReceivedFile, NSError>.failure(secondError)
+    let secondResult = ReceiveFileCallback.Result.failure(secondError)
     registeredCallbacks.handle(secondResult)
 
     XCTAssertNoDifference(firstCallbackDidHandle, [firstResult])
@@ -35,7 +35,7 @@ final class ReceiveFileCallbacksRegistryTests: XCTestCase {
 
     secondCallbackCancellable.cancel()
 
-    let thirdData = Result<ReceivedFile, NSError>.success(.stub(2))
+    let thirdData = ReceiveFileCallback.Result.success(.stub(2))
     registeredCallbacks.handle(thirdData)
 
     XCTAssertNoDifference(firstCallbackDidHandle, [firstResult])
-- 
GitLab


From 226213375824d62cdd98a6d894180bcf5ab844d8 Mon Sep 17 00:00:00 2001
From: Dariusz Rybicki <dariusz@elixxir.io>
Date: Mon, 17 Oct 2022 00:30:31 +0200
Subject: [PATCH 11/18] Refactor

---
 .../TestHelpers/TestDoubles.swift                   | 13 +++++++++++++
 .../Utils/ReceiveFileCallbacksRegistryTests.swift   | 13 -------------
 2 files changed, 13 insertions(+), 13 deletions(-)

diff --git a/Tests/XXMessengerClientTests/TestHelpers/TestDoubles.swift b/Tests/XXMessengerClientTests/TestHelpers/TestDoubles.swift
index c9a90bde..93110b2e 100644
--- a/Tests/XXMessengerClientTests/TestHelpers/TestDoubles.swift
+++ b/Tests/XXMessengerClientTests/TestHelpers/TestDoubles.swift
@@ -23,3 +23,16 @@ extension BackupParams {
     username: "stub-username"
   )
 }
+
+extension ReceivedFile {
+  static func stub(_ id: Int) -> ReceivedFile {
+    ReceivedFile(
+      transferId: "transfer-id-\(id)".data(using: .utf8)!,
+      senderId: "sender-id-\(id)".data(using: .utf8)!,
+      preview: "preview-\(id)".data(using: .utf8)!,
+      name: "name-\(id)",
+      type: "type-\(id)",
+      size: id
+    )
+  }
+}
diff --git a/Tests/XXMessengerClientTests/Utils/ReceiveFileCallbacksRegistryTests.swift b/Tests/XXMessengerClientTests/Utils/ReceiveFileCallbacksRegistryTests.swift
index e99890b4..87733caa 100644
--- a/Tests/XXMessengerClientTests/Utils/ReceiveFileCallbacksRegistryTests.swift
+++ b/Tests/XXMessengerClientTests/Utils/ReceiveFileCallbacksRegistryTests.swift
@@ -42,16 +42,3 @@ final class ReceiveFileCallbacksRegistryTests: XCTestCase {
     XCTAssertNoDifference(secondCallbackDidHandle, [firstResult, secondResult])
   }
 }
-
-private extension ReceivedFile {
-  static func stub(_ id: Int) -> ReceivedFile {
-    ReceivedFile(
-      transferId: "transfer-id-\(id)".data(using: .utf8)!,
-      senderId: "sender-id-\(id)".data(using: .utf8)!,
-      preview: "preview-\(id)".data(using: .utf8)!,
-      name: "name-\(id)",
-      type: "type-\(id)",
-      size: id
-    )
-  }
-}
-- 
GitLab


From 393e17ff0550d5c202528cb6b5ed47bcb8433279 Mon Sep 17 00:00:00 2001
From: Dariusz Rybicki <dariusz@elixxir.io>
Date: Mon, 17 Oct 2022 00:32:43 +0200
Subject: [PATCH 12/18] Use ReceiveFileCallbacksRegistry

---
 .../Functions/MessengerStartFileTransfer.swift |  4 +---
 .../Messenger/MessengerEnvironment.swift       |  3 +++
 .../MessengerStartFileTransferTests.swift      | 18 ++++++++++++++++++
 3 files changed, 22 insertions(+), 3 deletions(-)

diff --git a/Sources/XXMessengerClient/Messenger/Functions/MessengerStartFileTransfer.swift b/Sources/XXMessengerClient/Messenger/Functions/MessengerStartFileTransfer.swift
index 4a8e460d..2ce92adf 100644
--- a/Sources/XXMessengerClient/Messenger/Functions/MessengerStartFileTransfer.swift
+++ b/Sources/XXMessengerClient/Messenger/Functions/MessengerStartFileTransfer.swift
@@ -25,9 +25,7 @@ extension MessengerStartFileTransfer {
           e2eFileTransferParamsJSON: env.getE2EFileTransferParams(),
           fileTransferParamsJSON: env.getFileTransferParams()
         ),
-        callback: ReceiveFileCallback { result in
-          // TODO:
-        }
+        callback: env.receiveFileCallbacksRegistry.registered()
       )
       env.fileTransfer.set(fileTransfer)
     }
diff --git a/Sources/XXMessengerClient/Messenger/MessengerEnvironment.swift b/Sources/XXMessengerClient/Messenger/MessengerEnvironment.swift
index 30f3b22e..dcb706d4 100644
--- a/Sources/XXMessengerClient/Messenger/MessengerEnvironment.swift
+++ b/Sources/XXMessengerClient/Messenger/MessengerEnvironment.swift
@@ -33,6 +33,7 @@ public struct MessengerEnvironment {
   public var newOrLoadUd: NewOrLoadUd
   public var newUdManagerFromBackup: NewUdManagerFromBackup
   public var passwordStorage: PasswordStorage
+  public var receiveFileCallbacksRegistry: ReceiveFileCallbacksRegistry
   public var registerForNotifications: RegisterForNotifications
   public var registerLogWriter: RegisterLogWriter
   public var resumeBackup: ResumeBackup
@@ -83,6 +84,7 @@ extension MessengerEnvironment {
       newOrLoadUd: .live,
       newUdManagerFromBackup: .live,
       passwordStorage: .keychain,
+      receiveFileCallbacksRegistry: .live(),
       registerForNotifications: .live,
       registerLogWriter: .live,
       resumeBackup: .live,
@@ -128,6 +130,7 @@ extension MessengerEnvironment {
     newOrLoadUd: .unimplemented,
     newUdManagerFromBackup: .unimplemented,
     passwordStorage: .unimplemented,
+    receiveFileCallbacksRegistry: .unimplemented,
     registerForNotifications: .unimplemented,
     registerLogWriter: .unimplemented,
     resumeBackup: .unimplemented,
diff --git a/Tests/XXMessengerClientTests/Messenger/Functions/MessengerStartFileTransferTests.swift b/Tests/XXMessengerClientTests/Messenger/Functions/MessengerStartFileTransferTests.swift
index 5164700f..f0da2047 100644
--- a/Tests/XXMessengerClientTests/Messenger/Functions/MessengerStartFileTransferTests.swift
+++ b/Tests/XXMessengerClientTests/Messenger/Functions/MessengerStartFileTransferTests.swift
@@ -12,6 +12,7 @@ final class MessengerStartFileTransferTests: XCTestCase {
     var didInitFileTransfer: [InitFileTransfer.Params] = []
     var receiveFileCallback: ReceiveFileCallback?
     var didSetFileTransfer: [FileTransfer?] = []
+    var didReceiveFile: [ReceiveFileCallback.Result] = []
 
     var env: MessengerEnvironment = .unimplemented
     env.e2e.get = {
@@ -33,6 +34,11 @@ final class MessengerStartFileTransferTests: XCTestCase {
     env.fileTransfer.set = {
       didSetFileTransfer.append($0)
     }
+    env.receiveFileCallbacksRegistry.registered = {
+      ReceiveFileCallback { result in
+        didReceiveFile.append(result)
+      }
+    }
 
     let start: MessengerStartFileTransfer = .live(env)
 
@@ -45,6 +51,17 @@ final class MessengerStartFileTransferTests: XCTestCase {
     )])
     XCTAssertNotNil(receiveFileCallback)
     XCTAssertNoDifference(didSetFileTransfer.map { $0 != nil }, [true])
+
+    let error = NSError(domain: "test", code: 7)
+    receiveFileCallback?.handle(.success(.stub(1)))
+    receiveFileCallback?.handle(.failure(error))
+    receiveFileCallback?.handle(.success(.stub(2)))
+
+    XCTAssertNoDifference(didReceiveFile, [
+      .success(.stub(1)),
+      .failure(error),
+      .success(.stub(2)),
+    ])
   }
 
   func testStartWhenNotConnected() {
@@ -60,3 +77,4 @@ final class MessengerStartFileTransferTests: XCTestCase {
     }
   }
 }
+
-- 
GitLab


From 2edf739af1f1d322c45fe31db195c7de0f48a5d2 Mon Sep 17 00:00:00 2001
From: Dariusz Rybicki <dariusz@elixxir.io>
Date: Mon, 17 Oct 2022 00:38:49 +0200
Subject: [PATCH 13/18] Add MessengerRegisterReceiveFileCallback function

---
 ...MessengerRegisterReceiveFileCallback.swift | 24 +++++++++++++
 .../Messenger/Messenger.swift                 |  3 ++
 ...ngerRegisterReceiveFileCallbackTests.swift | 34 +++++++++++++++++++
 3 files changed, 61 insertions(+)
 create mode 100644 Sources/XXMessengerClient/Messenger/Functions/MessengerRegisterReceiveFileCallback.swift
 create mode 100644 Tests/XXMessengerClientTests/Messenger/Functions/MessengerRegisterReceiveFileCallbackTests.swift

diff --git a/Sources/XXMessengerClient/Messenger/Functions/MessengerRegisterReceiveFileCallback.swift b/Sources/XXMessengerClient/Messenger/Functions/MessengerRegisterReceiveFileCallback.swift
new file mode 100644
index 00000000..42d56389
--- /dev/null
+++ b/Sources/XXMessengerClient/Messenger/Functions/MessengerRegisterReceiveFileCallback.swift
@@ -0,0 +1,24 @@
+import XCTestDynamicOverlay
+import XXClient
+
+public struct MessengerRegisterReceiveFileCallback {
+  public var run: (ReceiveFileCallback) -> Cancellable
+
+  public func callAsFunction(_ callback: ReceiveFileCallback) -> Cancellable {
+    run(callback)
+  }
+}
+
+extension MessengerRegisterReceiveFileCallback {
+  public static func live(_ env: MessengerEnvironment) -> MessengerRegisterReceiveFileCallback {
+    MessengerRegisterReceiveFileCallback { callback in
+      env.receiveFileCallbacksRegistry.register(callback)
+    }
+  }
+}
+
+extension MessengerRegisterReceiveFileCallback {
+  public static let unimplemented = MessengerRegisterReceiveFileCallback(
+    run: XCTUnimplemented("\(Self.self)", placeholder: Cancellable {})
+  )
+}
diff --git a/Sources/XXMessengerClient/Messenger/Messenger.swift b/Sources/XXMessengerClient/Messenger/Messenger.swift
index 793daab0..d565ebb2 100644
--- a/Sources/XXMessengerClient/Messenger/Messenger.swift
+++ b/Sources/XXMessengerClient/Messenger/Messenger.swift
@@ -40,6 +40,7 @@ public struct Messenger {
   public var stopBackup: MessengerStopBackup
   public var setLogLevel: MessengerSetLogLevel
   public var startLogging: MessengerStartLogging
+  public var registerReceiveFileCallback: MessengerRegisterReceiveFileCallback
   public var startFileTransfer: MessengerStartFileTransfer
   public var sendFile: MessengerSendFile
   public var receiveFile: MessengerReceiveFile
@@ -87,6 +88,7 @@ extension Messenger {
       stopBackup: .live(env),
       setLogLevel: .live(env),
       startLogging: .live(env),
+      registerReceiveFileCallback: .live(env),
       startFileTransfer: .live(env),
       sendFile: .live(env),
       receiveFile: .live(env)
@@ -135,6 +137,7 @@ extension Messenger {
     stopBackup: .unimplemented,
     setLogLevel: .unimplemented,
     startLogging: .unimplemented,
+    registerReceiveFileCallback: .unimplemented,
     startFileTransfer: .unimplemented,
     sendFile: .unimplemented,
     receiveFile: .unimplemented
diff --git a/Tests/XXMessengerClientTests/Messenger/Functions/MessengerRegisterReceiveFileCallbackTests.swift b/Tests/XXMessengerClientTests/Messenger/Functions/MessengerRegisterReceiveFileCallbackTests.swift
new file mode 100644
index 00000000..c30bb10a
--- /dev/null
+++ b/Tests/XXMessengerClientTests/Messenger/Functions/MessengerRegisterReceiveFileCallbackTests.swift
@@ -0,0 +1,34 @@
+import CustomDump
+import XCTest
+import XXClient
+@testable import XXMessengerClient
+
+final class MessengerRegisterReceiveFileCallbackTests: XCTestCase {
+  func testRegisterCallback() {
+    var registeredCallbacks: [ReceiveFileCallback] = []
+    var didHandleResult: [ReceiveFileCallback.Result] = []
+    var didCancelRegisteredCallback = 0
+
+    var env: MessengerEnvironment = .unimplemented
+    env.receiveFileCallbacksRegistry.register = { callback in
+      registeredCallbacks.append(callback)
+      return Cancellable { didCancelRegisteredCallback += 1 }
+    }
+    let registerCallback: MessengerRegisterReceiveFileCallback = .live(env)
+    let cancellable = registerCallback(ReceiveFileCallback { result in
+      didHandleResult.append(result)
+    })
+
+    XCTAssertEqual(registeredCallbacks.count, 1)
+
+    registeredCallbacks.forEach { callback in
+      callback.handle(.success(.stub(1)))
+    }
+
+    XCTAssertNoDifference(didHandleResult, [.success(.stub(1))])
+
+    cancellable.cancel()
+
+    XCTAssertEqual(didCancelRegisteredCallback, 1)
+  }
+}
-- 
GitLab


From d7929432c0531c2bb6ccf241a4b686cdca3bc36d Mon Sep 17 00:00:00 2001
From: Dariusz Rybicki <dariusz@elixxir.io>
Date: Mon, 17 Oct 2022 00:40:00 +0200
Subject: [PATCH 14/18] Refactor

---
 .../Functions/MessengerRegisterReceiveFileCallback.swift    | 2 +-
 .../Messenger/Functions/MessengerStartFileTransfer.swift    | 2 +-
 .../XXMessengerClient/Messenger/MessengerEnvironment.swift  | 6 +++---
 .../MessengerRegisterReceiveFileCallbackTests.swift         | 2 +-
 .../Functions/MessengerStartFileTransferTests.swift         | 2 +-
 5 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/Sources/XXMessengerClient/Messenger/Functions/MessengerRegisterReceiveFileCallback.swift b/Sources/XXMessengerClient/Messenger/Functions/MessengerRegisterReceiveFileCallback.swift
index 42d56389..e5dddd8a 100644
--- a/Sources/XXMessengerClient/Messenger/Functions/MessengerRegisterReceiveFileCallback.swift
+++ b/Sources/XXMessengerClient/Messenger/Functions/MessengerRegisterReceiveFileCallback.swift
@@ -12,7 +12,7 @@ public struct MessengerRegisterReceiveFileCallback {
 extension MessengerRegisterReceiveFileCallback {
   public static func live(_ env: MessengerEnvironment) -> MessengerRegisterReceiveFileCallback {
     MessengerRegisterReceiveFileCallback { callback in
-      env.receiveFileCallbacksRegistry.register(callback)
+      env.receiveFileCallbacks.register(callback)
     }
   }
 }
diff --git a/Sources/XXMessengerClient/Messenger/Functions/MessengerStartFileTransfer.swift b/Sources/XXMessengerClient/Messenger/Functions/MessengerStartFileTransfer.swift
index 2ce92adf..11dfd35a 100644
--- a/Sources/XXMessengerClient/Messenger/Functions/MessengerStartFileTransfer.swift
+++ b/Sources/XXMessengerClient/Messenger/Functions/MessengerStartFileTransfer.swift
@@ -25,7 +25,7 @@ extension MessengerStartFileTransfer {
           e2eFileTransferParamsJSON: env.getE2EFileTransferParams(),
           fileTransferParamsJSON: env.getFileTransferParams()
         ),
-        callback: env.receiveFileCallbacksRegistry.registered()
+        callback: env.receiveFileCallbacks.registered()
       )
       env.fileTransfer.set(fileTransfer)
     }
diff --git a/Sources/XXMessengerClient/Messenger/MessengerEnvironment.swift b/Sources/XXMessengerClient/Messenger/MessengerEnvironment.swift
index dcb706d4..a1ab1517 100644
--- a/Sources/XXMessengerClient/Messenger/MessengerEnvironment.swift
+++ b/Sources/XXMessengerClient/Messenger/MessengerEnvironment.swift
@@ -33,7 +33,7 @@ public struct MessengerEnvironment {
   public var newOrLoadUd: NewOrLoadUd
   public var newUdManagerFromBackup: NewUdManagerFromBackup
   public var passwordStorage: PasswordStorage
-  public var receiveFileCallbacksRegistry: ReceiveFileCallbacksRegistry
+  public var receiveFileCallbacks: ReceiveFileCallbacksRegistry
   public var registerForNotifications: RegisterForNotifications
   public var registerLogWriter: RegisterLogWriter
   public var resumeBackup: ResumeBackup
@@ -84,7 +84,7 @@ extension MessengerEnvironment {
       newOrLoadUd: .live,
       newUdManagerFromBackup: .live,
       passwordStorage: .keychain,
-      receiveFileCallbacksRegistry: .live(),
+      receiveFileCallbacks: .live(),
       registerForNotifications: .live,
       registerLogWriter: .live,
       resumeBackup: .live,
@@ -130,7 +130,7 @@ extension MessengerEnvironment {
     newOrLoadUd: .unimplemented,
     newUdManagerFromBackup: .unimplemented,
     passwordStorage: .unimplemented,
-    receiveFileCallbacksRegistry: .unimplemented,
+    receiveFileCallbacks: .unimplemented,
     registerForNotifications: .unimplemented,
     registerLogWriter: .unimplemented,
     resumeBackup: .unimplemented,
diff --git a/Tests/XXMessengerClientTests/Messenger/Functions/MessengerRegisterReceiveFileCallbackTests.swift b/Tests/XXMessengerClientTests/Messenger/Functions/MessengerRegisterReceiveFileCallbackTests.swift
index c30bb10a..95a6cabc 100644
--- a/Tests/XXMessengerClientTests/Messenger/Functions/MessengerRegisterReceiveFileCallbackTests.swift
+++ b/Tests/XXMessengerClientTests/Messenger/Functions/MessengerRegisterReceiveFileCallbackTests.swift
@@ -10,7 +10,7 @@ final class MessengerRegisterReceiveFileCallbackTests: XCTestCase {
     var didCancelRegisteredCallback = 0
 
     var env: MessengerEnvironment = .unimplemented
-    env.receiveFileCallbacksRegistry.register = { callback in
+    env.receiveFileCallbacks.register = { callback in
       registeredCallbacks.append(callback)
       return Cancellable { didCancelRegisteredCallback += 1 }
     }
diff --git a/Tests/XXMessengerClientTests/Messenger/Functions/MessengerStartFileTransferTests.swift b/Tests/XXMessengerClientTests/Messenger/Functions/MessengerStartFileTransferTests.swift
index f0da2047..8e6d3528 100644
--- a/Tests/XXMessengerClientTests/Messenger/Functions/MessengerStartFileTransferTests.swift
+++ b/Tests/XXMessengerClientTests/Messenger/Functions/MessengerStartFileTransferTests.swift
@@ -34,7 +34,7 @@ final class MessengerStartFileTransferTests: XCTestCase {
     env.fileTransfer.set = {
       didSetFileTransfer.append($0)
     }
-    env.receiveFileCallbacksRegistry.registered = {
+    env.receiveFileCallbacks.registered = {
       ReceiveFileCallback { result in
         didReceiveFile.append(result)
       }
-- 
GitLab


From 87a3d372c95ce1c643ae31a4c8e64fcdbd696b19 Mon Sep 17 00:00:00 2001
From: Dariusz Rybicki <dariusz@elixxir.io>
Date: Mon, 17 Oct 2022 00:55:55 +0200
Subject: [PATCH 15/18] Update docs

---
 Docs/XXMessengerClient.md | 63 ++++++++++++++++++++++++++++++++++++++-
 1 file changed, 62 insertions(+), 1 deletion(-)

diff --git a/Docs/XXMessengerClient.md b/Docs/XXMessengerClient.md
index efbb9de7..c2f407c3 100644
--- a/Docs/XXMessengerClient.md
+++ b/Docs/XXMessengerClient.md
@@ -155,4 +155,65 @@ let restoredEmail = facts.get(.email)?.value
 let restoredPhone = facts.get(.phone)?.value
 ```
 
-If no error was thrown during restoration, the `Messenger` is already loaded, started, connected, and logged in.
\ No newline at end of file
+If no error was thrown during restoration, the `Messenger` is already loaded, started, connected, and logged in.
+
+## 🚢 File transfers
+
+### Setup for receiving files
+
+```swift
+// register receive file callback before starting file transfer manager:
+let cancellable = messenger.registerReceiveFileCallback(.init { result in
+  switch result {
+  case .success(let receivedFile):
+    // handle file metadata...
+
+    // start receiving file data:
+    try! messenger.receiveFile(.init(transferId: receivedFile.transferId)) { info in
+      switch info {
+      case .progress(let transmitted, let total):
+        // handle progress...
+
+      case .finished(let data):
+        // handle received file data...
+
+      case .failed(let error):
+        // handle error...
+      }
+    }
+
+  case .failure(let error):
+    // handle error...
+  }
+})
+
+// start file transfer manager:
+try messenger.startFileTransfer()
+```
+
+### Send files
+
+Make sure to call `messenger.startFileTransfer` before sending files.
+
+```swift
+let file = FileSend(
+  name: ...,
+  type: ...,
+  preview: ...,
+  contents: ...
+)
+
+// send file:
+let transferId = try messenger.sendFile(.init(file: file, recipientId: ...)) { info in
+  switch info {
+  case .progress(let transferId, let transmitted, let total):
+    // handle progress...
+
+  case .finished(let transferId):
+    // handle completion...
+
+  case .failed(let transferId, let error):
+    // handle error...
+  }
+}
+```
-- 
GitLab


From 34da59da3bc965a164af0d8e460ff91da63c5bcd Mon Sep 17 00:00:00 2001
From: Dariusz Rybicki <dariusz@elixxir.io>
Date: Mon, 17 Oct 2022 01:03:23 +0200
Subject: [PATCH 16/18] Remove CI caches

---
 .gitlab-ci.yml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 9f8233b4..2f28d862 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -9,6 +9,7 @@ before_script:
   - mkdir -p ~/.ssh
   - chmod 700 ~/.ssh
   - ssh-keyscan -t rsa $GITLAB_SERVER > ~/.ssh/known_hosts
+  - ./xcode-remove-caches.sh
 
 stages:
   - test
-- 
GitLab


From 72b5b4462e5e88670aeaefe7ccf0f74326fa2591 Mon Sep 17 00:00:00 2001
From: Dariusz Rybicki <dariusz@elixxir.io>
Date: Mon, 17 Oct 2022 01:03:34 +0200
Subject: [PATCH 17/18] Revert "Remove CI caches"

This reverts commit 34da59da3bc965a164af0d8e460ff91da63c5bcd.
---
 .gitlab-ci.yml | 1 -
 1 file changed, 1 deletion(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 2f28d862..9f8233b4 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -9,7 +9,6 @@ before_script:
   - mkdir -p ~/.ssh
   - chmod 700 ~/.ssh
   - ssh-keyscan -t rsa $GITLAB_SERVER > ~/.ssh/known_hosts
-  - ./xcode-remove-caches.sh
 
 stages:
   - test
-- 
GitLab


From 6acd670e8daa47806ebd504da4d085cc8f275505 Mon Sep 17 00:00:00 2001
From: Dariusz Rybicki <dariusz@elixxir.io>
Date: Mon, 17 Oct 2022 01:07:20 +0200
Subject: [PATCH 18/18] Update example app package dependencies

---
 .../xcshareddata/swiftpm/Package.resolved                 | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/Examples/xx-messenger/XXMessenger.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Examples/xx-messenger/XXMessenger.xcworkspace/xcshareddata/swiftpm/Package.resolved
index 51664bd6..482d554f 100644
--- a/Examples/xx-messenger/XXMessenger.xcworkspace/xcshareddata/swiftpm/Package.resolved
+++ b/Examples/xx-messenger/XXMessenger.xcworkspace/xcshareddata/swiftpm/Package.resolved
@@ -50,8 +50,8 @@
       "kind" : "remoteSourceControl",
       "location" : "https://github.com/pointfreeco/swift-case-paths",
       "state" : {
-        "revision" : "7346701ea29da0a85d4403cf3d7a589a58ae3dee",
-        "version" : "0.9.2"
+        "revision" : "15bba50ebf3a2065388c8d12210debe4f6ada202",
+        "version" : "0.10.0"
       }
     },
     {
@@ -68,8 +68,8 @@
       "kind" : "remoteSourceControl",
       "location" : "https://github.com/pointfreeco/swift-composable-architecture.git",
       "state" : {
-        "revision" : "9ea8c763061287052a68d5e6723fed45e898b7d9",
-        "version" : "0.40.2"
+        "revision" : "5c476994eaa79af8e466041f6de1ab116f37c528",
+        "version" : "0.42.0"
       }
     },
     {
-- 
GitLab