diff --git a/js/blocked_number_controller.js b/js/blocked_number_controller.js index ab71238c5..ad0142fa6 100644 --- a/js/blocked_number_controller.js +++ b/js/blocked_number_controller.js @@ -1,4 +1,4 @@ -/* global , Whisper, storage */ +/* global , Whisper, storage, ConversationController */ /* global textsecure: false */ /* eslint-disable more/no-then */ @@ -6,12 +6,12 @@ // eslint-disable-next-line func-names (function() { 'use strict'; - + window.Whisper = window.Whisper || {}; - + const blockedNumbers = new Whisper.BlockedNumberCollection(); window.getBlockedNumbers = () => blockedNumbers; - + window.BlockedNumberController = { getAll() { try { @@ -26,7 +26,7 @@ }, load() { window.log.info('BlockedNumberController: starting initial fetch'); - + if (blockedNumbers.length) { throw new Error('BlockedNumberController: Already loaded!'); } @@ -82,5 +82,4 @@ return storage.isBlocked(number); }, }; - })(); - \ No newline at end of file + })(); \ No newline at end of file diff --git a/js/models/blockedNumbers.js b/js/models/blockedNumbers.js index b31d24e58..b26a04290 100644 --- a/js/models/blockedNumbers.js +++ b/js/models/blockedNumbers.js @@ -89,5 +89,5 @@ return this.models.find(m => m.number === number); }, }); - + })(); \ No newline at end of file diff --git a/js/models/conversations.js b/js/models/conversations.js index d15fea527..193f08426 100644 --- a/js/models/conversations.js +++ b/js/models/conversations.js @@ -129,7 +129,7 @@ setTimeout(() => { this.setFriendRequestTimer(); }, 0); - + const sealedSender = this.get('sealedSender'); if (sealedSender === undefined) { this.set({ sealedSender: SEALED_SENDER.UNKNOWN }); @@ -153,10 +153,12 @@ block() { BlockedNumberController.block(this.id); this.trigger('change'); + this.messageCollection.forEach(m => m.trigger('change')); }, unblock() { BlockedNumberController.unblock(this.id); this.trigger('change'); + this.messageCollection.forEach(m => m.trigger('change')); }, async cleanup() { await window.Signal.Types.Conversation.deleteExternalFiles( @@ -254,7 +256,7 @@ // Go through the messages and check for any pending friend requests const messages = await window.Signal.Data.getMessagesByConversation( this.id, - { + { type: 'friend-request', MessageCollection: Whisper.MessageCollection, } diff --git a/js/views/blocked_number_view.js b/js/views/blocked_number_view.js index 98837cae6..a7b23d80a 100644 --- a/js/views/blocked_number_view.js +++ b/js/views/blocked_number_view.js @@ -8,7 +8,7 @@ // eslint-disable-next-line func-names (function() { 'use strict'; - + window.Whisper = window.Whisper || {}; Whisper.BlockedNumberView = Whisper.View.extend({ @@ -25,7 +25,7 @@ }); this.listView.render(); - this.$('.content').append(this.listView.el); + this.$('.blocked-user-settings').append(this.listView.el); }); }, render_attributes() { @@ -37,12 +37,11 @@ Whisper.BlockedNumberListView = Whisper.ListView.extend({ - tagName: 'div', itemView: Whisper.View.extend({ - tagName: 'div', + tagName: 'li', templateName: 'blockedNumber', - initialize() { - this.listenTo(this.model, 'change', this.render); + events: { + 'click .unblock-button': 'onUnblock', }, render_attributes() { const number = (this.model && this.model.get('number')) || '-'; @@ -50,7 +49,16 @@ number, } }, + onUnblock() { + const number = this.model && this.model.get('number'); + if (!number) return; + + if (BlockedNumberController.isBlocked(number)) { + BlockedNumberController.unblock(number); + window.onUnblockNumber(number); + this.remove(); + } + }, }), }); })(); - \ No newline at end of file diff --git a/main.js b/main.js index 6eccb7b9a..33ab52a21 100644 --- a/main.js +++ b/main.js @@ -930,6 +930,12 @@ ipc.on('set-media-permissions', (event, value) => { event.sender.send('set-success-media-permissions', null); }); +ipc.on('on-unblock-number', (event, number) => { + if (mainWindow && mainWindow.webContents) { + mainWindow.webContents.send('on-unblock-number', number); + } +}); + installSettingsGetter('is-primary'); installSettingsGetter('sync-request'); installSettingsGetter('sync-time'); diff --git a/preload.js b/preload.js index a5ac6586a..e7f5d6093 100644 --- a/preload.js +++ b/preload.js @@ -77,6 +77,21 @@ window.setMediaPermissions = enabled => ipc.send('set-media-permissions', enabled); window.getMediaPermissions = () => ipc.sendSync('get-media-permissions'); +// Events for updating block number states across different windows +// In this case we need these to update the blocked number collection on the main window from the settings window +window.onUnblockNumber = number => ipc.send('on-unblock-number', number); + +ipc.on('on-unblock-number', (event, number) => { + if (window.ConversationController) { + try { + const conversation = window.ConversationController.get(number); + conversation.unblock(); + } catch (e) { + window.log.info('IPC on unblock: failed to fetch conversation for number: ', number); + } + } +}); + window.closeAbout = () => ipc.send('close-about'); window.updateTrayIcon = unreadCount => diff --git a/settings.html b/settings.html index 95f834449..a16727e00 100644 --- a/settings.html +++ b/settings.html @@ -35,12 +35,14 @@