Send to just-removed folks in groupv2 removal operations
This commit is contained in:
parent
7c4e4c97e7
commit
2d8f237b76
2 changed files with 50 additions and 17 deletions
ts
|
@ -1163,11 +1163,13 @@ export async function uploadGroupChange({
|
||||||
export async function modifyGroupV2({
|
export async function modifyGroupV2({
|
||||||
conversation,
|
conversation,
|
||||||
createGroupChange,
|
createGroupChange,
|
||||||
|
extraConversationsForSend,
|
||||||
inviteLinkPassword,
|
inviteLinkPassword,
|
||||||
name,
|
name,
|
||||||
}: {
|
}: {
|
||||||
conversation: ConversationModel;
|
conversation: ConversationModel;
|
||||||
createGroupChange: () => Promise<GroupChangeClass.Actions | undefined>;
|
createGroupChange: () => Promise<GroupChangeClass.Actions | undefined>;
|
||||||
|
extraConversationsForSend?: Array<string>;
|
||||||
inviteLinkPassword?: string;
|
inviteLinkPassword?: string;
|
||||||
name: string;
|
name: string;
|
||||||
}): Promise<void> {
|
}): Promise<void> {
|
||||||
|
@ -1248,6 +1250,7 @@ export async function modifyGroupV2({
|
||||||
groupV2: conversation.getGroupV2Info({
|
groupV2: conversation.getGroupV2Info({
|
||||||
groupChange: groupChangeBuffer,
|
groupChange: groupChangeBuffer,
|
||||||
includePendingMembers: true,
|
includePendingMembers: true,
|
||||||
|
extraConversationsForSend,
|
||||||
}),
|
}),
|
||||||
timestamp,
|
timestamp,
|
||||||
profileKey,
|
profileKey,
|
||||||
|
|
|
@ -42,6 +42,7 @@ import { GroupChangeClass } from '../textsecure.d';
|
||||||
import { BodyRangesType } from '../types/Util';
|
import { BodyRangesType } from '../types/Util';
|
||||||
import { getTextWithMentions } from '../util';
|
import { getTextWithMentions } from '../util';
|
||||||
import { migrateColor } from '../util/migrateColor';
|
import { migrateColor } from '../util/migrateColor';
|
||||||
|
import { isNotNil } from '../util/isNotNil';
|
||||||
|
|
||||||
/* eslint-disable more/no-then */
|
/* eslint-disable more/no-then */
|
||||||
window.Whisper = window.Whisper || {};
|
window.Whisper = window.Whisper || {};
|
||||||
|
@ -722,17 +723,20 @@ export class ConversationModel extends window.Backbone.Model<
|
||||||
}
|
}
|
||||||
|
|
||||||
async modifyGroupV2({
|
async modifyGroupV2({
|
||||||
name,
|
|
||||||
inviteLinkPassword,
|
|
||||||
createGroupChange,
|
createGroupChange,
|
||||||
|
extraConversationsForSend,
|
||||||
|
inviteLinkPassword,
|
||||||
|
name,
|
||||||
}: {
|
}: {
|
||||||
name: string;
|
|
||||||
inviteLinkPassword?: string;
|
|
||||||
createGroupChange: () => Promise<GroupChangeClass.Actions | undefined>;
|
createGroupChange: () => Promise<GroupChangeClass.Actions | undefined>;
|
||||||
|
extraConversationsForSend?: Array<string>;
|
||||||
|
inviteLinkPassword?: string;
|
||||||
|
name: string;
|
||||||
}): Promise<void> {
|
}): Promise<void> {
|
||||||
await window.Signal.Groups.modifyGroupV2({
|
await window.Signal.Groups.modifyGroupV2({
|
||||||
createGroupChange,
|
|
||||||
conversation: this,
|
conversation: this,
|
||||||
|
createGroupChange,
|
||||||
|
extraConversationsForSend,
|
||||||
inviteLinkPassword,
|
inviteLinkPassword,
|
||||||
name,
|
name,
|
||||||
});
|
});
|
||||||
|
@ -1011,11 +1015,15 @@ export class ConversationModel extends window.Backbone.Model<
|
||||||
window.Signal.Data.updateConversation(this.attributes);
|
window.Signal.Data.updateConversation(this.attributes);
|
||||||
}
|
}
|
||||||
|
|
||||||
getGroupV2Info(
|
getGroupV2Info({
|
||||||
options: { groupChange?: ArrayBuffer; includePendingMembers?: boolean } = {}
|
groupChange,
|
||||||
): GroupV2InfoType | undefined {
|
includePendingMembers,
|
||||||
const { groupChange, includePendingMembers } = options;
|
extraConversationsForSend,
|
||||||
|
}: {
|
||||||
|
groupChange?: ArrayBuffer;
|
||||||
|
includePendingMembers?: boolean;
|
||||||
|
extraConversationsForSend?: Array<string>;
|
||||||
|
} = {}): GroupV2InfoType | undefined {
|
||||||
if (this.isPrivate() || !this.isGroupV2()) {
|
if (this.isPrivate() || !this.isGroupV2()) {
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
@ -1028,6 +1036,7 @@ export class ConversationModel extends window.Backbone.Model<
|
||||||
revision: this.get('revision')!,
|
revision: this.get('revision')!,
|
||||||
members: this.getRecipients({
|
members: this.getRecipients({
|
||||||
includePendingMembers,
|
includePendingMembers,
|
||||||
|
extraConversationsForSend,
|
||||||
}),
|
}),
|
||||||
groupChange,
|
groupChange,
|
||||||
};
|
};
|
||||||
|
@ -1833,17 +1842,20 @@ export class ConversationModel extends window.Backbone.Model<
|
||||||
await this.modifyGroupV2({
|
await this.modifyGroupV2({
|
||||||
name: 'removePendingMember',
|
name: 'removePendingMember',
|
||||||
createGroupChange: () => this.removePendingMember(conversationIds),
|
createGroupChange: () => this.removePendingMember(conversationIds),
|
||||||
|
extraConversationsForSend: conversationIds,
|
||||||
});
|
});
|
||||||
} else if (this.isMemberRequestingToJoin(conversationId)) {
|
} else if (this.isMemberRequestingToJoin(conversationId)) {
|
||||||
await this.modifyGroupV2({
|
await this.modifyGroupV2({
|
||||||
name: 'denyPendingApprovalRequest',
|
name: 'denyPendingApprovalRequest',
|
||||||
createGroupChange: () =>
|
createGroupChange: () =>
|
||||||
this.denyPendingApprovalRequest(conversationId),
|
this.denyPendingApprovalRequest(conversationId),
|
||||||
|
extraConversationsForSend: [conversationId],
|
||||||
});
|
});
|
||||||
} else if (this.isMemberPending(conversationId)) {
|
} else if (this.isMemberPending(conversationId)) {
|
||||||
await this.modifyGroupV2({
|
await this.modifyGroupV2({
|
||||||
name: 'removePendingMember',
|
name: 'removePendingMember',
|
||||||
createGroupChange: () => this.removePendingMember([conversationId]),
|
createGroupChange: () => this.removePendingMember([conversationId]),
|
||||||
|
extraConversationsForSend: [conversationId],
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1854,16 +1866,19 @@ export class ConversationModel extends window.Backbone.Model<
|
||||||
name: 'denyPendingApprovalRequest',
|
name: 'denyPendingApprovalRequest',
|
||||||
createGroupChange: () =>
|
createGroupChange: () =>
|
||||||
this.denyPendingApprovalRequest(conversationId),
|
this.denyPendingApprovalRequest(conversationId),
|
||||||
|
extraConversationsForSend: [conversationId],
|
||||||
});
|
});
|
||||||
} else if (this.isGroupV2() && this.isMemberPending(conversationId)) {
|
} else if (this.isGroupV2() && this.isMemberPending(conversationId)) {
|
||||||
await this.modifyGroupV2({
|
await this.modifyGroupV2({
|
||||||
name: 'removePendingMember',
|
name: 'removePendingMember',
|
||||||
createGroupChange: () => this.removePendingMember([conversationId]),
|
createGroupChange: () => this.removePendingMember([conversationId]),
|
||||||
|
extraConversationsForSend: [conversationId],
|
||||||
});
|
});
|
||||||
} else if (this.isGroupV2() && this.isMember(conversationId)) {
|
} else if (this.isGroupV2() && this.isMember(conversationId)) {
|
||||||
await this.modifyGroupV2({
|
await this.modifyGroupV2({
|
||||||
name: 'removeFromGroup',
|
name: 'removeFromGroup',
|
||||||
createGroupChange: () => this.removeMember(conversationId),
|
createGroupChange: () => this.removeMember(conversationId),
|
||||||
|
extraConversationsForSend: [conversationId],
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
window.log.error(
|
window.log.error(
|
||||||
|
@ -2835,16 +2850,31 @@ export class ConversationModel extends window.Backbone.Model<
|
||||||
return members.map(member => member.id);
|
return members.map(member => member.id);
|
||||||
}
|
}
|
||||||
|
|
||||||
getRecipients(
|
getRecipients({
|
||||||
options: { includePendingMembers?: boolean } = {}
|
includePendingMembers,
|
||||||
): Array<string> {
|
extraConversationsForSend,
|
||||||
const { includePendingMembers } = options;
|
}: {
|
||||||
|
includePendingMembers?: boolean;
|
||||||
|
extraConversationsForSend?: Array<string>;
|
||||||
|
} = {}): Array<string> {
|
||||||
const members = this.getMembers({ includePendingMembers });
|
const members = this.getMembers({ includePendingMembers });
|
||||||
|
|
||||||
// Eliminate our
|
// There are cases where we need to send to someone we just removed from the group, to
|
||||||
|
// let them know that we removed them. In that case, we need to send to more than
|
||||||
|
// are currently in the group.
|
||||||
|
const extraConversations = extraConversationsForSend
|
||||||
|
? extraConversationsForSend
|
||||||
|
.map(id => window.ConversationController.get(id))
|
||||||
|
.filter(isNotNil)
|
||||||
|
: [];
|
||||||
|
|
||||||
|
const unique = extraConversations.length
|
||||||
|
? window._.unique([...members, ...extraConversations])
|
||||||
|
: members;
|
||||||
|
|
||||||
|
// Eliminate ourself
|
||||||
return window._.compact(
|
return window._.compact(
|
||||||
members.map(member => (member.isMe() ? null : member.getSendTarget()))
|
unique.map(member => (member.isMe() ? null : member.getSendTarget()))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue