diff --git a/ts/session/messages/outgoing/content/sync/ContactSyncMessage.ts b/ts/session/messages/outgoing/content/sync/ContactSyncMessage.ts index 0b90f4b86..9ad91b161 100644 --- a/ts/session/messages/outgoing/content/sync/ContactSyncMessage.ts +++ b/ts/session/messages/outgoing/content/sync/ContactSyncMessage.ts @@ -14,11 +14,19 @@ interface ContactSyncMessageParams extends MessageParams { } export class ContactSyncMessage extends SyncMessage { + private readonly linkedDevices: Array; + private readonly dataMessage?: DataMessage; + constructor(params: ContactSyncMessageParams) { super(params); + + this.linkedDevices = params.linkedDevices; + this.dataMessage = params.dataMessage; + + this.syncProto(); } - - protected syncProto() { + + protected syncProto(): SignalService.SyncMessage { // const contacts = new SignalService.SyncMessage.Contacts(); // contacts. @@ -31,17 +39,9 @@ export class ContactSyncMessage extends SyncMessage { // SignalService.SyncMessage.OpenGroupDetails // SignalService.SyncMessage.Read - const conversations = await Data.getAllConversations({ ConversationCollection: Whisper.ConversationCollection }); - const contacts = conversations.filter((conversation: any) => { - return ( - !conversation.isMe() && - conversation.isPrivate() && - !conversation.isSecondaryDevice() && - conversation.isFriend() - ); + const syncMessage = new SignalService.SyncMessage({ + }); - - const syncMessage = await libloki.api.createContactSyncProtoMessage(contacts) as SignalService.SyncMessage; // TODO: Is this a request sync message or a basic sync message? // Set request type @@ -49,6 +49,15 @@ export class ContactSyncMessage extends SyncMessage { request.type = SignalService.SyncMessage.Request.Type.CONTACTS; syncMessage.request = request; + contentMessage.syncMessage = syncMessage; + + + const silent = true; + + const debugMessageType = + window.textsecure.OutgoingMessage.DebugMessageType.CONTACT_SYNC_SEND; + + return syncMessage; } @@ -56,3 +65,36 @@ export class ContactSyncMessage extends SyncMessage { // if dataMess // } } + + +// LOOOK HERE!!! FOR OW TO BUILD + + // // We need to sync across 3 contacts at a time + // // This is to avoid hitting storage server limit + // const chunked = _.chunk([...contactsSet], 3); + // const syncMessages = await Promise.all( + // chunked.map(c => libloki.api.createContactSyncProtoMessage(c)) + // ); + // const syncPromises = syncMessages + // .filter(message => message != null) + // .map(syncMessage => { + // const contentMessage = new textsecure.protobuf.Content(); + // contentMessage.syncMessage = syncMessage; + + // const silent = true; + + // const debugMessageType = + // window.textsecure.OutgoingMessage.DebugMessageType.CONTACT_SYNC_SEND; + + // return this.sendIndividualProto( + // primaryDeviceKey, + // contentMessage, + // Date.now(), + // silent, + // { debugMessageType } // options + // ); + // }); + + // return Promise.all(syncPromises); + // }, + diff --git a/ts/session/utils/SyncMessageUtils.ts b/ts/session/utils/SyncMessageUtils.ts index b1c83515e..4493cabbc 100644 --- a/ts/session/utils/SyncMessageUtils.ts +++ b/ts/session/utils/SyncMessageUtils.ts @@ -11,13 +11,15 @@ import { SignalService } from '../../protobuf'; import { SyncMessageType } from '../messages/outgoing/content/sync/SyncMessage'; import * as Data from '../../../js/modules/data'; -import { textsecure, libloki, ConversationController, Whisper } from '../../window'; +import { ConversationController, libloki, Whisper, textsecure } from '../../window'; +import { OpenGroup } from '../types/OpenGroup'; +import { generateFakePubkey } from '../../test/test-utils/testUtils'; // export function from(message: ContentMessage): SyncMessage | undefined { // testtttingggg export async function from( message: ContentMessage, - sendTo: any, + sendTo: PubKey | OpenGroup, syncType: SyncMessageEnum.CONTACTS | SyncMessageEnum.GROUPS = SyncMessageEnum.CONTACTS ): Promise { const { timestamp, identifier } = message; @@ -29,14 +31,23 @@ export async function from( let syncMessage: SyncMessage; switch (syncType) { case SyncMessageEnum.CONTACTS: - // Send to one device at a time + const contact = ConversationController.get( + sendTo instanceof PubKey + ? sendTo.key : sendTo.conversationId + ); - const builtSyncMessage = await libloki.api.createContactSyncProtoMessage(); - + const protoSyncMessage = libloki.api.createContactSyncProtoMessage(contact); + + const contentMessage = new ContactSyncMessage({ + dataMessage: protoSyncMessage, + linkedDevices: [generateFakePubkey()], + timestamp: Date.now(), + }); + - break; + case SyncMessageEnum.GROUPS: syncMessage = new GroupSyncMessage({ @@ -49,11 +60,10 @@ export async function from( return syncMessage; } -export async function canSync(message: ContentMessage, device: any): boolean { +export async function canSync(message: ContentMessage, device: any): Promise { return Boolean(from(message, device)); } - export async function getSyncContacts(): Promise> { const thisDevice = textsecure.storage.user.getNumber(); const primaryDevice = await Data.getPrimaryDeviceFor(thisDevice);