From 2b368fa36afcf73b1049b219660e4670f69a9378 Mon Sep 17 00:00:00 2001 From: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> Date: Thu, 4 Sep 2025 18:51:27 +0400 Subject: [PATCH] ios --- apps/ios/Shared/Model/SimpleXAPI.swift | 19 +++++++++++++++++++ .../Views/Chat/Group/MemberSupportView.swift | 8 ++++++++ apps/ios/SimpleXChat/ChatTypes.swift | 9 +++++++++ 3 files changed, 36 insertions(+) diff --git a/apps/ios/Shared/Model/SimpleXAPI.swift b/apps/ios/Shared/Model/SimpleXAPI.swift index ae9f21e34b..913ba9ee26 100644 --- a/apps/ios/Shared/Model/SimpleXAPI.swift +++ b/apps/ios/Shared/Model/SimpleXAPI.swift @@ -1754,6 +1754,25 @@ func markChatUnread(_ chat: Chat, unreadChat: Bool = true) async { } } +func markSupportChatRead(_ groupInfo: GroupInfo, _ member: GroupMember) async { + do { + if let supportChat = member.supportChat, member.supportChatNotRead { + try await apiChatRead(type: .group, id: groupInfo.apiId, scope: .memberSupport(groupMemberId_: member.groupMemberId)) + await MainActor.run { + var updatedSupportChat = supportChat + updatedSupportChat.memberAttention = 0 + updatedSupportChat.mentions = 0 + updatedSupportChat.unread = 0 + var updatedMember = member + updatedMember.supportChat = updatedSupportChat + _ = ChatModel.shared.upsertGroupMember(groupInfo, updatedMember) + } + } + } catch { + logger.error("markChatRead apiChatRead error: \(responseError(error))") + } +} + func apiMarkChatItemsRead(_ im: ItemsModel, _ cInfo: ChatInfo, _ itemIds: [ChatItem.ID], mentionsRead: Int) async { do { let updatedChatInfo = try await apiChatItemsRead(type: cInfo.chatType, id: cInfo.apiId, scope: cInfo.groupChatScope(), itemIds: itemIds) diff --git a/apps/ios/Shared/Views/Chat/Group/MemberSupportView.swift b/apps/ios/Shared/Views/Chat/Group/MemberSupportView.swift index 7f3672ea17..7d1133000f 100644 --- a/apps/ios/Shared/Views/Chat/Group/MemberSupportView.swift +++ b/apps/ios/Shared/Views/Chat/Group/MemberSupportView.swift @@ -101,6 +101,14 @@ struct MemberSupportView: View { } .tint(theme.colors.primary) } else { + if memberWithChat.wrapped.supportChatNotRead { + Button { + Task { await markSupportChatRead(groupInfo, memberWithChat.wrapped) } + } label: { + Label("Read", systemImage: "checkmark") + } + .tint(theme.colors.primary) + } Button { showDeleteMemberSupportChatAlert(groupInfo, memberWithChat.wrapped) } label: { diff --git a/apps/ios/SimpleXChat/ChatTypes.swift b/apps/ios/SimpleXChat/ChatTypes.swift index febe12de02..8bd061f061 100644 --- a/apps/ios/SimpleXChat/ChatTypes.swift +++ b/apps/ios/SimpleXChat/ChatTypes.swift @@ -2650,6 +2650,15 @@ public struct GroupMember: Identifiable, Decodable, Hashable { memberRole >= .moderator && versionRange.maxVersion >= REPORTS_VERSION } + public var supportChatNotRead: Bool { + if let supportChat = supportChat, + supportChat.memberAttention > 0 || supportChat.mentions > 0 || supportChat.unread > 0 { + true + } else { + false + } + } + public var versionRange: VersionRange { if let activeConn { activeConn.peerChatVRange