Merge pull request #1613 from Bilb/fix-crash-left-member-convo-does-not-exist

make sure the left member convo exist in rendering GroupUpdate
pull/1616/head
Audric Ackermann 4 years ago committed by GitHub
commit 03aa52f8ce
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

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

@ -449,6 +449,12 @@ async function performIfValid(
await removeFromCache(envelope); await removeFromCache(envelope);
return; 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) { if (groupUpdate.type === Type.NAME_CHANGE) {
await handleClosedGroupNameChanged(envelope, groupUpdate, convo); await handleClosedGroupNameChanged(envelope, groupUpdate, convo);
} else if (groupUpdate.type === Type.MEMBERS_ADDED) { } else if (groupUpdate.type === Type.MEMBERS_ADDED) {
@ -531,6 +537,12 @@ async function handleClosedGroupMembersAdded(
} }
const members = [...oldMembers, ...membersNotAlreadyPresent]; 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 = { const groupDiff: ClosedGroup.GroupDiff = {
joiningMembers: membersNotAlreadyPresent, joiningMembers: membersNotAlreadyPresent,
@ -748,6 +760,7 @@ async function handleClosedGroupMemberLeft(envelope: EnvelopePlus, convo: Conver
const groupDiff: ClosedGroup.GroupDiff = { const groupDiff: ClosedGroup.GroupDiff = {
leavingMembers: [sender], leavingMembers: [sender],
}; };
await ClosedGroup.addUpdateMessage(convo, groupDiff, 'incoming', _.toNumber(envelope.timestamp)); await ClosedGroup.addUpdateMessage(convo, groupDiff, 'incoming', _.toNumber(envelope.timestamp));
convo.updateLastMessage(); 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 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

Loading…
Cancel
Save