make sure the left member convo exist in rendering GroupUpdate

This commit is contained in:
Audric Ackermann 2021-05-10 11:36:14 +10:00
parent 77f80c4bc1
commit 288d4a6a2e
No known key found for this signature in database
GPG key ID: 999F434D76324AD4
2 changed files with 22 additions and 3 deletions

View file

@ -128,6 +128,7 @@ export class MessageModel extends Backbone.Model<MessageAttributes> {
public getDescription() {
if (this.isGroupUpdate()) {
const groupUpdate = this.get('group_update');
const ourPrimary = window.textsecure.storage.get('primaryDevicePubKey');
if (
groupUpdate.left === 'You' ||
@ -136,7 +137,10 @@ export class MessageModel extends Backbone.Model<MessageAttributes> {
groupUpdate.left[0] === ourPrimary)
) {
return window.i18n('youLeftTheGroup');
} else if (groupUpdate.left) {
} else if (
(groupUpdate.left && Array.isArray(groupUpdate.left) && groupUpdate.left.length === 1) ||
typeof groupUpdate.left === 'string'
) {
return window.i18n(
'leftTheGroup',
ConversationController.getInstance().getContactProfileNameOrShortenedPubKey(
@ -144,7 +148,6 @@ export class MessageModel extends Backbone.Model<MessageAttributes> {
)
);
}
if (groupUpdate.kicked === 'You') {
return window.i18n('youGotKickedFromGroup');
}
@ -373,7 +376,10 @@ export class MessageModel extends Backbone.Model<MessageAttributes> {
type: 'remove',
isMe: true,
});
} else {
} else if (
typeof groupUpdate.left === 'string' ||
(Array.isArray(groupUpdate.left) && groupUpdate.left.length === 1)
) {
changes.push({
type: 'remove',
contacts: _.map(

View file

@ -449,6 +449,12 @@ async function performIfValid(
await removeFromCache(envelope);
return;
}
// make sure the conversation with this user exist (even if it's just hidden)
await ConversationController.getInstance().getOrCreateAndWait(
sender,
ConversationTypeEnum.PRIVATE
);
if (groupUpdate.type === Type.NAME_CHANGE) {
await handleClosedGroupNameChanged(envelope, groupUpdate, convo);
} else if (groupUpdate.type === Type.MEMBERS_ADDED) {
@ -531,6 +537,12 @@ async function handleClosedGroupMembersAdded(
}
const members = [...oldMembers, ...membersNotAlreadyPresent];
// make sure the conversation with those members (even if it's just hidden)
await Promise.all(
members.map(async m =>
ConversationController.getInstance().getOrCreateAndWait(m, ConversationTypeEnum.PRIVATE)
)
);
const groupDiff: ClosedGroup.GroupDiff = {
joiningMembers: membersNotAlreadyPresent,
@ -748,6 +760,7 @@ async function handleClosedGroupMemberLeft(envelope: EnvelopePlus, convo: Conver
const groupDiff: ClosedGroup.GroupDiff = {
leavingMembers: [sender],
};
await ClosedGroup.addUpdateMessage(convo, groupDiff, 'incoming', _.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