From 9ee5550cdebc93df44affca194ec57b5e34621c4 Mon Sep 17 00:00:00 2001 From: JC Brand Date: Thu, 15 Jun 2017 16:22:49 +0200 Subject: [PATCH] inverse: bugfix, when reloading, hidden auto-joined room was displayed --- src/converse-muc.js | 64 ++++++++++++++++++++------------------- src/converse-singleton.js | 14 ++++++++- 2 files changed, 46 insertions(+), 32 deletions(-) diff --git a/src/converse-muc.js b/src/converse-muc.js index 074bb164e..4ba63002e 100755 --- a/src/converse-muc.js +++ b/src/converse-muc.js @@ -345,41 +345,39 @@ }); _converse.openChatRoom = function (settings) { - /* Creates a new chat room, making sure that certain attributes + /* Opens a chat room, making sure that certain attributes * are correct, for example that the "type" is set to * "chatroom". */ - settings = _.extend( - _.zipObject(ROOM_FEATURES, _.map(ROOM_FEATURES, _.stubFalse)), - settings - ); - return _converse.chatboxviews.showChat( - _.extend({ - 'affiliation': null, - 'connection_status': ROOMSTATUS.DISCONNECTED, - 'description': '', - 'features_fetched': false, - 'roomconfig': {}, - 'type': CHATROOMS_TYPE, - }, settings) - ); + settings = _.assign({'type': CHATROOMS_TYPE}, settings); + return _converse.chatboxviews.showChat(settings); }; _converse.ChatRoom = _converse.ChatBox.extend({ defaults: function () { - return _.extend(_.clone(_converse.ChatBox.prototype.defaults), { - 'type': CHATROOMS_TYPE, - // For group chats, we distinguish between generally unread - // messages and those ones that specifically mention the - // user. - // - // To keep things simple, we reuse `num_unread` from - // _converse.ChatBox to indicate unread messages which - // mention the user and `num_unread_general` to indicate - // generally unread messages (which *includes* mentions!). - 'num_unread_general': 0 - }); + return _.assign( + _.clone(_converse.ChatBox.prototype.defaults), + _.zipObject(ROOM_FEATURES, _.map(ROOM_FEATURES, _.stubFalse)), + { + // For group chats, we distinguish between generally unread + // messages and those ones that specifically mention the + // user. + // + // To keep things simple, we reuse `num_unread` from + // _converse.ChatBox to indicate unread messages which + // mention the user and `num_unread_general` to indicate + // generally unread messages (which *includes* mentions!). + 'num_unread_general': 0, + + 'affiliation': null, + 'connection_status': ROOMSTATUS.DISCONNECTED, + 'description': '', + 'features_fetched': false, + 'roomconfig': {}, + 'type': CHATROOMS_TYPE, + } + ); }, isUserMentioned: function (message) { @@ -2574,8 +2572,7 @@ } }, - openChatRoom: function (ev) { - ev.preventDefault(); + parseRoomDataFromEvent: function (ev) { var name, $name, server, $server, jid; if (ev.type === 'click') { name = $(ev.target).text(); @@ -2597,13 +2594,18 @@ return; } } - _converse.openChatRoom({ + return { 'id': jid, 'jid': jid, 'name': name || Strophe.unescapeNode(Strophe.getNodeFromJid(jid)), 'type': CHATROOMS_TYPE, 'box_id': b64_sha1(jid) - }); + } + }, + + openChatRoom: function (ev) { + ev.preventDefault(); + _converse.openChatRoom(this.parseRoomDataFromEvent(ev)); }, setDomain: function (ev) { diff --git a/src/converse-singleton.js b/src/converse-singleton.js index 3afa6f635..135b49cca 100644 --- a/src/converse-singleton.js +++ b/src/converse-singleton.js @@ -54,6 +54,17 @@ return this.__super__.createChatBox.call(this, jid, attrs); } }, + + RoomsPanel: { + parseRoomDataFromEvent: function (ev) { + /* We set hidden to false for rooms opened manually by the + * user. They should always be shown. + */ + var result = this.__super__.parseRoomDataFromEvent.apply(this, arguments); + result.hidden = false; + return result; + } + }, ChatBoxViews: { showChat: function (attrs, force) { @@ -63,7 +74,8 @@ */ var _converse = this.__super__._converse; var chatbox = this.getChatBox(attrs, true); - if ((force || !attrs.hidden) && _converse.connection.authenticated) { + var hidden = _.isUndefined(attrs.hidden) ? chatbox.get('hidden') : attrs.hidden; + if ((force || !hidden) && _converse.connection.authenticated) { _.each(_converse.chatboxviews.xget(chatbox.get('id')), hideChat); chatbox.save({'hidden': false}); }