Message List Content: Fix crash in calculateSenderGroups (#5554)

This commit is contained in:
Alexander Zinchuk 2025-02-13 14:27:38 +01:00
parent 2072059cf4
commit dffbd96001

View File

@ -21,17 +21,18 @@ export function isAlbum(messageOrAlbum: ApiMessage | IAlbum): messageOrAlbum is
export function groupMessages( export function groupMessages(
messages: ApiMessage[], firstUnreadId?: number, topMessageId?: number, isChatWithSelf?: boolean, messages: ApiMessage[], firstUnreadId?: number, topMessageId?: number, isChatWithSelf?: boolean,
) { ) {
let currentSenderGroup: SenderGroup = []; const initDateGroup: MessageDateGroup = {
let currentDateGroup = {
originalDate: messages[0].date, originalDate: messages[0].date,
datetime: getDayStartAt(messages[0].date * 1000), datetime: getDayStartAt(messages[0].date * 1000),
senderGroups: [currentSenderGroup], senderGroups: [[]],
}; };
let currentAlbum: IAlbum | undefined; let currentAlbum: IAlbum | undefined;
const dateGroups: MessageDateGroup[] = [currentDateGroup]; const dateGroups: MessageDateGroup[] = [initDateGroup];
messages.forEach((message, index) => { messages.forEach((message, index) => {
const currentDateGroup = dateGroups[dateGroups.length - 1];
const currentSenderGroup = currentDateGroup.senderGroups[currentDateGroup.senderGroups.length - 1];
if (message.isInAlbum) { if (message.isInAlbum) {
if (!currentAlbum) { if (!currentAlbum) {
currentAlbum = { currentAlbum = {
@ -76,19 +77,16 @@ export function groupMessages(
currentAlbum = undefined; currentAlbum = undefined;
} }
const lastSenderGroupItem = currentSenderGroup[currentSenderGroup.length - 1]; const lastMessageInSenderGroup = currentSenderGroup[currentSenderGroup.length - 1];
if (nextMessage) { if (nextMessage && !currentAlbum) {
const nextMessageDayStartsAt = getDayStartAt(nextMessage.date * 1000); const nextMessageDayStartsAt = getDayStartAt(nextMessage.date * 1000);
if (currentDateGroup.datetime !== nextMessageDayStartsAt) { if (currentDateGroup.datetime !== nextMessageDayStartsAt) {
currentDateGroup = { const newDateGroup: MessageDateGroup = {
originalDate: nextMessage.date, originalDate: nextMessage.date,
datetime: nextMessageDayStartsAt, datetime: nextMessageDayStartsAt,
senderGroups: [], senderGroups: [[]],
}; };
dateGroups.push(currentDateGroup); dateGroups.push(newDateGroup);
currentSenderGroup = [];
currentDateGroup.senderGroups.push(currentSenderGroup);
} else if ( } else if (
nextMessage.id === firstUnreadId nextMessage.id === firstUnreadId
|| message.senderId !== nextMessage.senderId || message.senderId !== nextMessage.senderId
@ -101,13 +99,13 @@ export function groupMessages(
|| (nextMessage.date - message.date) > GROUP_INTERVAL_SECONDS || (nextMessage.date - message.date) > GROUP_INTERVAL_SECONDS
|| (topMessageId || (topMessageId
&& (message.id === topMessageId && (message.id === topMessageId
|| (lastSenderGroupItem || (lastMessageInSenderGroup
&& 'mainMessage' in lastSenderGroupItem && lastSenderGroupItem.mainMessage?.id === topMessageId)) && 'mainMessage' in lastMessageInSenderGroup
&& lastMessageInSenderGroup.mainMessage?.id === topMessageId))
&& nextMessage.id !== topMessageId) && nextMessage.id !== topMessageId)
|| (isChatWithSelf && message.forwardInfo?.fromId !== nextMessage.forwardInfo?.fromId) || (isChatWithSelf && message.forwardInfo?.fromId !== nextMessage.forwardInfo?.fromId)
) { ) {
currentSenderGroup = []; currentDateGroup.senderGroups.push([]);
currentDateGroup.senderGroups.push(currentSenderGroup);
} }
} }
}); });