Files
Termind/TFI/Application/FeatureModels/MobileHostPickerModel.swift
T
2026-09-21 21:09:11 +08:00

50 lines
1.3 KiB
Swift

import Observation
import TermindApplication
import TermindDomain
import struct TermindDomain.Host
@MainActor
@Observable
final class MobileHostPickerModel {
var query = ""
private let library: HostLibraryModel
private let useCase: HostUseCase?
init(library: HostLibraryModel, useCase: HostUseCase? = nil) {
self.library = library
self.useCase = useCase
}
var isLibraryEmpty: Bool { library.hosts.isEmpty }
var hosts: [Host] {
if let useCase { return library.hosts(matching: query, for: useCase) }
return library.searchHosts(query)
}
func loginAddress(for host: Host) -> String { library.preferredTerminalLoginAddress(for: host) }
}
@MainActor
@Observable
final class MobileConnectionPickerModel {
var kind = ConnectionHistoryEntry.Kind.ssh
private let connect: (Host.ID, ConnectionHistoryEntry.Kind) -> Void
init(connect: @escaping (Host.ID, ConnectionHistoryEntry.Kind) -> Void) {
self.connect = connect
}
func select(_ host: Host) {
let resolved: ConnectionHistoryEntry.Kind
if kind == .ssh, host.preferredTerminalProtocol == .telnet {
resolved = .telnet
} else {
resolved = kind
}
connect(host.id, resolved)
}
}