mirror of
https://github.com/home-assistant/iOS.git
synced 2026-04-12 14:30:51 -05:00
<!-- Thank you for submitting a Pull Request and helping to improve Home Assistant. Please complete the following sections to help the processing and review of your changes. Please do not delete anything from this template. --> ## Summary <!-- Provide a brief summary of the changes you have made and most importantly what they aim to achieve --> ## Screenshots <!-- If this is a user-facing change not in the frontend, please include screenshots in light and dark mode. --> ## Link to pull request in Documentation repository <!-- Pull requests that add, change or remove functionality must have a corresponding pull request in the Companion App Documentation repository (https://github.com/home-assistant/companion.home-assistant). Please add the number of this pull request after the "#" --> Documentation: home-assistant/companion.home-assistant# ## Any other notes <!-- If there is any other information of note, like if this Pull Request is part of a bigger change, please include it here. --> https://github.com/user-attachments/assets/e79c6e4d-13ff-405a-9463-02e597ce4996
57 lines
1.4 KiB
Swift
57 lines
1.4 KiB
Swift
import Foundation
|
|
|
|
public enum OnboardingState: Equatable {
|
|
public enum NeededType: Equatable {
|
|
case logout
|
|
case error
|
|
case unauthenticated(_ serverId: String, _ code: Int)
|
|
|
|
public var shouldShowError: Bool {
|
|
switch self {
|
|
case .logout: return false
|
|
case .error: return true
|
|
case .unauthenticated: return false
|
|
}
|
|
}
|
|
}
|
|
|
|
case complete
|
|
case didConnect
|
|
case needed(NeededType)
|
|
}
|
|
|
|
public protocol OnboardingStateObserver: AnyObject {
|
|
func onboardingStateDidChange(to state: OnboardingState)
|
|
}
|
|
|
|
public class OnboardingStateObservation {
|
|
private var observers = NSHashTable<AnyObject>(options: .weakMemory)
|
|
|
|
public func register(observer: OnboardingStateObserver) {
|
|
observers.add(observer)
|
|
}
|
|
|
|
public func unregister(observer: OnboardingStateObserver) {
|
|
observers.remove(observer)
|
|
}
|
|
|
|
private func notify(for state: OnboardingState) {
|
|
observers
|
|
.allObjects
|
|
.compactMap { $0 as? OnboardingStateObserver }
|
|
.forEach { $0.onboardingStateDidChange(to: state) }
|
|
}
|
|
|
|
public func complete() {
|
|
notify(for: .complete)
|
|
}
|
|
|
|
public func needed(_ type: OnboardingState.NeededType) {
|
|
notify(for: .needed(type))
|
|
}
|
|
|
|
public func didConnect() {
|
|
notify(for: .didConnect)
|
|
}
|
|
}
|