@@ -1108,80 +1108,68 @@ extension ConversationDataSource {
11081108 stackedPhotoMessages. append ( item)
11091109 return item
11101110 }
1111+ func canStack( _ message: MessageItem ) -> Bool {
1112+ message. category. hasSuffix ( " _IMAGE " ) && message. quoteMessageId. isNilOrEmpty && message. mediaStatus == MediaStatus . DONE. rawValue
1113+ }
11111114 var result = [ MessageItem] ( )
11121115 var messagesToStack = [ MessageItem] ( )
1113- var left = 0
1114- var right = 1
1115- var unableToStack : Bool {
1116- messagesToStack. count < numberOfConsecutiveImagesToStack ||
1117- messagesToStack. contains ( where: { $0. mediaStatus != MediaStatus . DONE. rawValue } )
1118- }
1119- while right < messages. count {
1120- if !messages[ left] . category. hasSuffix ( " _IMAGE " ) {
1121- result. append ( messages [ left] )
1122- left += 1
1123- right += 1
1124- } else if !messages[ left] . quoteMessageId. isNilOrEmpty {
1125- result. append ( messages [ left] )
1126- left += 1
1127- right += 1
1128- } else if !messages[ right] . category. hasSuffix ( " _IMAGE " ) {
1129- if messagesToStack. isEmpty {
1130- result. append ( contentsOf: messages [ left... right] )
1131- } else if unableToStack {
1132- result. append ( contentsOf: messagesToStack)
1133- result. append ( messages [ right] )
1134- messagesToStack. removeAll ( )
1135- } else {
1136- result. append ( createStackedPhotoMessage ( messagesToStack) )
1137- result. append ( messages [ right] )
1138- messagesToStack. removeAll ( )
1116+ var startIndex = 0
1117+ var endIndex = 1
1118+ while endIndex < messages. count {
1119+ let startMessage = messages [ startIndex]
1120+ let endMessage = messages [ endIndex]
1121+ if canStack ( startMessage) , canStack ( endMessage) , startMessage. userId == endMessage. userId {
1122+ if startIndex == 0 , messagesToStack. isEmpty {
1123+ messagesToStack. append ( startMessage)
11391124 }
1140- left = right + 1
1141- right = left + 1
1142- } else if messages [ left] . userId != messages [ right] . userId {
1125+ messagesToStack. append ( endMessage)
1126+ endIndex += 1
1127+ if endIndex >= messages. count {
1128+ if messagesToStack. count < numberOfConsecutiveImagesToStack {
1129+ result. append ( contentsOf: messagesToStack)
1130+ } else {
1131+ result. append ( createStackedPhotoMessage ( messagesToStack) )
1132+ }
1133+ }
1134+ } else {
11431135 if messagesToStack. isEmpty {
1144- result. append ( messages [ left ] )
1145- } else if unableToStack {
1136+ result. append ( contentsOf : messages [ startIndex ..< endIndex ] )
1137+ } else if messagesToStack . count < numberOfConsecutiveImagesToStack {
11461138 result. append ( contentsOf: messagesToStack)
11471139 messagesToStack. removeAll ( )
11481140 } else {
11491141 result. append ( createStackedPhotoMessage ( messagesToStack) )
11501142 messagesToStack. removeAll ( )
11511143 }
1152- left = right
1153- right += 1
1154- } else if !messages[ right] . quoteMessageId. isNilOrEmpty {
1155- if messagesToStack. isEmpty {
1156- result. append ( messages [ left] )
1157- } else if unableToStack {
1158- result. append ( contentsOf: messagesToStack)
1159- messagesToStack. removeAll ( )
1144+ if canStack ( endMessage) {
1145+ messagesToStack. append ( endMessage)
1146+ startIndex = endIndex
1147+ endIndex += 1
1148+ if endIndex >= messages. count {
1149+ if messagesToStack. count < numberOfConsecutiveImagesToStack {
1150+ result. append ( contentsOf: messagesToStack)
1151+ } else {
1152+ result. append ( createStackedPhotoMessage ( messagesToStack) )
1153+ }
1154+ }
11601155 } else {
1161- result. append ( createStackedPhotoMessage ( messagesToStack) )
1162- messagesToStack. removeAll ( )
1156+ result. append ( endMessage)
1157+ startIndex = endIndex + 1
1158+ endIndex = startIndex + 1
1159+ if startIndex < messages. count {
1160+ let message = messages [ startIndex]
1161+ if startIndex == messages. count - 1 {
1162+ result. append ( message)
1163+ } else if canStack ( message) {
1164+ messagesToStack. append ( message)
1165+ }
1166+ }
11631167 }
1164- result. append ( messages [ right] )
1165- left = right + 1
1166- right += 1
1167- } else {
1168- messagesToStack = Array ( messages [ left... right] )
1169- right += 1
1170- }
1171- }
1172- if left == messages. count - 1 {
1173- result. append ( messages [ left] )
1174- }
1175- if !messagesToStack. isEmpty {
1176- if unableToStack {
1177- result. append ( contentsOf: messagesToStack)
1178- } else {
1179- result. append ( createStackedPhotoMessage ( messagesToStack) )
11801168 }
1181- messagesToStack. removeAll ( )
11821169 }
11831170 return result
11841171 }
1172+
11851173}
11861174
11871175// MARK: - Embedded class
0 commit comments