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 @@