Bugfix. Don't create view for chat which fails validation
Use-case is when an invalid MUC gets opened in singleton mode. Without this fix a new chat with spinner appears, even though it shouldn't.
This commit is contained in:
parent
a656750459
commit
789b47ddb3
@ -2152,6 +2152,7 @@ converse.plugins.add('converse-muc-views', {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/************************ BEGIN Event Handlers ************************/
|
/************************ BEGIN Event Handlers ************************/
|
||||||
_converse.api.listen.on('chatBoxViewsInitialized', () => {
|
_converse.api.listen.on('chatBoxViewsInitialized', () => {
|
||||||
|
|
||||||
@ -2161,12 +2162,16 @@ converse.plugins.add('converse-muc-views', {
|
|||||||
}
|
}
|
||||||
_converse.chatboxviews.delegate('click', 'a.open-chatroom', openChatRoomFromURIClicked);
|
_converse.chatboxviews.delegate('click', 'a.open-chatroom', openChatRoomFromURIClicked);
|
||||||
|
|
||||||
const that = _converse.chatboxviews;
|
function addView (model) {
|
||||||
_converse.chatboxes.on('add', item => {
|
const views = _converse.chatboxviews;
|
||||||
if (!that.get(item.get('id')) && item.get('type') === _converse.CHATROOMS_TYPE) {
|
if (!views.get(model.get('id')) &&
|
||||||
return that.add(item.get('id'), new _converse.ChatRoomView({'model': item}));
|
model.get('type') === _converse.CHATROOMS_TYPE &&
|
||||||
|
model.isValid()
|
||||||
|
) {
|
||||||
|
return views.add(model.get('id'), new _converse.ChatRoomView({'model': model}));
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
|
_converse.chatboxes.on('add', addView);
|
||||||
});
|
});
|
||||||
|
|
||||||
_converse.api.listen.on('clearSession', () => {
|
_converse.api.listen.on('clearSession', () => {
|
||||||
|
@ -372,9 +372,12 @@ converse.plugins.add('converse-chatboxes', {
|
|||||||
if (!attrs.jid) {
|
if (!attrs.jid) {
|
||||||
return 'Ignored ChatBox without JID';
|
return 'Ignored ChatBox without JID';
|
||||||
}
|
}
|
||||||
const auto_join = _converse.auto_join_private_chats.concat(_converse.auto_join_rooms);
|
const room_jids = _converse.auto_join_rooms.map(s => _.isObject(s) ? s.jid : s);
|
||||||
|
const auto_join = _converse.auto_join_private_chats.concat(room_jids);
|
||||||
if (_converse.singleton && !_.includes(auto_join, attrs.jid)) {
|
if (_converse.singleton && !_.includes(auto_join, attrs.jid)) {
|
||||||
return "Ignored ChatBox that's not being auto joined in singleton mode";
|
const msg = `${attrs.jid} is not allowed because singleton is true and it's not being auto_joined`;
|
||||||
|
_converse.log(msg, Strophe.LogLevel.WARN);
|
||||||
|
return msg;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -1119,6 +1122,10 @@ converse.plugins.add('converse-chatboxes', {
|
|||||||
_converse.log(response.responseText);
|
_converse.log(response.responseText);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
if (!chatbox.isValid()) {
|
||||||
|
chatbox.destroy();
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return chatbox;
|
return chatbox;
|
||||||
}
|
}
|
||||||
@ -1269,9 +1276,15 @@ converse.plugins.add('converse-chatboxes', {
|
|||||||
|
|
||||||
if (_.isString(jids)) {
|
if (_.isString(jids)) {
|
||||||
const chat = await _converse.api.chats.create(jids, attrs);
|
const chat = await _converse.api.chats.create(jids, attrs);
|
||||||
return chat.maybeShow(force);
|
if (chat) {
|
||||||
|
return chat.maybeShow(force);
|
||||||
|
}
|
||||||
|
return chat;
|
||||||
} else if (Array.isArray(jids)) {
|
} else if (Array.isArray(jids)) {
|
||||||
return Promise.all(jids.map(j => _converse.api.chats.create(j, attrs).then(c => c.maybeShow(force))));
|
return Promise.all(
|
||||||
|
jids.map(j => _converse.api.chats.create(j, attrs).then(c => c ? c.maybeShow(force) : null))
|
||||||
|
.filter(c => c)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
const err_msg = "chats.open: You need to provide at least one JID";
|
const err_msg = "chats.open: You need to provide at least one JID";
|
||||||
_converse.log(err_msg, Strophe.LogLevel.ERROR);
|
_converse.log(err_msg, Strophe.LogLevel.ERROR);
|
||||||
|
@ -1837,14 +1837,18 @@ converse.plugins.add('converse-muc', {
|
|||||||
* }
|
* }
|
||||||
* );
|
* );
|
||||||
*/
|
*/
|
||||||
'open': async function (jids, attrs, force=false) {
|
async open (jids, attrs, force=false) {
|
||||||
await _converse.api.waitUntil('chatBoxesFetched');
|
await _converse.api.waitUntil('chatBoxesFetched');
|
||||||
if (_.isUndefined(jids)) {
|
if (_.isUndefined(jids)) {
|
||||||
const err_msg = 'rooms.open: You need to provide at least one JID';
|
const err_msg = 'rooms.open: You need to provide at least one JID';
|
||||||
_converse.log(err_msg, Strophe.LogLevel.ERROR);
|
_converse.log(err_msg, Strophe.LogLevel.ERROR);
|
||||||
throw(new TypeError(err_msg));
|
throw(new TypeError(err_msg));
|
||||||
} else if (_.isString(jids)) {
|
} else if (_.isString(jids)) {
|
||||||
return _converse.api.rooms.create(jids, attrs).maybeShow(force);
|
const room = _converse.api.rooms.create(jids, attrs);
|
||||||
|
if (room) {
|
||||||
|
room.maybeShow(force);
|
||||||
|
}
|
||||||
|
return room;
|
||||||
} else {
|
} else {
|
||||||
return _.map(jids, jid => _converse.api.rooms.create(jid, attrs).maybeShow(force));
|
return _.map(jids, jid => _converse.api.rooms.create(jid, attrs).maybeShow(force));
|
||||||
}
|
}
|
||||||
@ -1873,7 +1877,7 @@ converse.plugins.add('converse-muc', {
|
|||||||
* )
|
* )
|
||||||
* });
|
* });
|
||||||
*/
|
*/
|
||||||
'get' (jids, attrs, create) {
|
get (jids, attrs, create) {
|
||||||
if (_.isString(attrs)) {
|
if (_.isString(attrs)) {
|
||||||
attrs = {'nick': attrs};
|
attrs = {'nick': attrs};
|
||||||
} else if (_.isUndefined(attrs)) {
|
} else if (_.isUndefined(attrs)) {
|
||||||
|
Loading…
Reference in New Issue
Block a user