import Foundation @MainActor final class DeviceViewModel: ObservableObject { @Published var snapshot: DeviceSnapshot? @Published var isLoading = false @Published var errorMessage: String? @Published private(set) var connectionStatus: ConnectionStatus = .unknown let instance: Instance private let service: DeviceService private let probe: ConnectionProbe? init(instance: Instance, service: DeviceService, probe: ConnectionProbe? = nil) { self.instance = instance self.service = service self.probe = probe } func refresh() async { isLoading = true errorMessage = nil do { snapshot = try await service.snapshot(instance) } catch DeviceServiceError.unauthorized { errorMessage = "需要实例密码登录后才能读取设备数据。" } catch { errorMessage = "无法加载设备数据。" } guard let probe else { connectionStatus = .offline isLoading = false return } let result = try? await probe.test(instance) connectionStatus = result?.status ?? .offline isLoading = false } }