Move methods from MUC view to model
* checkForReservedNick * parseRoomFeatures * sendConfiguration Refs #1032
This commit is contained in:
parent
1cec976b5b
commit
06141b3212
@ -264,12 +264,12 @@
|
||||
' </query>'+
|
||||
' </iq>');
|
||||
|
||||
spyOn(chatroomview, 'sendConfiguration').and.callThrough();
|
||||
spyOn(chatroomview.model, 'sendConfiguration').and.callThrough();
|
||||
_converse.connection._dataRecv(test_utils.createRequest(node.firstElementChild));
|
||||
|
||||
|
||||
return test_utils.waitUntil(function () {
|
||||
return chatroomview.sendConfiguration.calls.count() === 1;
|
||||
return chatroomview.model.sendConfiguration.calls.count() === 1;
|
||||
}, 300).then(function () {
|
||||
var sent_stanza = sent_IQ_els.pop();
|
||||
while (sent_stanza.getAttribute('type') !== 'set') {
|
||||
@ -3203,6 +3203,7 @@
|
||||
to: 'dummy@localhost',
|
||||
type: 'groupchat'
|
||||
}).c('body').t(message).tree();
|
||||
|
||||
view.handleMUCMessage(msg);
|
||||
|
||||
expect(roomspanel.el.querySelectorAll('.available-room').length).toBe(1);
|
||||
|
@ -1200,7 +1200,8 @@
|
||||
*/
|
||||
nick = nick ? nick : this.model.get('nick');
|
||||
if (!nick) {
|
||||
return this.checkForReservedNick();
|
||||
this.checkForReservedNick();
|
||||
return this;
|
||||
}
|
||||
if (this.model.get('connection_status') === converse.ROOMSTATUS.ENTERED) {
|
||||
// We have restored a chat room from session storage,
|
||||
@ -1314,29 +1315,6 @@
|
||||
);
|
||||
},
|
||||
|
||||
sendConfiguration(config, onSuccess, onError) {
|
||||
/* Send an IQ stanza with the room configuration.
|
||||
*
|
||||
* Parameters:
|
||||
* (Array) config: The room configuration
|
||||
* (Function) onSuccess: Callback upon succesful IQ response
|
||||
* The first parameter passed in is IQ containing the
|
||||
* room configuration.
|
||||
* The second is the response IQ from the server.
|
||||
* (Function) onError: Callback upon error IQ response
|
||||
* The first parameter passed in is IQ containing the
|
||||
* room configuration.
|
||||
* The second is the response IQ from the server.
|
||||
*/
|
||||
const iq = $iq({to: this.model.get('jid'), type: "set"})
|
||||
.c("query", {xmlns: Strophe.NS.MUC_OWNER})
|
||||
.c("x", {xmlns: Strophe.NS.XFORM, type: "submit"});
|
||||
_.each(config || [], function (node) { iq.cnode(node).up(); });
|
||||
onSuccess = _.isUndefined(onSuccess) ? _.noop : _.partial(onSuccess, iq.nodeTree);
|
||||
onError = _.isUndefined(onError) ? _.noop : _.partial(onError, iq.nodeTree);
|
||||
return _converse.connection.sendIQ(iq, onSuccess, onError);
|
||||
},
|
||||
|
||||
saveConfiguration (form) {
|
||||
/* Submit the room configuration form by sending an IQ
|
||||
* stanza to the server.
|
||||
@ -1350,7 +1328,7 @@
|
||||
return new Promise((resolve, reject) => {
|
||||
const inputs = form ? sizzle(':input:not([type=button]):not([type=submit])', form) : [],
|
||||
configArray = _.map(inputs, u.webForm2xForm);
|
||||
this.sendConfiguration(configArray, resolve, reject);
|
||||
this.model.sendConfiguration(configArray, resolve, reject);
|
||||
this.closeForm();
|
||||
});
|
||||
},
|
||||
@ -1394,7 +1372,7 @@
|
||||
}
|
||||
configArray.push(field);
|
||||
if (!--count) {
|
||||
that.sendConfiguration(configArray, resolve, reject);
|
||||
that.model.sendConfiguration(configArray, resolve, reject);
|
||||
}
|
||||
});
|
||||
});
|
||||
@ -1434,42 +1412,6 @@
|
||||
});
|
||||
},
|
||||
|
||||
parseRoomFeatures (iq) {
|
||||
/* See http://xmpp.org/extensions/xep-0045.html#disco-roominfo
|
||||
*
|
||||
* <identity
|
||||
* category='conference'
|
||||
* name='A Dark Cave'
|
||||
* type='text'/>
|
||||
* <feature var='http://jabber.org/protocol/muc'/>
|
||||
* <feature var='muc_passwordprotected'/>
|
||||
* <feature var='muc_hidden'/>
|
||||
* <feature var='muc_temporary'/>
|
||||
* <feature var='muc_open'/>
|
||||
* <feature var='muc_unmoderated'/>
|
||||
* <feature var='muc_nonanonymous'/>
|
||||
* <feature var='urn:xmpp:mam:0'/>
|
||||
*/
|
||||
const features = {
|
||||
'features_fetched': true,
|
||||
'name': iq.querySelector('identity').getAttribute('name')
|
||||
}
|
||||
_.each(iq.querySelectorAll('feature'), function (field) {
|
||||
const fieldname = field.getAttribute('var');
|
||||
if (!fieldname.startsWith('muc_')) {
|
||||
if (fieldname === Strophe.NS.MAM) {
|
||||
features.mam_enabled = true;
|
||||
}
|
||||
return;
|
||||
}
|
||||
features[fieldname.replace('muc_', '')] = true;
|
||||
});
|
||||
const desc_field = iq.querySelector('field[var="muc#roominfo_description"] value');
|
||||
if (!_.isNull(desc_field)) {
|
||||
features.description = desc_field.textContent;
|
||||
}
|
||||
this.model.save(features);
|
||||
},
|
||||
|
||||
getRoomFeatures () {
|
||||
/* Fetch the room disco info, parse it and then
|
||||
@ -1479,7 +1421,7 @@
|
||||
_converse.connection.disco.info(
|
||||
this.model.get('jid'),
|
||||
null,
|
||||
_.flow(this.parseRoomFeatures.bind(this), resolve),
|
||||
_.flow(this.model.parseRoomFeatures.bind(this.model), resolve),
|
||||
() => { reject(new Error("Could not parse the room features")) },
|
||||
5000
|
||||
);
|
||||
@ -1528,22 +1470,13 @@
|
||||
checkForReservedNick () {
|
||||
/* User service-discovery to ask the XMPP server whether
|
||||
* this user has a reserved nickname for this room.
|
||||
* If so, we'll use that, otherwise we render the nickname
|
||||
* form.
|
||||
* If so, we'll use that, otherwise we render the nickname form.
|
||||
*/
|
||||
this.showSpinner();
|
||||
_converse.connection.sendIQ(
|
||||
$iq({
|
||||
'to': this.model.get('jid'),
|
||||
'from': _converse.connection.jid,
|
||||
'type': "get"
|
||||
}).c("query", {
|
||||
'xmlns': Strophe.NS.DISCO_INFO,
|
||||
'node': 'x-roomuser-item'
|
||||
}),
|
||||
this.model.checkForReservedNick(
|
||||
this.onNickNameFound.bind(this),
|
||||
this.onNickNameNotFound.bind(this)
|
||||
);
|
||||
)
|
||||
return this;
|
||||
},
|
||||
|
||||
|
@ -273,6 +273,90 @@
|
||||
);
|
||||
},
|
||||
|
||||
sendConfiguration (config, callback, errback) {
|
||||
/* Send an IQ stanza with the room configuration.
|
||||
*
|
||||
* Parameters:
|
||||
* (Array) config: The room configuration
|
||||
* (Function) callback: Callback upon succesful IQ response
|
||||
* The first parameter passed in is IQ containing the
|
||||
* room configuration.
|
||||
* The second is the response IQ from the server.
|
||||
* (Function) errback: Callback upon error IQ response
|
||||
* The first parameter passed in is IQ containing the
|
||||
* room configuration.
|
||||
* The second is the response IQ from the server.
|
||||
*/
|
||||
const iq = $iq({to: this.get('jid'), type: "set"})
|
||||
.c("query", {xmlns: Strophe.NS.MUC_OWNER})
|
||||
.c("x", {xmlns: Strophe.NS.XFORM, type: "submit"});
|
||||
_.each(config || [], function (node) { iq.cnode(node).up(); });
|
||||
callback = _.isUndefined(callback) ? _.noop : _.partial(callback, iq.nodeTree);
|
||||
errback = _.isUndefined(errback) ? _.noop : _.partial(errback, iq.nodeTree);
|
||||
return _converse.connection.sendIQ(iq, callback, errback);
|
||||
},
|
||||
|
||||
parseRoomFeatures (iq) {
|
||||
/* Parses an IQ stanza containing the room's features.
|
||||
*
|
||||
* See http://xmpp.org/extensions/xep-0045.html#disco-roominfo
|
||||
*
|
||||
* <identity
|
||||
* category='conference'
|
||||
* name='A Dark Cave'
|
||||
* type='text'/>
|
||||
* <feature var='http://jabber.org/protocol/muc'/>
|
||||
* <feature var='muc_passwordprotected'/>
|
||||
* <feature var='muc_hidden'/>
|
||||
* <feature var='muc_temporary'/>
|
||||
* <feature var='muc_open'/>
|
||||
* <feature var='muc_unmoderated'/>
|
||||
* <feature var='muc_nonanonymous'/>
|
||||
* <feature var='urn:xmpp:mam:0'/>
|
||||
*/
|
||||
const features = {
|
||||
'features_fetched': true,
|
||||
'name': iq.querySelector('identity').getAttribute('name')
|
||||
}
|
||||
_.each(iq.querySelectorAll('feature'), function (field) {
|
||||
const fieldname = field.getAttribute('var');
|
||||
if (!fieldname.startsWith('muc_')) {
|
||||
if (fieldname === Strophe.NS.MAM) {
|
||||
features.mam_enabled = true;
|
||||
}
|
||||
return;
|
||||
}
|
||||
features[fieldname.replace('muc_', '')] = true;
|
||||
});
|
||||
const desc_field = iq.querySelector('field[var="muc#roominfo_description"] value');
|
||||
if (!_.isNull(desc_field)) {
|
||||
features.description = desc_field.textContent;
|
||||
}
|
||||
this.save(features);
|
||||
},
|
||||
|
||||
checkForReservedNick (callback, errback) {
|
||||
/* Use service-discovery to ask the XMPP server whether
|
||||
* this user has a reserved nickname for this room.
|
||||
* If so, we'll use that, otherwise we render the nickname form.
|
||||
*
|
||||
* Parameters:
|
||||
* (Function) callback: Callback upon succesful IQ response
|
||||
* (Function) errback: Callback upon error IQ response
|
||||
*/
|
||||
_converse.connection.sendIQ(
|
||||
$iq({
|
||||
'to': this.get('jid'),
|
||||
'from': _converse.connection.jid,
|
||||
'type': "get"
|
||||
}).c("query", {
|
||||
'xmlns': Strophe.NS.DISCO_INFO,
|
||||
'node': 'x-roomuser-item'
|
||||
}),
|
||||
callback, errback);
|
||||
return this;
|
||||
},
|
||||
|
||||
isUserMentioned (message) {
|
||||
/* Returns a boolean to indicate whether the current user
|
||||
* was mentioned in a message.
|
||||
@ -295,11 +379,12 @@
|
||||
return; // The message has no text
|
||||
}
|
||||
if (u.isNewMessage(stanza) && this.newMessageWillBeHidden()) {
|
||||
this.save({'num_unread_general': this.get('num_unread_general') + 1});
|
||||
const settings = {'num_unread_general': this.get('num_unread_general') + 1};
|
||||
if (this.isUserMentioned(body.textContent)) {
|
||||
this.save({'num_unread': this.get('num_unread') + 1});
|
||||
settings.num_unread = this.get('num_unread') + 1;
|
||||
_converse.incrementMsgCounter();
|
||||
}
|
||||
this.save(settings);
|
||||
}
|
||||
},
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user