d8a6299600
Recognise own messages by id (prefix and case insensitive) or by node number, so chat bubbles align right with the accent colour even when the message only carries fromNodeNum. Fetch /api/v1/status and /api/status in parallel and merge them, since MeshMonitor 4 dropped localNode from the legacy endpoint. Add a "How to create a token" link, plus Source code and Report a bug links to the Settings screen. Default the server port to 8080 (MeshMonitor's Docker default). Add PRIVACY.md, refresh the README and ignore CLAUDE.md.
59 lines
1.4 KiB
Swift
59 lines
1.4 KiB
Swift
import Foundation
|
|
import Observation
|
|
|
|
struct ServerConfig: Equatable {
|
|
var host: String
|
|
var port: Int
|
|
var useTLS: Bool
|
|
var token: String
|
|
|
|
var isConfigured: Bool {
|
|
!host.trimmingCharacters(in: .whitespaces).isEmpty &&
|
|
!token.trimmingCharacters(in: .whitespaces).isEmpty
|
|
}
|
|
|
|
var baseURL: URL? {
|
|
var c = URLComponents()
|
|
c.scheme = useTLS ? "https" : "http"
|
|
c.host = host.trimmingCharacters(in: .whitespaces)
|
|
c.port = port
|
|
return c.url
|
|
}
|
|
}
|
|
|
|
@Observable
|
|
final class Settings {
|
|
private static let hostKey = "mm.host"
|
|
private static let portKey = "mm.port"
|
|
private static let tlsKey = "mm.tls"
|
|
private static let tokenKey = "mm.token"
|
|
|
|
var host: String {
|
|
didSet { UserDefaults.standard.set(host, forKey: Self.hostKey) }
|
|
}
|
|
var port: Int {
|
|
didSet { UserDefaults.standard.set(port, forKey: Self.portKey) }
|
|
}
|
|
var useTLS: Bool {
|
|
didSet { UserDefaults.standard.set(useTLS, forKey: Self.tlsKey) }
|
|
}
|
|
var token: String {
|
|
didSet { KeychainStore.set(token.isEmpty ? nil : token, for: Self.tokenKey) }
|
|
}
|
|
|
|
init() {
|
|
let d = UserDefaults.standard
|
|
host = d.string(forKey: Self.hostKey) ?? ""
|
|
let p = d.integer(forKey: Self.portKey)
|
|
port = p == 0 ? 8080 : p
|
|
useTLS = d.bool(forKey: Self.tlsKey)
|
|
token = KeychainStore.get(Self.tokenKey) ?? ""
|
|
}
|
|
|
|
var isConfigured: Bool { config.isConfigured }
|
|
|
|
var config: ServerConfig {
|
|
ServerConfig(host: host, port: port, useTLS: useTLS, token: token)
|
|
}
|
|
}
|