diff --git a/lib/shared/farcaster/farcaster-hooks.js b/lib/shared/farcaster/farcaster-hooks.js --- a/lib/shared/farcaster/farcaster-hooks.js +++ b/lib/shared/farcaster/farcaster-hooks.js @@ -634,9 +634,39 @@ state => state.currentUserInfo && state.currentUserInfo.id, ); const fetchMessage = useGetLatestMessageEdit(); + const threadInfos = useSelector(state => state.threadStore.threadInfos); + const fetchConversationWithMessages = useFetchConversationWithMessages(); + const currentlyFetchedConversations = React.useRef>(new Set()); return React.useCallback( async (farcasterMessage: FarcasterMessage) => { + if ( + !threadInfos[ + farcasterThreadIDFromConversationID(farcasterMessage.conversationId) + ] && + !currentlyFetchedConversations.current.has( + farcasterMessage.conversationId, + ) + ) { + currentlyFetchedConversations.current.add( + farcasterMessage.conversationId, + ); + const updates = new BatchedUpdates(); + await fetchConversationWithMessages( + farcasterMessage.conversationId, + Number.POSITIVE_INFINITY, + updates, + ); + dispatch({ + type: processFarcasterOpsActionType, + payload: updates.getReduxPayload(), + }); + currentlyFetchedConversations.current.delete( + farcasterMessage.conversationId, + ); + return; + } + const userFIDs = extractFarcasterIDsFromPayload( farcasterMessageValidator, farcasterMessage, @@ -668,7 +698,14 @@ payload: { rawMessageInfos, updateInfos: updates, userIDs }, }); }, - [dispatch, fetchMessage, fetchUsersByFIDs, viewerID], + [ + dispatch, + fetchConversationWithMessages, + fetchMessage, + fetchUsersByFIDs, + threadInfos, + viewerID, + ], ); }