From 3e23039adb3c412315e9b10a4176b0579caf0304 Mon Sep 17 00:00:00 2001 From: Audric Ackermann Date: Thu, 23 Jul 2020 16:15:34 +1000 Subject: [PATCH] do not sync blocked closed group as mobile is not ready yet --- libtextsecure/sendmessage.js | 11 ++-- ts/receiver/syncMessages.ts | 56 ++++++------------- .../content/sync/BlockedListSyncMessage.ts | 3 +- ts/session/utils/SyncMessage.ts | 12 +--- 4 files changed, 26 insertions(+), 56 deletions(-) diff --git a/libtextsecure/sendmessage.js b/libtextsecure/sendmessage.js index aac069dec..fba096558 100644 --- a/libtextsecure/sendmessage.js +++ b/libtextsecure/sendmessage.js @@ -464,18 +464,15 @@ MessageSender.prototype = { const conversations = Array.isArray(convos) ? convos : [convos]; - const { - blockedNumbersConvos, - blockedGroupsConvos, - } = await libsession.Utils.SyncMessageUtils.filterBlockedNumbers( + const blockedConvos = await libsession.Utils.SyncMessageUtils.filterBlockedNumbers( conversations ); - + // currently we only sync user blocked, not groups const blockedSyncMessage = new libsession.Messages.Outgoing.BlockedListSyncMessage( { timestamp: Date.now(), - numbers: blockedNumbersConvos.map(n => n.id), - groups: blockedGroupsConvos.map(g => g.id), + numbers: blockedConvos.map(n => n.id), + groups: [], } ); return libsession.getMessageQueue().sendSyncMessage(blockedSyncMessage); diff --git a/ts/receiver/syncMessages.ts b/ts/receiver/syncMessages.ts index 85164ffbd..f6bd2a686 100644 --- a/ts/receiver/syncMessages.ts +++ b/ts/receiver/syncMessages.ts @@ -177,13 +177,8 @@ async function handleBlocked( ) { window.log.info('Setting these numbers as blocked:', blocked.numbers); - async function fetchAndRefreshConversation(n: string) { - const conv = await window.ConversationController.get(n); - if (conv) { - conv.trigger('change', conv); - } - } + // blocked.numbers contains numbers if (blocked.numbers) { const currentlyBlockedNumbers = BlockedNumberController.getBlockedNumbers(); const toRemoveFromBlocked = _.difference( @@ -195,43 +190,26 @@ async function handleBlocked( currentlyBlockedNumbers ); - await Promise.all( - toAddToBlocked.map(async n => { - await BlockedNumberController.block(n); - await fetchAndRefreshConversation(n); - }) - ); - await Promise.all( - toRemoveFromBlocked.map(async n => { - await BlockedNumberController.unblock(n); - await fetchAndRefreshConversation(n); - }) - ); - } - - if (blocked.groupIds) { - const groupIds = _.map(blocked.groupIds, (groupId: any) => - StringUtils.decode(groupId, 'utf8') - ); - window.log.info( - 'Setting these groups as blocked:', - groupIds.map((groupId: any) => `group(${groupId})`) - ); - const currentlyBlockedGroups = BlockedNumberController.getBlockedGroups(); - const toRemoveFromBlocked = _.difference(currentlyBlockedGroups, groupIds); - const toAddToBlocked = _.difference(groupIds, currentlyBlockedGroups); + async function markConvoBlocked(block: boolean, n: string) { + const conv = await window.ConversationController.get(n); + if (conv) { + if (conv.isPrivate()) { + await BlockedNumberController.setBlocked(n, block); + } else { + window.console.warn('Ignoring block/unblock for group:', n); + } + conv.trigger('change', conv); + } else { + window.console.warn('Did not find corresponding conversation to block', n); + } + } await Promise.all( - toAddToBlocked.map(async n => { - await BlockedNumberController.blockGroup(n); - await fetchAndRefreshConversation(n); - }) + toAddToBlocked.map(async n => markConvoBlocked(true, n)) ); + await Promise.all( - toRemoveFromBlocked.map(async n => { - await BlockedNumberController.unblockGroup(n); - await fetchAndRefreshConversation(n); - }) + toRemoveFromBlocked.map(async n => markConvoBlocked(false, n)) ); } diff --git a/ts/session/messages/outgoing/content/sync/BlockedListSyncMessage.ts b/ts/session/messages/outgoing/content/sync/BlockedListSyncMessage.ts index d116c39aa..9c988a9ba 100644 --- a/ts/session/messages/outgoing/content/sync/BlockedListSyncMessage.ts +++ b/ts/session/messages/outgoing/content/sync/BlockedListSyncMessage.ts @@ -32,9 +32,10 @@ export abstract class BlockedListSyncMessage extends SyncMessage { protected syncProto(): SignalService.SyncMessage { const syncMessage = super.syncProto(); + // currently we do not handle the closed group blocked syncMessage.blocked = new SignalService.SyncMessage.Blocked({ - groupIds: this.groups, numbers: this.numbers, + groupIds: this.groups, }); return syncMessage; diff --git a/ts/session/utils/SyncMessage.ts b/ts/session/utils/SyncMessage.ts index 8df5b5f41..e78073133 100644 --- a/ts/session/utils/SyncMessage.ts +++ b/ts/session/utils/SyncMessage.ts @@ -103,18 +103,12 @@ export async function filterBlockedNumbers( const thisDevice = await UserUtil.getCurrentDevicePubKey(); if (!thisDevice) { - return { blockedNumbers: [], blockedGroupsIds: [] }; + return []; } - const blockedNumbersConvos = conversations.filter( - c => c.isPrivate() && c.isBlocked() - ); - - const blockedGroupsConvos = conversations.filter( - c => c.isClosedGroup() && c.isBlocked() + return conversations.filter( + c => c.isBlocked() && c.isPrivate() ); - - return { blockedNumbersConvos, blockedGroupsConvos }; } // Serialise as ...