Introduce new 'Block request' button in timeline
This commit is contained in:
parent
536dd0c7b0
commit
703bb8a3a3
22 changed files with 1088 additions and 157 deletions
|
@ -421,7 +421,21 @@ export class ConversationModel extends window.Backbone
|
|||
}
|
||||
|
||||
const uuid = UUID.checkedLookup(id).toString();
|
||||
return window._.any(pendingMembersV2, item => item.uuid === uuid);
|
||||
return pendingMembersV2.some(item => item.uuid === uuid);
|
||||
}
|
||||
|
||||
isMemberBanned(id: string): boolean {
|
||||
if (!isGroupV2(this.attributes)) {
|
||||
return false;
|
||||
}
|
||||
const bannedMembersV2 = this.get('bannedMembersV2');
|
||||
|
||||
if (!bannedMembersV2 || !bannedMembersV2.length) {
|
||||
return false;
|
||||
}
|
||||
|
||||
const uuid = UUID.checkedLookup(id).toString();
|
||||
return bannedMembersV2.some(item => item === uuid);
|
||||
}
|
||||
|
||||
isMemberAwaitingApproval(id: string): boolean {
|
||||
|
@ -1865,6 +1879,7 @@ export class ConversationModel extends window.Backbone
|
|||
messageCount: this.get('messageCount') || 0,
|
||||
pendingMemberships: this.getPendingMemberships(),
|
||||
pendingApprovalMemberships: this.getPendingApprovalMemberships(),
|
||||
bannedMemberships: this.getBannedMemberships(),
|
||||
profileKey: this.get('profileKey'),
|
||||
messageRequestsEnabled,
|
||||
accessControlAddFromInviteLink:
|
||||
|
@ -2337,6 +2352,40 @@ export class ConversationModel extends window.Backbone
|
|||
}
|
||||
}
|
||||
|
||||
async addBannedMember(
|
||||
uuid: UUIDStringType
|
||||
): Promise<Proto.GroupChange.Actions | undefined> {
|
||||
if (this.isMember(uuid)) {
|
||||
log.warn('addBannedMember: Member is a part of the group!');
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.isMemberPending(uuid)) {
|
||||
log.warn('addBannedMember: Member is pending to be added to group!');
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.isMemberBanned(uuid)) {
|
||||
log.warn('addBannedMember: Member is already banned!');
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
return window.Signal.Groups.buildAddBannedMemberChange({
|
||||
group: this.attributes,
|
||||
uuid,
|
||||
});
|
||||
}
|
||||
|
||||
async blockGroupLinkRequests(uuid: UUIDStringType): Promise<void> {
|
||||
await this.modifyGroupV2({
|
||||
name: 'addBannedMember',
|
||||
createGroupChange: async () => this.addBannedMember(uuid),
|
||||
});
|
||||
}
|
||||
|
||||
async toggleAdmin(conversationId: string): Promise<void> {
|
||||
if (!isGroupV2(this.attributes)) {
|
||||
return;
|
||||
|
@ -3495,6 +3544,14 @@ export class ConversationModel extends window.Backbone
|
|||
}));
|
||||
}
|
||||
|
||||
private getBannedMemberships(): Array<UUIDStringType> {
|
||||
if (!isGroupV2(this.attributes)) {
|
||||
return [];
|
||||
}
|
||||
|
||||
return this.get('bannedMembersV2') || [];
|
||||
}
|
||||
|
||||
getMembers(
|
||||
options: { includePendingMembers?: boolean } = {}
|
||||
): Array<ConversationModel> {
|
||||
|
@ -4069,17 +4126,17 @@ export class ConversationModel extends window.Backbone
|
|||
const conversationId = this.id;
|
||||
|
||||
const ourUuid = window.textsecure.storage.user.getCheckedUuid().toString();
|
||||
const lastMessages = await window.Signal.Data.getLastConversationMessages({
|
||||
const stats = await window.Signal.Data.getConversationMessageStats({
|
||||
conversationId,
|
||||
ourUuid,
|
||||
});
|
||||
|
||||
// This runs as a job to avoid race conditions
|
||||
this.queueJob('maybeSetPendingUniversalTimer', async () =>
|
||||
this.maybeSetPendingUniversalTimer(lastMessages.hasUserInitiatedMessages)
|
||||
this.maybeSetPendingUniversalTimer(stats.hasUserInitiatedMessages)
|
||||
);
|
||||
|
||||
const { preview, activity } = lastMessages;
|
||||
const { preview, activity } = stats;
|
||||
let previewMessage: MessageModel | undefined;
|
||||
let activityMessage: MessageModel | undefined;
|
||||
|
||||
|
|
|
@ -51,6 +51,7 @@ import { isImage, isVideo } from '../types/Attachment';
|
|||
import * as Attachment from '../types/Attachment';
|
||||
import { stringToMIMEType } from '../types/MIME';
|
||||
import * as MIME from '../types/MIME';
|
||||
import * as GroupChange from '../groupChange';
|
||||
import { ReadStatus } from '../messages/MessageReadStatus';
|
||||
import type { SendStateByConversationId } from '../messages/MessageSendState';
|
||||
import {
|
||||
|
@ -486,7 +487,7 @@ export class MessageModel extends window.Backbone.Model<MessageAttributesType> {
|
|||
'getNotificationData: isGroupV2Change true, but no groupV2Change!'
|
||||
);
|
||||
|
||||
const lines = window.Signal.GroupChange.renderChange<string>(change, {
|
||||
const changes = GroupChange.renderChange<string>(change, {
|
||||
i18n: window.i18n,
|
||||
ourUuid: window.textsecure.storage.user.getCheckedUuid().toString(),
|
||||
renderContact: (conversationId: string) => {
|
||||
|
@ -503,7 +504,7 @@ export class MessageModel extends window.Backbone.Model<MessageAttributesType> {
|
|||
) => window.i18n(key, components),
|
||||
});
|
||||
|
||||
return { text: lines.join(' ') };
|
||||
return { text: changes.map(({ text }) => text).join(' ') };
|
||||
}
|
||||
|
||||
const attachments = this.get('attachments') || [];
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue