Expose network state to iOS bridge

This commit is contained in:
Mikhail Kilin
2026-05-21 00:36:08 +03:00
parent 3e67e0d1b8
commit b3b02835b6
6 changed files with 43 additions and 1 deletions

View File

@@ -2,6 +2,7 @@ import Foundation
public protocol SessionBridge: Sendable {
func authState() async throws -> AuthState
func networkState() async throws -> NetworkState
func pollEvents() async throws -> [SessionEvent]
func sendPhoneNumber(_ phone: String) async throws
func sendCode(_ code: String) async throws
@@ -66,6 +67,10 @@ public actor FakeSessionBridge: SessionBridge {
auth
}
public func networkState() async throws -> NetworkState {
.ready
}
public func pollEvents() async throws -> [SessionEvent] {
let drained = events
events.removeAll()

View File

@@ -26,6 +26,10 @@ public actor UniFfiSessionBridge: SessionBridge {
Self.mapAuthState(handle.authState())
}
public func networkState() async throws -> NetworkState {
Self.mapNetworkState(handle.networkState())
}
public func pollEvents() async throws -> [SessionEvent] {
handle.pollEvents().map(Self.mapEvent)
}

View File

@@ -24,10 +24,24 @@ public final class SessionStore: ObservableObject {
}
}
public func refreshNetworkState() async {
do {
networkState = try await bridge.networkState()
errorMessage = nil
} catch {
errorMessage = error.localizedDescription
}
}
public func apply(events: [SessionEvent]) {
for event in events {
if case let .authChanged(state) = event {
switch event {
case let .authChanged(state):
authState = state
case let .networkChanged(state):
networkState = state
default:
break
}
}
}