-
Notifications
You must be signed in to change notification settings - Fork 9
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Co-authored-by: Matias Bzurovski <matias.bzurovski@rdx.works> Co-authored-by: matiasbzurovski <164921079+matiasbzurovski@users.noreply.github.com>
- Loading branch information
1 parent
2cf28b0
commit 04c658e
Showing
43 changed files
with
742 additions
and
240 deletions.
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
30 changes: 30 additions & 0 deletions
30
RadixWallet/Clients/AppEventsClient/AppEventsClient+Interface.swift
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
// MARK: - AppEventsClient | ||
public struct AppEventsClient: Sendable { | ||
public var handleEvent: HandleEvent | ||
public var events: Events | ||
|
||
init(handleEvent: @escaping HandleEvent, events: @escaping Events) { | ||
self.handleEvent = handleEvent | ||
self.events = events | ||
} | ||
} | ||
|
||
// MARK: AppEventsClient.HandleEvent | ||
extension AppEventsClient { | ||
public typealias HandleEvent = @Sendable (AppEvent) -> Void | ||
public typealias Events = @Sendable () -> AnyAsyncSequence<AppEvent> | ||
} | ||
|
||
extension DependencyValues { | ||
public var appEventsClient: AppEventsClient { | ||
get { self[AppEventsClient.self] } | ||
set { self[AppEventsClient.self] = newValue } | ||
} | ||
} | ||
|
||
// MARK: - AppEvent | ||
public enum AppEvent: Sendable, Hashable { | ||
case appStarted | ||
case walletCreated | ||
case deferredDeepLinkReceived(String) | ||
} |
14 changes: 14 additions & 0 deletions
14
RadixWallet/Clients/AppEventsClient/AppEventsClient+Live.swift
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
extension AppEventsClient: DependencyKey { | ||
public static let liveValue: AppEventsClient = { | ||
let eventsSubject = AsyncReplaySubject<AppEvent>(bufferSize: 10) | ||
|
||
return .init( | ||
handleEvent: { event in | ||
eventsSubject.send(event) | ||
}, | ||
events: { | ||
eventsSubject.eraseToAnyAsyncSequence() | ||
} | ||
) | ||
}() | ||
} |
16 changes: 16 additions & 0 deletions
16
RadixWallet/Clients/AppEventsClient/AppEventsClient+Test.swift
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
// MARK: - AppEventsClient + TestDependencyKey | ||
extension AppEventsClient: TestDependencyKey { | ||
public static let previewValue = Self.noop | ||
|
||
public static let testValue = Self( | ||
handleEvent: unimplemented("\(Self.self).handleEvent"), | ||
events: unimplemented("\(Self.self).events") | ||
) | ||
} | ||
|
||
extension AppEventsClient { | ||
public static let noop = Self( | ||
handleEvent: { _ in }, | ||
events: { AsyncLazySequence([]).eraseToAnyAsyncSequence() } | ||
) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
16 changes: 16 additions & 0 deletions
16
RadixWallet/Clients/BootstrapClient/BootstrapClient+Interface.swift
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
// MARK: - BootstrapClient | ||
struct BootstrapClient: Sendable { | ||
var bootstrap: Bootstrap | ||
} | ||
|
||
// MARK: BootstrapClient.Bootstrap | ||
extension BootstrapClient { | ||
typealias Bootstrap = @Sendable () -> Void | ||
} | ||
|
||
extension DependencyValues { | ||
var bootstrapClient: BootstrapClient { | ||
get { self[BootstrapClient.self] } | ||
set { self[BootstrapClient.self] = newValue } | ||
} | ||
} |
13 changes: 13 additions & 0 deletions
13
RadixWallet/Clients/BootstrapClient/BootstrapClient+Live.swift
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
extension BootstrapClient: DependencyKey { | ||
static var liveValue: BootstrapClient { | ||
@Dependency(\.appsFlyerClient) var appsFlyerClient | ||
@Dependency(\.homeCardsClient) var homeCardsClient | ||
|
||
return .init( | ||
bootstrap: { | ||
appsFlyerClient.start() | ||
homeCardsClient.bootstrap() | ||
} | ||
) | ||
} | ||
} |
32 changes: 32 additions & 0 deletions
32
RadixWallet/Clients/HomeCardsClient/HomeCardsClient+Interface.swift
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
// MARK: - HomeCardsClient | ||
public struct HomeCardsClient: Sendable { | ||
public var cards: Cards | ||
public var removeCard: RemoveCard | ||
|
||
init( | ||
cards: @escaping Cards, | ||
removeCard: @escaping RemoveCard | ||
) { | ||
self.cards = cards | ||
self.removeCard = removeCard | ||
} | ||
} | ||
|
||
extension HomeCardsClient { | ||
public typealias Cards = @Sendable () -> AnyAsyncSequence<[HomeCard]> | ||
public typealias RemoveCard = @Sendable (HomeCard) -> Void | ||
} | ||
|
||
extension DependencyValues { | ||
public var homeCardsClient: HomeCardsClient { | ||
get { self[HomeCardsClient.self] } | ||
set { self[HomeCardsClient.self] = newValue } | ||
} | ||
} | ||
|
||
extension HomeCardsClient { | ||
/// An empty method to be called when the app starts, so that the client gets initialized before being used for the first time. | ||
/// This is necessary to monitor events that need to be delivered to Sargon before the client is used from its respective UI. | ||
/// Should be removed once SargonOS is integrated. | ||
func bootstrap() {} | ||
} |
70 changes: 70 additions & 0 deletions
70
RadixWallet/Clients/HomeCardsClient/HomeCardsClient+Live.swift
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
import ComposableArchitecture | ||
|
||
// MARK: - HomeCardsClient + DependencyKey | ||
extension HomeCardsClient: DependencyKey { | ||
public static let liveValue: Self = { | ||
@Dependency(\.appEventsClient) var appEventsClient | ||
|
||
let observer = HomeCardsObserver() | ||
|
||
// We are hardcoding to `.mainnet` because the cards are currently gateway agnostic. In the future, when Profile is integrated into Sargon, it will be Sargon | ||
// observing the current gateway and defining the networkId to use. | ||
let manager = HomeCardsManager(networkAntenna: URLSession.shared, networkId: .mainnet, cardsStorage: HomeCardsStorage(), observer: observer) | ||
|
||
Task { | ||
for try await event in appEventsClient.events() { | ||
guard !Task.isCancelled else { return } | ||
await handle(event: event) | ||
} | ||
} | ||
|
||
@Sendable | ||
func handle(event: AppEvent) async { | ||
switch event { | ||
case .appStarted: | ||
try? await manager.bootstrap() | ||
case .walletCreated: | ||
try? await manager.walletCreated() | ||
case let .deferredDeepLinkReceived(value): | ||
try? await manager.deferredDeepLinkReceived(encodedValue: value) | ||
} | ||
} | ||
|
||
return Self( | ||
cards: { | ||
observer.subject.eraseToAnyAsyncSequence() | ||
}, | ||
removeCard: { card in | ||
Task { | ||
try? await manager.cardDismissed(card: card) | ||
} | ||
} | ||
) | ||
}() | ||
} | ||
|
||
// MARK: - HomeCardsManager + Sendable | ||
extension HomeCardsManager: @unchecked Sendable {} | ||
|
||
// MARK: - HomeCardsStorage | ||
private final class HomeCardsStorage: Sargon.HomeCardsStorage { | ||
private let userDefaults = UserDefaults.Dependency.radix | ||
|
||
func saveCards(encodedCards: Data) async throws { | ||
userDefaults.setHomeCards(encodedCards) | ||
} | ||
|
||
func loadCards() async throws -> Data? { | ||
userDefaults.getHomeCards() | ||
} | ||
} | ||
|
||
// MARK: - HomeCardsObserver | ||
private final class HomeCardsObserver: Sargon.HomeCardsObserver, Sendable { | ||
let subject: AsyncCurrentValueSubject<[HomeCard]> = .init([]) | ||
|
||
func handleCardsUpdate(cards: [HomeCard]) { | ||
print("M- Received cards from Sargon \(cards)") | ||
subject.send(cards) | ||
} | ||
} |
16 changes: 16 additions & 0 deletions
16
RadixWallet/Clients/HomeCardsClient/HomeCardsClient+Test.swift
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
// MARK: - HomeCardsClient + TestDependencyKey | ||
extension HomeCardsClient: TestDependencyKey { | ||
public static let previewValue = Self.noop | ||
|
||
public static let testValue = Self( | ||
cards: unimplemented("\(Self.self).cards"), | ||
removeCard: unimplemented("\(Self.self).removeCard") | ||
) | ||
} | ||
|
||
extension HomeCardsClient { | ||
public static let noop = Self( | ||
cards: { AsyncLazySequence([]).eraseToAnyAsyncSequence() }, | ||
removeCard: { _ in } | ||
) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
11 changes: 11 additions & 0 deletions
11
RadixWallet/Core/DesignSystem/Components/GeometryExtensions.swift
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
import Foundation | ||
|
||
extension CGRect { | ||
public subscript(unitPoint: UnitPoint) -> CGPoint { | ||
.init(x: minX + unitPoint.x * width, y: minY + unitPoint.y * height) | ||
} | ||
|
||
public var center: CGPoint { | ||
.init(x: midX, y: midY) | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.