mirror of
https://github.com/simplex-chat/simplex-chat.git
synced 2026-10-06 12:08:44 +00:00
core, tests, ui: keep member order with role index, skip down-migration schema comparison, reload support list on return with older remote hosts
This commit is contained in:
@@ -424,7 +424,6 @@ final class ChatModel: ObservableObject {
|
||||
@Published var groupMembers: [GMember] = []
|
||||
@Published var groupMembersIndexes: Dictionary<Int64, Int> = [:] // groupMemberId to index in groupMembers list
|
||||
@Published var membersLoaded = false
|
||||
var membersLoadedGroupId: Int64?
|
||||
// Runtime-only relay hostnames for pre-join channel display, not persisted — lost on app restart.
|
||||
// APIConnectPreparedGroup re-fetches fresh relays at connect time, so stale data doesn't affect join.
|
||||
@Published var channelRelayHostnames: [Int64: [String]] = [:]
|
||||
@@ -578,12 +577,9 @@ final class ChatModel: ObservableObject {
|
||||
let groupMembers = await apiListMembers(groupInfo.groupId)
|
||||
await MainActor.run {
|
||||
if chatId == groupInfo.id {
|
||||
if let groupMembers {
|
||||
self.groupMembers = groupMembers.map { GMember.init($0) }
|
||||
self.populateGroupMembersIndexes()
|
||||
self.membersLoaded = true
|
||||
self.membersLoadedGroupId = groupInfo.groupId
|
||||
}
|
||||
self.groupMembers = groupMembers.map { GMember.init($0) }
|
||||
self.populateGroupMembersIndexes()
|
||||
self.membersLoaded = true
|
||||
updateView()
|
||||
}
|
||||
}
|
||||
@@ -1331,15 +1327,11 @@ final class ChatModel: ObservableObject {
|
||||
}
|
||||
|
||||
func upsertSupportChatMember(_ cInfo: ChatInfo) {
|
||||
if case let .group(groupInfo, .memberSupport(member?)?) = cInfo, chatId == groupInfo.id {
|
||||
var m = member
|
||||
var supportChatAdded = false
|
||||
if let current = getGroupMember(member.groupMemberId)?.wrapped {
|
||||
supportChatAdded = current.supportChat == nil && member.supportChat != nil
|
||||
m = current
|
||||
m.supportChat = member.supportChat
|
||||
m.memberProfile = member.memberProfile
|
||||
}
|
||||
if case let .group(groupInfo, .memberSupport(member?)?) = cInfo {
|
||||
var m = getGroupMember(member.groupMemberId)?.wrapped ?? member
|
||||
let supportChatAdded = m.supportChat == nil && member.supportChat != nil
|
||||
m.supportChat = member.supportChat
|
||||
m.memberProfile = member.memberProfile
|
||||
_ = upsertGroupMember(groupInfo, m)
|
||||
if supportChatAdded {
|
||||
objectWillChange.send()
|
||||
|
||||
@@ -592,10 +592,8 @@ private func processSendMessageCmd(toChatType: ChatType, cmd: ChatCommand) async
|
||||
} else {
|
||||
r = await chatApiSendCmd(cmd, bgDelay: msgDelay)
|
||||
if case let .result(.newChatItems(_, aChatItems)) = r {
|
||||
await MainActor.run {
|
||||
for aChatItem in aChatItems {
|
||||
chatModel.upsertSupportChatMember(aChatItem.chatInfo)
|
||||
}
|
||||
if let last = aChatItems.last {
|
||||
await MainActor.run { chatModel.upsertSupportChatMember(last.chatInfo) }
|
||||
}
|
||||
return aChatItems.map { $0.chatItem }
|
||||
}
|
||||
@@ -2062,10 +2060,10 @@ func apiLeaveGroup(_ groupId: Int64) async throws -> GroupInfo {
|
||||
}
|
||||
|
||||
// use ChatModel's loadGroupMembers from views
|
||||
func apiListMembers(_ groupId: Int64) async -> [GroupMember]? {
|
||||
func apiListMembers(_ groupId: Int64) async -> [GroupMember] {
|
||||
let r: APIResult<ChatResponse2> = await chatApiSendCmd(.apiListMembers(groupId: groupId))
|
||||
if case let .result(.groupMembers(_, group)) = r { return group.members }
|
||||
return nil
|
||||
return []
|
||||
}
|
||||
|
||||
func filterMembersToAdd(_ ms: [GMember]) -> [Contact] {
|
||||
|
||||
Reference in New Issue
Block a user