🐛 Fixed stupid app state updated twice
This commit is contained in:
@@ -19,22 +19,34 @@ class AppState: ObservableObject {
|
||||
let networkService = NetworkService()
|
||||
private var wcService = WatchConnectivityService()
|
||||
private var cancellables = Set<AnyCancellable>()
|
||||
private var hasAttemptedConnection = false
|
||||
|
||||
init() {
|
||||
wcService.$token.combineLatest(wcService.$serverUrl)
|
||||
wcService.$token.combineLatest(wcService.$serverUrl, wcService.$isFetched)
|
||||
.receive(on: DispatchQueue.main)
|
||||
.sink { [weak self] token, serverUrl in
|
||||
self?.token = token
|
||||
self?.serverUrl = serverUrl
|
||||
if let token = token, let serverUrl = serverUrl {
|
||||
self?.isReady = true
|
||||
// Auto-connect WebSocket here
|
||||
self?.networkService.connectWebSocket(token: token, serverUrl: serverUrl)
|
||||
} else {
|
||||
self?.isReady = false
|
||||
// Disconnect WebSocket if token or serverUrl become nil
|
||||
self?.networkService.disconnectWebSocket()
|
||||
} }
|
||||
.sink { [weak self] (token: String?, serverUrl: String?, isFetched: Bool?) in
|
||||
guard let self = self else { return }
|
||||
|
||||
self.token = token
|
||||
self.serverUrl = serverUrl
|
||||
|
||||
if let token = token, let serverUrl = serverUrl, !token.isEmpty, !serverUrl.isEmpty {
|
||||
self.isReady = true
|
||||
// Only connect once when we have valid credentials and tried fetch from phone
|
||||
if !self.hasAttemptedConnection && isFetched == true {
|
||||
self.hasAttemptedConnection = true
|
||||
print("[AppState] Connecting WebSocket to server: \(serverUrl)")
|
||||
self.networkService.connectWebSocket(token: token, serverUrl: serverUrl)
|
||||
}
|
||||
} else {
|
||||
self.isReady = false
|
||||
if self.hasAttemptedConnection {
|
||||
self.hasAttemptedConnection = false
|
||||
// Disconnect WebSocket if token or serverUrl become invalid
|
||||
self.networkService.disconnectWebSocket()
|
||||
}
|
||||
}
|
||||
}
|
||||
.store(in: &cancellables)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user