From a3eb80abcfc071ddd257d8c681fd580cb2694ad5 Mon Sep 17 00:00:00 2001 From: Audric Ackermann Date: Fri, 4 Feb 2022 13:37:50 +1100 Subject: [PATCH] fix group updates outgoing message status in left pane --- ts/components/search/SearchResults.tsx | 8 ++-- ts/models/conversation.ts | 22 ---------- ts/receiver/closedGroups.ts | 41 ++++++++++++++---- ts/session/group/closed-group.ts | 57 +++++++++++++++++--------- 4 files changed, 74 insertions(+), 54 deletions(-) diff --git a/ts/components/search/SearchResults.tsx b/ts/components/search/SearchResults.tsx index a0f609b26..d48151c28 100644 --- a/ts/components/search/SearchResults.tsx +++ b/ts/components/search/SearchResults.tsx @@ -49,7 +49,7 @@ export const SearchResults = (props: SearchResultsProps) => { {noResults ? {window.i18n('noSearchResults', [searchTerm])} : null} {haveContactsAndGroup ? ( -
+ <> {window.i18n('conversationsHeader')} {contactsAndGroups.map(contactOrGroup => ( { key={`search-result-convo-${contactOrGroup.id}`} /> ))} -
+ ) : null} {haveMessages && ( -
+ <> {`${window.i18n('messagesHeader')}: ${messages.length}`} {messages.map(message => ( ))} -
+ )}
); diff --git a/ts/models/conversation.ts b/ts/models/conversation.ts index 0ad2939d2..5dfa64440 100644 --- a/ts/models/conversation.ts +++ b/ts/models/conversation.ts @@ -1094,29 +1094,7 @@ export class ConversationModel extends Backbone.Model { const groupAdmins = this.getGroupAdmins(); return Array.isArray(groupAdmins) && groupAdmins.includes(pubKey); } - // SIGNAL PROFILES - public async getProfiles() { - // request all conversation members' keys - let ids = []; - if (this.isPrivate()) { - ids = [this.id]; - } else { - ids = this.get('members'); - } - return Promise.all(_.map(ids, this.getProfile)); - } - // This function is wrongly named by signal - // This is basically an `update` function and thus we have overwritten it with such - public async getProfile(id: string) { - const c = await getConversationController().getOrCreateAndWait( - id, - ConversationTypeEnum.PRIVATE - ); - - // We only need to update the profile as they are all stored inside the conversation - await c.updateProfileName(); - } public async setProfileName(name: string) { const profileName = this.get('profileName'); if (profileName !== name) { diff --git a/ts/receiver/closedGroups.ts b/ts/receiver/closedGroups.ts index ab5fa3591..8dc33d3b2 100644 --- a/ts/receiver/closedGroups.ts +++ b/ts/receiver/closedGroups.ts @@ -285,7 +285,7 @@ export async function handleNewClosedGroup( await ClosedGroup.addUpdateMessage( convo, { newName: name, joiningMembers: members }, - 'incoming', + envelope.senderIdentity || envelope.source, // new group message are coming as session messages envelopeTimestamp ); @@ -560,7 +560,7 @@ async function handleClosedGroupNameChanged( await ClosedGroup.addUpdateMessage( convo, groupDiff, - 'incoming', + envelope.senderIdentity, _.toNumber(envelope.timestamp) ); convo.set({ name: newName }); @@ -613,7 +613,12 @@ async function handleClosedGroupMembersAdded( const groupDiff: ClosedGroup.GroupDiff = { joiningMembers: membersNotAlreadyPresent, }; - await ClosedGroup.addUpdateMessage(convo, groupDiff, 'incoming', _.toNumber(envelope.timestamp)); + await ClosedGroup.addUpdateMessage( + convo, + groupDiff, + envelope.senderIdentity, + _.toNumber(envelope.timestamp) + ); convo.set({ members }); @@ -686,7 +691,7 @@ async function handleClosedGroupMembersRemoved( await ClosedGroup.addUpdateMessage( convo, groupDiff, - 'incoming', + envelope.senderIdentity, _.toNumber(envelope.timestamp) ); convo.updateLastMessage(); @@ -763,7 +768,12 @@ async function handleClosedGroupAdminMemberLeft( }; convo.set('members', []); - await ClosedGroup.addUpdateMessage(convo, groupDiff, 'incoming', _.toNumber(envelope.timestamp)); + await ClosedGroup.addUpdateMessage( + convo, + groupDiff, + envelope.senderIdentity, + _.toNumber(envelope.timestamp) + ); convo.updateLastMessage(); await convo.commit(); @@ -779,7 +789,12 @@ async function handleClosedGroupLeftOurself( const groupDiff: ClosedGroup.GroupDiff = { leavingMembers: [envelope.senderIdentity], }; - await ClosedGroup.addUpdateMessage(convo, groupDiff, 'incoming', _.toNumber(envelope.timestamp)); + await ClosedGroup.addUpdateMessage( + convo, + groupDiff, + envelope.senderIdentity, + _.toNumber(envelope.timestamp) + ); convo.updateLastMessage(); // remove ourself from the list of members convo.set( @@ -828,7 +843,12 @@ async function handleClosedGroupMemberLeft(envelope: EnvelopePlus, convo: Conver leavingMembers: [sender], }; - await ClosedGroup.addUpdateMessage(convo, groupDiff, 'incoming', _.toNumber(envelope.timestamp)); + await ClosedGroup.addUpdateMessage( + convo, + groupDiff, + envelope.senderIdentity, + _.toNumber(envelope.timestamp) + ); convo.updateLastMessage(); // if a user just left and we are the admin, we remove him right away for everyone by sending a MEMBERS_REMOVED message so no need to add him as a zombie if (oldMembers.includes(sender)) { @@ -918,7 +938,12 @@ export async function createClosedGroup(groupName: string, members: Array { const groupUpdate: any = {}; @@ -156,25 +170,28 @@ export async function addUpdateMessage( groupUpdate.kicked = diff.kickedMembers; } - const unread = type === 'incoming'; - - const message = await convo.addSingleOutgoingMessage({ + if (UserUtils.isUsFromCache(sender)) { + const outgoingMessage = await convo.addSingleOutgoingMessage({ + sent_at: sentAt, + group_update: groupUpdate, + unread: 1, + expireTimer: 0, + }); + return outgoingMessage; + } + const incomingMessage = await convo.addSingleIncomingMessage({ sent_at: sentAt, group_update: groupUpdate, - unread: unread ? 1 : 0, expireTimer: 0, + source: sender, }); - - if (unread) { - // update the unreadCount for this convo - const unreadCount = await convo.getUnreadCount(); - convo.set({ - unreadCount, - }); - await convo.commit(); - } - - return message; + // update the unreadCount for this convo + const unreadCount = await convo.getUnreadCount(); + convo.set({ + unreadCount, + }); + await convo.commit(); + return incomingMessage; } function buildGroupDiff(convo: ConversationModel, update: GroupInfo): GroupDiff {