Skip to content

Commit f9729e6

Browse files
authored
Merge pull request #4226 from anyproto/ios-5299-the-deleted-message-is-displayed-in-preview-in-vault
IOS-5299 Support delete event for chat message preview
2 parents 5332251 + 3e5364e commit f9729e6

File tree

3 files changed

+34
-11
lines changed

3 files changed

+34
-11
lines changed

Anytype/Sources/PresentationLayer/Modules/Chat/Services/ChatMessagesPreviewsStorage.swift

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ actor ChatMessagesPreviewsStorage: ChatMessagesPreviewsStorageProtocol {
8484

8585
private func handle(events: EventsBunch) async {
8686
var hasChanges = false
87-
87+
8888
for event in events.middlewareEvents {
8989
switch event.value {
9090
case let .chatStateUpdate(state):
@@ -95,11 +95,15 @@ actor ChatMessagesPreviewsStorage: ChatMessagesPreviewsStorageProtocol {
9595
if await handleChatAddEvent(spaceId: event.spaceID, contextId: events.contextId, data: data) {
9696
hasChanges = true
9797
}
98+
case let .chatDelete(data):
99+
if handleChatDeleteEvent(spaceId: event.spaceID, contextId: events.contextId, data: data) {
100+
hasChanges = true
101+
}
98102
default:
99103
break
100104
}
101105
}
102-
106+
103107
if hasChanges {
104108
previewsStream.send(Array(previewsBySpace.values))
105109
}
@@ -125,11 +129,26 @@ actor ChatMessagesPreviewsStorage: ChatMessagesPreviewsStorageProtocol {
125129

126130
private func handleChatAddEvent(spaceId: String, contextId: String, data: ChatAddData) async -> Bool {
127131
guard data.subIds.contains(subscriptionId) else { return false }
128-
132+
129133
await handleChatLastMessage(spaceId: spaceId, chatId: contextId, message: data.message, dependencies: data.dependencies.compactMap(\.asDetails))
130134
return true
131135
}
132-
136+
137+
private func handleChatDeleteEvent(spaceId: String, contextId: String, data: ChatDeleteData) -> Bool {
138+
guard data.subIds.contains(subscriptionId) else { return false }
139+
140+
let key = ChatMessagePreviewKey(spaceId: spaceId, chatId: contextId)
141+
guard var preview = previewsBySpace[key] else { return false }
142+
143+
guard let lastMessage = preview.lastMessage, lastMessage.id == data.id else {
144+
return false
145+
}
146+
147+
preview.lastMessage = nil
148+
previewsBySpace[key] = preview
149+
return true
150+
}
151+
133152
private func handleChatLastMessage(spaceId: String, chatId: String, message: ChatMessage, dependencies: [ObjectDetails]) async {
134153
guard message.hasMessage else { return }
135154

@@ -142,11 +161,12 @@ actor ChatMessagesPreviewsStorage: ChatMessagesPreviewsStorageProtocol {
142161

143162
let attachmentsIds = message.attachments.map(\.target)
144163
let attachments = attachmentsIds.compactMap { id in dependencies.first { $0.id == id } }
145-
164+
146165
// TODO: change to full equality after MW fix
147166
let creator = dependencies.first { $0.id.hasSuffix(message.creator) }.flatMap { try? Participant(details: $0) }
148-
167+
149168
let message = LastMessagePreview(
169+
id: message.id,
150170
creator: creator,
151171
text: messageTextBuilder.makeMessaeWithoutStyle(content: message.message),
152172
createdAt: message.createdAtDate,

Anytype/Sources/PresentationLayer/Modules/Chat/Services/Models/ChatMessagePreview.swift

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,20 @@ import Services
22
import Foundation
33

44
struct LastMessagePreview: Hashable {
5+
let id: String
56
let creator: Participant?
67
let text: String
7-
8+
89
let createdAt: Date
910
let modifiedAt: Date?
10-
11+
1112
let attachments: [ObjectDetails]
1213
let localizedAttachmentsText: String
13-
14+
1415
let orderId: String
15-
16-
init(creator: Participant?, text: String, createdAt: Date, modifiedAt: Date?, attachments: [ObjectDetails], orderId: String) {
16+
17+
init(id: String, creator: Participant?, text: String, createdAt: Date, modifiedAt: Date?, attachments: [ObjectDetails], orderId: String) {
18+
self.id = id
1719
self.creator = creator
1820
self.text = text
1921
self.createdAt = createdAt

Modules/Services/Sources/Models/ChatModels.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ public typealias ChatMessagesReadType = Anytype_Rpc.Chat.ReadMessages.ReadType
1010
public typealias ChatUnreadReadType = Anytype_Rpc.Chat.Unread.ReadType
1111
public typealias ChatUpdateState = Anytype_Event.Chat.UpdateState
1212
public typealias ChatAddData = Anytype_Event.Chat.Add
13+
public typealias ChatDeleteData = Anytype_Event.Chat.Delete
1314

1415
public extension ChatMessage {
1516
var createdAtDate: Date {

0 commit comments

Comments
 (0)