|
1 | 1 | //
|
2 |
| -// Copyright © 2022 Stream.io Inc. All rights reserved. |
| 2 | +// Copyright © 2023 Stream.io Inc. All rights reserved. |
3 | 3 | //
|
4 | 4 |
|
5 | 5 | import Combine
|
@@ -184,6 +184,54 @@ open class ChatChannelViewModel: ObservableObject, MessagesDataSource {
|
184 | 184 | }
|
185 | 185 | }
|
186 | 186 |
|
| 187 | + open func groupMessages() { |
| 188 | + var temp = [String: [String]]() |
| 189 | + for (index, message) in messages.enumerated() { |
| 190 | + let date = message.createdAt |
| 191 | + temp[message.id] = [] |
| 192 | + if index == 0 { |
| 193 | + temp[message.id] = [firstMessageKey] |
| 194 | + continue |
| 195 | + } else if index == messages.count - 1 { |
| 196 | + temp[message.id] = [lastMessageKey] |
| 197 | + } |
| 198 | + |
| 199 | + let previous = index - 1 |
| 200 | + let previousMessage = messages[previous] |
| 201 | + let currentAuthorId = messageCachingUtils.authorId(for: message) |
| 202 | + let previousAuthorId = messageCachingUtils.authorId(for: previousMessage) |
| 203 | + |
| 204 | + if currentAuthorId != previousAuthorId { |
| 205 | + temp[message.id]?.append(firstMessageKey) |
| 206 | + var prevInfo = temp[previousMessage.id] ?? [] |
| 207 | + prevInfo.append(lastMessageKey) |
| 208 | + temp[previousMessage.id] = prevInfo |
| 209 | + } |
| 210 | + |
| 211 | + if previousMessage.type == .error |
| 212 | + || previousMessage.type == .ephemeral |
| 213 | + || previousMessage.type == .system { |
| 214 | + temp[message.id] = [firstMessageKey] |
| 215 | + continue |
| 216 | + } |
| 217 | + |
| 218 | + let delay = previousMessage.createdAt.timeIntervalSince(date) |
| 219 | + |
| 220 | + if delay > utils.messageListConfig.maxTimeIntervalBetweenMessagesInGroup { |
| 221 | + temp[message.id]?.append(firstMessageKey) |
| 222 | + var prevInfo = temp[previousMessage.id] ?? [] |
| 223 | + prevInfo.append(lastMessageKey) |
| 224 | + temp[previousMessage.id] = prevInfo |
| 225 | + } |
| 226 | + |
| 227 | + if temp[message.id]?.isEmpty == true { |
| 228 | + temp[message.id] = nil |
| 229 | + } |
| 230 | + } |
| 231 | + |
| 232 | + messagesGroupingInfo = temp |
| 233 | + } |
| 234 | + |
187 | 235 | func dataSource(
|
188 | 236 | channelDataSource: ChannelDataSource,
|
189 | 237 | didUpdateMessages messages: LazyCachedMapCollection<ChatMessage>,
|
@@ -369,54 +417,6 @@ open class ChatChannelViewModel: ObservableObject, MessagesDataSource {
|
369 | 417 | }
|
370 | 418 | }
|
371 | 419 |
|
372 |
| - private func groupMessages() { |
373 |
| - var temp = [String: [String]]() |
374 |
| - for (index, message) in messages.enumerated() { |
375 |
| - let date = message.createdAt |
376 |
| - temp[message.id] = [] |
377 |
| - if index == 0 { |
378 |
| - temp[message.id] = [firstMessageKey] |
379 |
| - continue |
380 |
| - } else if index == messages.count - 1 { |
381 |
| - temp[message.id] = [lastMessageKey] |
382 |
| - } |
383 |
| - |
384 |
| - let previous = index - 1 |
385 |
| - let previousMessage = messages[previous] |
386 |
| - let currentAuthorId = messageCachingUtils.authorId(for: message) |
387 |
| - let previousAuthorId = messageCachingUtils.authorId(for: previousMessage) |
388 |
| - |
389 |
| - if currentAuthorId != previousAuthorId { |
390 |
| - temp[message.id]?.append(firstMessageKey) |
391 |
| - var prevInfo = temp[previousMessage.id] ?? [] |
392 |
| - prevInfo.append(lastMessageKey) |
393 |
| - temp[previousMessage.id] = prevInfo |
394 |
| - } |
395 |
| - |
396 |
| - if previousMessage.type == .error |
397 |
| - || previousMessage.type == .ephemeral |
398 |
| - || previousMessage.type == .system { |
399 |
| - temp[message.id] = [firstMessageKey] |
400 |
| - continue |
401 |
| - } |
402 |
| - |
403 |
| - let delay = previousMessage.createdAt.timeIntervalSince(date) |
404 |
| - |
405 |
| - if delay > utils.messageListConfig.maxTimeIntervalBetweenMessagesInGroup { |
406 |
| - temp[message.id]?.append(firstMessageKey) |
407 |
| - var prevInfo = temp[previousMessage.id] ?? [] |
408 |
| - prevInfo.append(lastMessageKey) |
409 |
| - temp[previousMessage.id] = prevInfo |
410 |
| - } |
411 |
| - |
412 |
| - if temp[message.id]?.isEmpty == true { |
413 |
| - temp[message.id] = nil |
414 |
| - } |
415 |
| - } |
416 |
| - |
417 |
| - messagesGroupingInfo = temp |
418 |
| - } |
419 |
| - |
420 | 420 | private func handleDateChange() {
|
421 | 421 | guard showScrollToLatestButton == true, let currentDate = currentDate else {
|
422 | 422 | currentDateString = nil
|
|
0 commit comments