diff --git a/libtextsecure/sendmessage.js b/libtextsecure/sendmessage.js index b5bf9d500..c037b06a5 100644 --- a/libtextsecure/sendmessage.js +++ b/libtextsecure/sendmessage.js @@ -1213,17 +1213,6 @@ MessageSender.prototype = { }); }, - requestGroupInfo(groupId, groupNumbers, options) { - const proto = new textsecure.protobuf.DataMessage(); - proto.group = new textsecure.protobuf.GroupContext(); - proto.group.id = stringToArrayBuffer(groupId); - proto.group.type = textsecure.protobuf.GroupContext.Type.REQUEST_INFO; - libloki.api.debug.logGroupRequestInfo( - `Sending GROUP_TYPES.REQUEST_INFO to: ${groupNumbers}, about groupId ${groupId}.` - ); - return this.sendGroupProto(groupNumbers, proto, Date.now(), options); - }, - requestSenderKeys(sender, groupId) { const proto = new textsecure.protobuf.DataMessage(); const update = new textsecure.protobuf.MediumGroupUpdate(); @@ -1341,7 +1330,6 @@ textsecure.MessageSender = function MessageSenderWrapper(username, password) { this.addNumberToGroup = sender.addNumberToGroup.bind(sender); this.setGroupName = sender.setGroupName.bind(sender); this.setGroupAvatar = sender.setGroupAvatar.bind(sender); - this.requestGroupInfo = sender.requestGroupInfo.bind(sender); this.requestSenderKeys = sender.requestSenderKeys.bind(sender); this.leaveGroup = sender.leaveGroup.bind(sender); this.sendSyncMessage = sender.sendSyncMessage.bind(sender); diff --git a/ts/receiver/groups.ts b/ts/receiver/groups.ts index 4c6c178d1..3dfa98655 100644 --- a/ts/receiver/groups.ts +++ b/ts/receiver/groups.ts @@ -1,4 +1,6 @@ import { SignalService } from '../protobuf'; +import { ClosedGroupRequestInfoMessage } from '../session/messages/outgoing/content/data/group/ClosedGroupRequestInfoMessage'; +import { getMessageQueue } from '../session'; const _ = window.Lodash; @@ -112,9 +114,15 @@ export async function preprocessGroupMessage( window.libloki.api.sendSessionRequestsToMembers(group.members); } else if (newGroup) { // We have an unknown group, we should request info from the sender - window.textsecure.messaging.requestGroupInfo(conversationId, [ - primarySource, - ]); + const requestInfo = { + timestamp: Date.now(), + groupId: conversationId, + }; + const requestInfoMessage = new ClosedGroupRequestInfoMessage( + requestInfo + ); + await getMessageQueue().sendToGroup(requestInfoMessage); + } return false; } diff --git a/ts/session/messages/outgoing/content/TypingMessage.ts b/ts/session/messages/outgoing/content/TypingMessage.ts index 47ffdbaf8..371d0739f 100644 --- a/ts/session/messages/outgoing/content/TypingMessage.ts +++ b/ts/session/messages/outgoing/content/TypingMessage.ts @@ -41,7 +41,7 @@ export class TypingMessage extends ContentMessage { const typingMessage = new SignalService.TypingMessage(); if (this.groupId) { typingMessage.groupId = new Uint8Array( - StringUtils.encode(this.groupId, 'binary') + StringUtils.encode(this.groupId, 'utf8') ); } typingMessage.action = action; diff --git a/ts/session/messages/outgoing/content/data/group/ClosedGroupMessage.ts b/ts/session/messages/outgoing/content/data/group/ClosedGroupMessage.ts index ccdb8f121..976f58cea 100644 --- a/ts/session/messages/outgoing/content/data/group/ClosedGroupMessage.ts +++ b/ts/session/messages/outgoing/content/data/group/ClosedGroupMessage.ts @@ -2,8 +2,9 @@ import { DataMessage } from '../DataMessage'; import { SignalService } from '../../../../../../protobuf'; import { TextEncoder } from 'util'; import { MessageParams } from '../../../Message'; +import { StringUtils } from '../../../../../utils'; -interface ClosedGroupMessageParams extends MessageParams { +export interface ClosedGroupMessageParams extends MessageParams { groupId: string; } @@ -21,7 +22,9 @@ export abstract class ClosedGroupMessage extends DataMessage { protected abstract groupContextType(): SignalService.GroupContext.Type; protected groupContext(): SignalService.GroupContext { - const id = new TextEncoder().encode(this.groupId); + const id = new Uint8Array( + StringUtils.encode(this.groupId, 'utf8') + ); const type = this.groupContextType(); return new SignalService.GroupContext({ id, type }); diff --git a/ts/session/messages/outgoing/content/data/group/ClosedGroupRequestInfoMessage.ts b/ts/session/messages/outgoing/content/data/group/ClosedGroupRequestInfoMessage.ts new file mode 100644 index 000000000..ddc99abf4 --- /dev/null +++ b/ts/session/messages/outgoing/content/data/group/ClosedGroupRequestInfoMessage.ts @@ -0,0 +1,29 @@ +import { SignalService } from '../../../../../../protobuf'; +import { ClosedGroupMessage, ClosedGroupMessageParams } from './ClosedGroupMessage'; + + +export class ClosedGroupRequestInfoMessage extends ClosedGroupMessage { + + constructor(params: ClosedGroupMessageParams) { + super({ + timestamp: params.timestamp, + identifier: params.identifier, + groupId: params.groupId, + }); + } + + public ttl(): number { + return this.getDefaultTTL(); + } + + protected groupContextType(): SignalService.GroupContext.Type { + return SignalService.GroupContext.Type.REQUEST_INFO; + } + + protected dataProto(): SignalService.DataMessage { + const messageProto = new SignalService.DataMessage(); + messageProto.group = this.groupContext(); + + return messageProto; + } +}