From 96263b4d2519bddde0b86b0fe1e2635c4ccd0d86 Mon Sep 17 00:00:00 2001 From: Audric Ackermann Date: Fri, 30 Oct 2020 08:27:35 +1100 Subject: [PATCH] WIP --- .../conversation/SessionConversation.tsx | 1 + .../SessionConversationManager.tsx | 81 ------------------- ts/state/ducks/conversations.ts | 21 ++++- ts/state/ducks/search.ts | 1 - ts/state/reducer.ts | 3 +- 5 files changed, 22 insertions(+), 85 deletions(-) diff --git a/ts/components/session/conversation/SessionConversation.tsx b/ts/components/session/conversation/SessionConversation.tsx index 2787b1b1c..c44a0fbf7 100644 --- a/ts/components/session/conversation/SessionConversation.tsx +++ b/ts/components/session/conversation/SessionConversation.tsx @@ -365,6 +365,7 @@ export class SessionConversation extends React.Component { // Set first member of series here. const messageModels = messageSet.models; + console.warn('messageSet', messageSet); const messages = []; let previousSender; diff --git a/ts/components/session/conversation/SessionConversationManager.tsx b/ts/components/session/conversation/SessionConversationManager.tsx index d15ed1520..1ccab06e3 100644 --- a/ts/components/session/conversation/SessionConversationManager.tsx +++ b/ts/components/session/conversation/SessionConversationManager.tsx @@ -1,84 +1,3 @@ -import { Constants } from '../../../session'; - -export interface MessageFetchType { - messages: Array; - messageFetchTimestamp: number; - newTopMessage: any; - previousTopMessage: any; -} - -export async function getMessages( - conversationKey: string, - currentMessages: Array, - messageFetchTimestamp: number, - unreadCount: number, - onGotMessages?: any, - numMessages?: number, - fetchInterval = Constants.CONVERSATION.MESSAGE_FETCH_INTERVAL -) { - const timestamp = getTimestamp(); - - // If we have pulled messages in the last interval, don't bother rescanning - // This avoids getting messages on every re-render. - const timeBuffer = timestamp - messageFetchTimestamp; - if (timeBuffer < fetchInterval) { - // Loopback gets messages after time has elapsed, - // rather than completely cancelling the fetch. - // if (loopback) { - // setTimeout(() => { - // this.getMessages(numMessages, fetchInterval, false); - // }, timeBuffer * 1000); - // } - - return { newTopMessage: undefined, previousTopMessage: undefined }; - } - - let msgCount = - numMessages || - Constants.CONVERSATION.DEFAULT_MESSAGE_FETCH_COUNT + unreadCount; - msgCount = - msgCount > Constants.CONVERSATION.MAX_MESSAGE_FETCH_COUNT - ? Constants.CONVERSATION.MAX_MESSAGE_FETCH_COUNT - : msgCount; - - const messageSet = await window.Signal.Data.getMessagesByConversation( - conversationKey, - { limit: msgCount, MessageCollection: window.Whisper.MessageCollection } - ); - - // Set first member of series here. - const messageModels = messageSet.models; - const messages = []; - let previousSender; - for (let i = 0; i < messageModels.length; i++) { - // Handle firstMessageOfSeries for conditional avatar rendering - let firstMessageOfSeries = true; - if (i > 0 && previousSender === messageModels[i].authorPhoneNumber) { - firstMessageOfSeries = false; - } - - messages.push({ ...messageModels[i], firstMessageOfSeries }); - previousSender = messageModels[i].authorPhoneNumber; - } - - const previousTopMessage = currentMessages[0]?.id; - const newTopMessage = messages[0]?.id; - - const newMessageFetchTimestamp = getTimestamp(); - - // Callback to onGotMessages - if (onGotMessages) { - onGotMessages( - messages, - newMessageFetchTimestamp, - previousTopMessage, - newTopMessage - ); - } - - return { newTopMessage, previousTopMessage }; -} - export function getTimestamp(asInt = false) { const timestamp = Date.now() / 1000; return asInt ? Math.floor(timestamp) : timestamp; diff --git a/ts/state/ducks/conversations.ts b/ts/state/ducks/conversations.ts index 3edbef788..d96652de1 100644 --- a/ts/state/ducks/conversations.ts +++ b/ts/state/ducks/conversations.ts @@ -106,6 +106,13 @@ export type SelectedConversationChangedActionType = { messageId?: string; }; }; +export type LoadMoreMessagesActionType = { + type: 'LOAD_MORE_MESSAGES_ACTION_TYPE'; + payload: { + id: string; + currentMessageCount: number; + }; +}; export type ConversationActionType = | ConversationAddedActionType @@ -115,7 +122,8 @@ export type ConversationActionType = | MessageExpiredActionType | SelectedConversationChangedActionType | MessageExpiredActionType - | SelectedConversationChangedActionType; + | SelectedConversationChangedActionType + | LoadMoreMessagesActionType; // Action Creators @@ -127,6 +135,7 @@ export const actions = { messageExpired, openConversationInternal, openConversationExternal, + loadMoreMessages, }; function conversationAdded( @@ -168,6 +177,16 @@ function removeAllConversations(): RemoveAllConversationsActionType { }; } +function loadMoreMessages(id: string, currentMessageCount: number): LoadMoreMessagesActionType { + return { + type: 'LOAD_MORE_MESSAGES_ACTION_TYPE', + payload: { + id, + currentMessageCount, + }, + }; +} + function messageExpired( id: string, conversationId: string diff --git a/ts/state/ducks/search.ts b/ts/state/ducks/search.ts index 88aa43d35..f1a2c657c 100644 --- a/ts/state/ducks/search.ts +++ b/ts/state/ducks/search.ts @@ -16,7 +16,6 @@ import { SelectedConversationChangedActionType, } from './conversations'; import { MultiDeviceProtocol } from '../../session/protocols'; -import { PubKey } from '../../session/types'; // State diff --git a/ts/state/reducer.ts b/ts/state/reducer.ts index 20ee67dd6..16a299e7a 100644 --- a/ts/state/reducer.ts +++ b/ts/state/reducer.ts @@ -8,11 +8,10 @@ import { import { reducer as user, UserStateType } from './ducks/user'; import { reducer as theme, ThemeStateType } from './ducks/theme'; import { reducer as section, SectionStateType } from './ducks/section'; -// import { reducer as messages } from './ducks/messages'; export type StateType = { search: SearchStateType; - messages: any; + // messages: any; user: UserStateType; conversations: ConversationsStateType; theme: ThemeStateType;