ios: add known server wip

This commit is contained in:
spaced4ndy
2024-06-27 11:58:44 +04:00
parent 1d83140c1d
commit 1af4cb0dcf
3 changed files with 54 additions and 4 deletions
+5
View File
@@ -487,6 +487,11 @@ func setUserProtoServers(_ serverProtocol: ServerProtocol, servers: [ServerCfg])
try await sendCommandOkResp(.apiSetUserProtoServers(userId: userId, serverProtocol: serverProtocol, servers: servers))
}
func addKnownProtoServer(server: String) async throws {
let userId = try currentUserId("addKnownProtoServer")
try await sendCommandOkResp(.apiAddKnownProtoServer(userId: userId, server: server))
}
func testProtoServer(server: String) async throws -> Result<(), ProtocolTestFailure> {
let userId = try currentUserId("testProtoServer")
let r = await chatSendCmd(.apiTestProtoServer(userId: userId, server: server))
@@ -385,9 +385,9 @@ struct SMPServerSummaryView: View {
.textSelection(.enabled)
if let known = summary.known, !known {
Button {
// TODO
addKnownServer()
} label: {
Text("TODO Add as known")
Text("Add as known")
}
}
} header: {
@@ -497,6 +497,21 @@ struct SMPServerSummaryView: View {
indentedInfoRow("errors", "\(stats._connSubErrs)")
}
}
func addKnownServer() {
Task {
do {
try await addKnownProtoServer(server: summary.smpServer)
await MainActor.run {
// TODO disable button, etc.
}
} catch let error {
await MainActor.run {
alert = errorAddingServerAlert(error)
}
}
}
}
}
private func indentedInfoRow(_ title: LocalizedStringKey, _ value: String) -> some View {
@@ -509,9 +524,20 @@ private func indentedInfoRow(_ title: LocalizedStringKey, _ value: String) -> so
}
}
private func errorAddingServerAlert(_ error: Error) -> SomeAlert {
SomeAlert(
alert: mkAlert(
title: "Error adding server",
message: "Make sure server address is in correct format (\(responseError(error)))."
),
id: "error saving server"
)
}
struct XFTPServerSummaryView: View {
var summary: XFTPServerSummary
var statsStartedAt: Date
@State private var alert: SomeAlert?
var body: some View {
List {
@@ -520,9 +546,9 @@ struct XFTPServerSummaryView: View {
.textSelection(.enabled)
if let known = summary.known, !known {
Button {
// TODO
addKnownServer()
} label: {
Text("TODO Add as known")
Text("Add as known")
}
}
} header: {
@@ -543,6 +569,7 @@ struct XFTPServerSummaryView: View {
statsSection(stats)
}
}
.alert(item: $alert) { $0.alert }
}
private func sessionsSection(_ sess: ServerSessions) -> some View {
@@ -580,6 +607,21 @@ struct XFTPServerSummaryView: View {
indentedInfoRow("errors", "\(stats._deleteErrs)")
}
}
func addKnownServer() {
Task {
do {
try await addKnownProtoServer(server: summary.xftpServer)
await MainActor.run {
// TODO disable button, etc.
}
} catch let error {
await MainActor.run {
alert = errorAddingServerAlert(error)
}
}
}
}
}
#Preview {
+3
View File
@@ -71,6 +71,7 @@ public enum ChatCommand {
case apiSendMemberContactInvitation(contactId: Int64, msg: MsgContent)
case apiGetUserProtoServers(userId: Int64, serverProtocol: ServerProtocol)
case apiSetUserProtoServers(userId: Int64, serverProtocol: ServerProtocol, servers: [ServerCfg])
case apiAddKnownProtoServer(userId: Int64, server: String)
case apiTestProtoServer(userId: Int64, server: String)
case apiSetChatItemTTL(userId: Int64, seconds: Int64?)
case apiGetChatItemTTL(userId: Int64)
@@ -224,6 +225,7 @@ public enum ChatCommand {
case let .apiSendMemberContactInvitation(contactId, mc): return "/_invite member contact @\(contactId) \(mc.cmdString)"
case let .apiGetUserProtoServers(userId, serverProtocol): return "/_servers \(userId) \(serverProtocol)"
case let .apiSetUserProtoServers(userId, serverProtocol, servers): return "/_servers \(userId) \(serverProtocol) \(protoServersStr(servers))"
case let .apiAddKnownProtoServer(userId, server): return "/_known server \(userId) \(server)"
case let .apiTestProtoServer(userId, server): return "/_server test \(userId) \(server)"
case let .apiSetChatItemTTL(userId, seconds): return "/_ttl \(userId) \(chatItemTTLStr(seconds: seconds))"
case let .apiGetChatItemTTL(userId): return "/_ttl \(userId)"
@@ -377,6 +379,7 @@ public enum ChatCommand {
case .apiSendMemberContactInvitation: return "apiSendMemberContactInvitation"
case .apiGetUserProtoServers: return "apiGetUserProtoServers"
case .apiSetUserProtoServers: return "apiSetUserProtoServers"
case .apiAddKnownProtoServer: return "apiAddKnownProtoServer"
case .apiTestProtoServer: return "apiTestProtoServer"
case .apiSetChatItemTTL: return "apiSetChatItemTTL"
case .apiGetChatItemTTL: return "apiGetChatItemTTL"