diff --git a/apps/ios/Shared/Model/ChatModel.swift b/apps/ios/Shared/Model/ChatModel.swift index cc71c537a..fa51fbf40 100644 --- a/apps/ios/Shared/Model/ChatModel.swift +++ b/apps/ios/Shared/Model/ChatModel.swift @@ -24,8 +24,8 @@ final class ChatModel: ObservableObject { @Published var chatDbStatus: DBMigrationResult? // list of chat "previews" @Published var chats: [Chat] = [] - // map of connections network statuses, key is connection id - @Published var networkStatuses: Dictionary = [:] + // map of connections network statuses, key is agent connection id + @Published var networkStatuses: Dictionary = [:] // current chat @Published var chatId: String? @Published var reversedChatItems: [ChatItem] = [] @@ -492,12 +492,12 @@ final class ChatModel: ObservableObject { return reversedChatItems[min(i - 1, maxIx)] } - func updateContactNetworkStatus(_ contact: Contact, _ status: NetworkStatus) { - networkStatuses[contact.activeConn.connId] = status + func setContactNetworkStatus(_ contact: Contact, _ status: NetworkStatus) { + networkStatuses[contact.activeConn.agentConnId] = status } func contactNetworkStatus(_ contact: Contact) -> NetworkStatus { - networkStatuses[contact.activeConn.connId] ?? .unknown + networkStatuses[contact.activeConn.agentConnId] ?? .unknown } } diff --git a/apps/ios/Shared/Model/SimpleXAPI.swift b/apps/ios/Shared/Model/SimpleXAPI.swift index b76a3a3b2..89dedfa2c 100644 --- a/apps/ios/Shared/Model/SimpleXAPI.swift +++ b/apps/ios/Shared/Model/SimpleXAPI.swift @@ -1017,7 +1017,7 @@ func processReceivedMsg(_ res: ChatResponse) async { m.removeChat(contact.activeConn.id) NtfManager.shared.notifyContactConnected(user, contact) } - m.updateContactNetworkStatus(contact, .connected) + m.setContactNetworkStatus(contact, .connected) case let .contactConnecting(user, contact): if active(user) && contact.directOrUsed { m.updateContact(contact) @@ -1049,9 +1049,9 @@ func processReceivedMsg(_ res: ChatResponse) async { } m.removeChat(mergedContact.id) } - case let .contactsSubscribed(_, _, contactRefs): + case let .contactsSubscribed(_, contactRefs): updateContactsStatus(contactRefs, status: .connected) - case let .contactsDisconnected(_, _, contactRefs): + case let .contactsDisconnected(_, contactRefs): updateContactsStatus(contactRefs, status: .disconnected) case let .contactSubError(user, contact, chatError): if active(user) { @@ -1066,7 +1066,7 @@ func processReceivedMsg(_ res: ChatResponse) async { if let err = sub.contactError { processContactSubError(sub.contact, err) } else { - m.updateContactNetworkStatus(sub.contact, .connected) + m.setContactNetworkStatus(sub.contact, .connected) } } case let .newChatItem(user, aChatItem): @@ -1285,7 +1285,7 @@ func chatItemSimpleUpdate(_ aChatItem: AChatItem) { func updateContactsStatus(_ contactRefs: [ContactRef], status: NetworkStatus) { let m = ChatModel.shared for c in contactRefs { - m.networkStatuses[c.connId] = status + m.networkStatuses[c.agentConnId] = status } } @@ -1297,7 +1297,7 @@ func processContactSubError(_ contact: Contact, _ chatError: ChatError) { case .errorAgent(agentError: .SMP(smpErr: .AUTH)): err = "contact deleted" default: err = String(describing: chatError) } - m.updateContactNetworkStatus(contact, .error(err)) + m.setContactNetworkStatus(contact, .error(err)) } func refreshCallInvitations() throws { diff --git a/apps/ios/SimpleXChat/APITypes.swift b/apps/ios/SimpleXChat/APITypes.swift index 2ae5b79f9..de42584b7 100644 --- a/apps/ios/SimpleXChat/APITypes.swift +++ b/apps/ios/SimpleXChat/APITypes.swift @@ -348,8 +348,8 @@ public enum ChatResponse: Decodable, Error { case acceptingContactRequest(user: User, contact: Contact) case contactRequestRejected(user: User) case contactUpdated(user: User, toContact: Contact) - case contactsSubscribed(user: User, server: String, contactRefs: [ContactRef]) - case contactsDisconnected(user: User, server: String, contactRefs: [ContactRef]) + case contactsSubscribed(server: String, contactRefs: [ContactRef]) + case contactsDisconnected(server: String, contactRefs: [ContactRef]) case contactSubError(user: User, contact: Contact, chatError: ChatError) case contactSubSummary(user: User, contactSubscriptions: [ContactSubStatus]) case groupSubscribed(user: User, groupInfo: GroupInfo) @@ -562,8 +562,8 @@ public enum ChatResponse: Decodable, Error { case let .acceptingContactRequest(u, contact): return withUser(u, String(describing: contact)) case .contactRequestRejected: return noDetails case let .contactUpdated(u, toContact): return withUser(u, String(describing: toContact)) - case let .contactsSubscribed(u, server, contactRefs): return withUser(u, "server: \(server)\ncontacts:\n\(String(describing: contactRefs))") - case let .contactsDisconnected(u, server, contactRefs): return withUser(u, "server: \(server)\ncontacts:\n\(String(describing: contactRefs))") + case let .contactsSubscribed(server, contactRefs): return "server: \(server)\ncontacts:\n\(String(describing: contactRefs))" + case let .contactsDisconnected(server, contactRefs): return "server: \(server)\ncontacts:\n\(String(describing: contactRefs))" case let .contactSubError(u, contact, chatError): return withUser(u, "contact:\n\(String(describing: contact))\nerror:\n\(String(describing: chatError))") case let .contactSubSummary(u, contactSubscriptions): return withUser(u, String(describing: contactSubscriptions)) case let .groupSubscribed(u, groupInfo): return withUser(u, String(describing: groupInfo)) diff --git a/apps/ios/SimpleXChat/ChatTypes.swift b/apps/ios/SimpleXChat/ChatTypes.swift index 9f059fa33..009462d97 100644 --- a/apps/ios/SimpleXChat/ChatTypes.swift +++ b/apps/ios/SimpleXChat/ChatTypes.swift @@ -1156,7 +1156,8 @@ public struct Contact: Identifiable, Decodable, NamedChat { public struct ContactRef: Decodable, Equatable { var contactId: Int64 - public var connId: Int64 + public var agentConnId: String + var connId: Int64 var localDisplayName: ContactName public var id: ChatId { get { "@\(contactId)" } } @@ -1169,6 +1170,7 @@ public struct ContactSubStatus: Decodable { public struct Connection: Decodable { public var connId: Int64 + public var agentConnId: String var connStatus: ConnStatus public var connLevel: Int public var viaGroupLink: Bool @@ -1179,6 +1181,7 @@ public struct Connection: Decodable { static let sampleData = Connection( connId: 1, + agentConnId: "abc", connStatus: .ready, connLevel: 0, viaGroupLink: false