50 lines
1.3 KiB
Swift
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)
|
|
}
|
|
}
|