add groupUpdate message and groupInfo to new pipeline

pull/1183/head
Audric Ackermann 5 years ago
parent b0ed0207e0
commit bd940a9f79
No known key found for this signature in database
GPG Key ID: 999F434D76324AD4

@ -1908,32 +1908,53 @@
return;
}
message.send(
this.wrapSend(
textsecure.messaging.sendGroupUpdate(
this.id,
this.get('name'),
this.get('avatar'),
this.get('members'),
this.get('groupAdmins'),
groupUpdate.recipients,
{}
)
)
const updateParams = {
timestamp: Date.now(),
groupId: this.id,
name: this.get('name'),
avatar: this.get('avatar'),
members: this.get('members'),
admins: this.get('groupAdmins'),
};
const groupUpdateMessage = new libsession.Messages.Outgoing.ClosedGroupUpdateMessage(
updateParams
);
groupUpdate.recipients.forEach(r => {
const recipientPubKey = new libsession.Types.PubKey(r);
if (!recipientPubKey) {
window.console.warn('updateGroup invalid pubkey:', r);
return;
}
libsession
.getMessageQueue()
.sendUsingMultiDevice(recipientPubKey, groupUpdateMessage)
.ignore();
});
},
sendGroupInfo(recipients) {
sendGroupInfo(recipient) {
if (this.isClosedGroup()) {
textsecure.messaging.sendGroupUpdate(
this.id,
this.get('name'),
this.get('avatar'),
this.get('members'),
this.get('groupAdmins'),
recipients,
{}
const updateParams = {
timestamp: Date.now(),
groupId: this.id,
name: this.get('name'),
avatar: this.get('avatar'),
members: this.get('members'),
admins: this.get('groupAdmins'),
};
const groupUpdateMessage = new libsession.Messages.Outgoing.ClosedGroupUpdateMessage(
updateParams
);
const recipientPubKey = new libsession.Types.PubKey(recipient);
if (!recipientPubKey) {
window.console.warn('sendGroupInfo invalid pubkey:', recipient);
return;
}
libsession
.getMessageQueue()
.send(recipientPubKey, groupUpdateMessage)
.ignore();
}
},

@ -1078,7 +1078,6 @@ textsecure.MessageSender = function MessageSenderWrapper(username, password) {
this.sendMessageToNumber = sender.sendMessageToNumber.bind(sender);
this.sendMessage = sender.sendMessage.bind(sender);
this.sendMessageToGroup = sender.sendMessageToGroup.bind(sender);
this.sendGroupUpdate = sender.sendGroupUpdate.bind(sender);
this.updateMediumGroup = sender.updateMediumGroup.bind(sender);
this.addNumberToGroup = sender.addNumberToGroup.bind(sender);
this.setGroupName = sender.setGroupName.bind(sender);

@ -75,7 +75,7 @@ export async function preprocessGroupMessage(
window.libloki.api.debug.logGroupRequestInfo(
`Received GROUP_TYPES.REQUEST_INFO from source: ${source}, primarySource: ${primarySource}, sending back group info.`
);
conversation.sendGroupInfo([source]);
conversation.sendGroupInfo(source);
return true;
}

@ -1,6 +1,5 @@
import { DataMessage } from '../DataMessage';
import { SignalService } from '../../../../../../protobuf';
import { TextEncoder } from 'util';
import { MessageParams } from '../../../Message';
import { StringUtils } from '../../../../../utils';
@ -19,6 +18,10 @@ export abstract class ClosedGroupMessage extends DataMessage {
this.groupId = params.groupId;
}
public ttl(): number {
return this.getDefaultTTL();
}
protected abstract groupContextType(): SignalService.GroupContext.Type;
protected groupContext(): SignalService.GroupContext {

@ -0,0 +1,76 @@
import { DataMessage } from '../DataMessage';
import { SignalService } from '../../../../../../protobuf';
import { StringUtils } from '../../../../../utils';
import {
ClosedGroupMessage,
ClosedGroupMessageParams,
} from './ClosedGroupMessage';
import { AttachmentPointer } from '../ChatMessage';
import { PubKey } from '../../../../../types';
export interface ClosedGroupUpdateMessageParams
extends ClosedGroupMessageParams {
name: string;
members?: Array<string>;
admins?: Array<string>;
avatar?: AttachmentPointer;
}
export abstract class ClosedGroupUpdateMessage extends ClosedGroupMessage {
private readonly name: string;
private readonly members?: Array<string>;
private readonly admins?: Array<string>;
private readonly avatar?: AttachmentPointer;
constructor(params: ClosedGroupUpdateMessageParams) {
super({
timestamp: params.timestamp,
identifier: params.identifier,
groupId: params.groupId,
});
if (typeof params.name !== 'string') {
throw new Error('name must be a string');
}
if (
params.members &&
params.members.length > 0 &&
typeof params.members[0] !== 'string'
) {
throw new Error('members has not the correct type');
}
if (
params.admins &&
params.admins.length > 0 &&
typeof params.admins[0] !== 'string'
) {
throw new Error('admins has not the correct type');
}
this.name = params.name;
this.members = params.members;
this.admins = params.admins;
this.avatar = params.avatar;
}
protected groupContextType(): SignalService.GroupContext.Type {
return SignalService.GroupContext.Type.UPDATE;
}
protected groupContext(): SignalService.GroupContext {
// use the parent method to fill id and type correctly
const groupContext = super.groupContext();
if (this.name) {
groupContext.name = this.name;
}
if (this.members && this.members.length > 0) {
groupContext.members = this.members;
}
if (this.admins && this.admins.length > 0) {
groupContext.admins = this.admins;
}
return groupContext;
}
}

@ -1,2 +1,5 @@
export * from './ClosedGroupMessage';
export * from './ClosedGroupChatMessage';
export * from './ClosedGroupUpdateMessage';
export * from './ClosedGroupLeaveMessage';
export * from './ClosedGroupRequestInfoMessage';

Loading…
Cancel
Save