diff --git a/keyserver/src/creators/message-creator.js b/keyserver/src/creators/message-creator.js --- a/keyserver/src/creators/message-creator.js +++ b/keyserver/src/creators/message-creator.js @@ -54,23 +54,23 @@ +subthreadsCanSetToUnread: Set<string>, }; +type LatestMessageInfo = { + +latestMessage: string, + +latestReadMessage: ?string, +}; + type LatestMessagesPerUser = Map< string, - $ReadOnlyMap< - string, - { - +latestMessage: string, - +latestReadMessage?: string, - }, - >, + $ReadOnlyMap<string, LatestMessageInfo>, >; -type LatestMessages = $ReadOnlyArray<{ - +userID: string, - +threadID: string, - +latestMessage: string, - +latestReadMessage: ?string, -}>; +type LatestMessages = $ReadOnlyArray< + $ReadOnly<{ + ...LatestMessageInfo, + +userID: string, + +threadID: string, + }>, +>; // Does not do permission checks! (checkThreadPermission) async function createMessages( @@ -522,19 +522,15 @@ } } -type LatestMessagePerThread = { - +latestMessage: string, - +latestReadMessage?: string, -}; function determineLatestMessagesPerThread( preUserPushInfo: UserThreadInfo, userID: string, threadsToMessageIndices: $ReadOnlyMap<string, $ReadOnlyArray<number>>, messageInfos: $ReadOnlyArray<RawMessageInfo>, -): $ReadOnlyMap<string, LatestMessagePerThread> { +): $ReadOnlyMap<string, LatestMessageInfo> { const { threadIDs, notFocusedThreadIDs, subthreadsCanSetToUnread } = preUserPushInfo; - const latestMessagesPerThread = new Map<string, LatestMessagePerThread>(); + const latestMessagesPerThread = new Map<string, LatestMessageInfo>(); for (const threadID of threadIDs) { const messageIndices = threadsToMessageIndices.get(threadID); invariant(messageIndices, `indices should exist for thread ${threadID}`); @@ -553,19 +549,18 @@ 'message ID should exist in determineLatestMessagesPerThread', ); + let latestReadMessage; if ( - notFocusedThreadIDs.has(threadID) && - messageInfo.creatorID !== userID + !notFocusedThreadIDs.has(threadID) || + messageInfo.creatorID === userID ) { - latestMessagesPerThread.set(threadID, { - latestMessage: messageID, - }); - } else { - latestMessagesPerThread.set(threadID, { - latestMessage: messageID, - latestReadMessage: messageID, - }); + latestReadMessage = messageID; } + + latestMessagesPerThread.set(threadID, { + latestMessage: messageID, + latestReadMessage, + }); } } return latestMessagesPerThread;