ios: use agent connection id as key for network statuses map (#1808)

This commit is contained in:
JRoberts
2023-01-20 17:35:39 +04:00
committed by GitHub
parent cb5f26d354
commit 980c7a9ddd
4 changed files with 19 additions and 16 deletions

View File

@@ -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<Int64, NetworkStatus> = [:]
// map of connections network statuses, key is agent connection id
@Published var networkStatuses: Dictionary<String, NetworkStatus> = [:]
// 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
}
}

View File

@@ -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 {

View File

@@ -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))

View File

@@ -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