Add support for XEP-0280 Message Carbons. updates #132

This commit is contained in:
JC Brand 2014-04-19 06:58:26 +02:00
parent 968f8bb223
commit eca42fbb2f
3 changed files with 47 additions and 12 deletions

View File

@ -152,6 +152,7 @@
this.cache_otr_key = false; this.cache_otr_key = false;
this.debug = false; this.debug = false;
this.default_box_height = 324; // The default height, in pixels, for the control box, chat boxes and chatrooms. this.default_box_height = 324; // The default height, in pixels, for the control box, chat boxes and chatrooms.
this.enable_message_carbons = false;
this.expose_rid_and_sid = false; this.expose_rid_and_sid = false;
this.forward_messages = false; this.forward_messages = false;
this.hide_muc_server = false; this.hide_muc_server = false;
@ -184,6 +185,7 @@
'connection', 'connection',
'debug', 'debug',
'default_box_height', 'default_box_height',
'enable_message_carbons',
'expose_rid_and_sid', 'expose_rid_and_sid',
'forward_messages', 'forward_messages',
'fullname', 'fullname',
@ -567,6 +569,25 @@
}, this)); }, this));
}; };
this.enableCarbons = function () {
/* Ask the XMPP server to enable Message Carbons
* See XEP-0280 https://xmpp.org/extensions/xep-0280.html#enabling
*/
if (!this.enable_message_carbons) {
return;
}
var carbons_iq = new Strophe.Builder('iq', {
from: this.connection.jid,
id: 'enablecarbons',
type: 'set'
})
.c('enable', {xmlns: 'urn:xmpp:carbons:2'});
this.connection.send(carbons_iq);
this.connection.addHandler(function(iq) {
//TODO: check if carbons was enabled:
}, null, "iq", null, "enablecarbons");
};
this.onConnected = function () { this.onConnected = function () {
if (this.debug) { if (this.debug) {
this.connection.xmlInput = function (body) { console.log(body); }; this.connection.xmlInput = function (body) { console.log(body); };
@ -577,12 +598,12 @@
this.bare_jid = Strophe.getBareJidFromJid(this.connection.jid); this.bare_jid = Strophe.getBareJidFromJid(this.connection.jid);
this.domain = Strophe.getDomainFromJid(this.connection.jid); this.domain = Strophe.getDomainFromJid(this.connection.jid);
this.features = new this.Features(); this.features = new this.Features();
this.enableCarbons();
this.initStatus($.proxy(function () { this.initStatus($.proxy(function () {
this.initRoster(); this.initRoster();
this.chatboxes.onConnected(); this.chatboxes.onConnected();
this.connection.roster.get(function () {}); this.connection.roster.get(function () {});
this.giveFeedback(__('Online Contacts')); this.giveFeedback(__('Online Contacts'));
if (this.callback) { if (this.callback) {
if (this.connection.service === 'jasmine tests') { if (this.connection.service === 'jasmine tests') {
// XXX: Call back with the internal converse object. This // XXX: Call back with the internal converse object. This
@ -792,9 +813,8 @@
this.save({'otr_status': UNENCRYPTED}); this.save({'otr_status': UNENCRYPTED});
}, },
createMessage: function (message) { createMessage: function ($message) {
var $message = $(message), var body = $message.children('body').text(),
body = $message.children('body').text(),
from = Strophe.getBareJidFromJid($message.attr('from')), from = Strophe.getBareJidFromJid($message.attr('from')),
composing = $message.find('composing'), composing = $message.find('composing'),
delayed = $message.find('delay').length > 0, delayed = $message.find('delay').length > 0,
@ -834,11 +854,11 @@
} }
}, },
receiveMessage: function (message) { receiveMessage: function ($message) {
var $body = $(message).children('body'); var $body = $message.children('body');
var text = ($body.length > 0 ? $body.text() : undefined); var text = ($body.length > 0 ? $body.text() : undefined);
if ((!text) || (!converse.allow_otr)) { if ((!text) || (!converse.allow_otr)) {
return this.createMessage(message); return this.createMessage($message);
} }
if (text.match(/^\?OTRv23?/)) { if (text.match(/^\?OTRv23?/)) {
this.initiateOTR(text); this.initiateOTR(text);
@ -854,7 +874,7 @@
} }
} else { } else {
// Normal unencrypted message. // Normal unencrypted message.
this.createMessage(message); this.createMessage($message);
} }
} }
} }
@ -2412,14 +2432,18 @@
onMessage: function (message) { onMessage: function (message) {
var buddy_jid, $message = $(message), var buddy_jid, $message = $(message),
message_from = $message.attr('from'); message_from = $message.attr('from');
if (message_from == converse.connection.jid) { if (message_from === converse.connection.jid) {
// FIXME: Forwarded messages should be sent to specific resources, // FIXME: Forwarded messages should be sent to specific resources,
// not broadcasted // not broadcasted
return true; return true;
} }
var $forwarded = $message.children('forwarded'); var $forwarded = $message.children('forwarded');
var $received = $message.children('received');
if ($forwarded.length) { if ($forwarded.length) {
$message = $forwarded.children('message'); $message = $forwarded.children('message');
} else if ($received.length && $received.attr('xmlns') === 'urn:xmpp:carbons:2') {
$message = $message.children('received').children('forwarded').children('message');
message_from = $message.attr('from');
} }
var from = Strophe.getBareJidFromJid(message_from), var from = Strophe.getBareJidFromJid(message_from),
to = Strophe.getBareJidFromJid($message.attr('to')), to = Strophe.getBareJidFromJid($message.attr('to')),
@ -2453,7 +2477,7 @@
'url': roster_item.get('url') 'url': roster_item.get('url')
}); });
} }
chatbox.receiveMessage(message); chatbox.receiveMessage($message);
converse.roster.addResource(buddy_jid, resource); converse.roster.addResource(buddy_jid, resource);
converse.emit('onMessage', message); converse.emit('onMessage', message);
return true; return true;

View File

@ -5,10 +5,14 @@ Changelog
---------------- ----------------
* Chat boxes and rooms can now be resized vertically. [jcbrand] * Chat boxes and rooms can now be resized vertically. [jcbrand]
* Chat boxes and rooms can be minimized. [jcbrand]
* Upgraded many dependencies to their latest versions. [jcbrand] * Upgraded many dependencies to their latest versions. [jcbrand]
* Add new configuration setting `forward_messages <https://conversejs.org/docs/html/index.html#forward_messages>`_ * Add new configuration setting `forward_messages <https://conversejs.org/docs/html/index.html#forward_messages>`_
Message forwarding was before default behavior but is now optional (and disabled by default). [jcbrand] Message forwarding was before default behavior but is now optional (and disabled by default).
[jcbrand]
* #71 Chat boxes and rooms can be minimized. [jcbrand]
* #132 Support for `XEP-0280: Message Carbons <https://xmpp.org/extensions/xep-0280.html'>`_.
Configured via `enable_message_carbons <https://conversejs.org/docs/html/index.html#enable_message_carbons>`_
[hejazee]
0.7.4 (2014-03-05) 0.7.4 (2014-03-05)
------------------ ------------------

View File

@ -968,6 +968,13 @@ Default = ``false``
If set to true, debugging output will be logged to the browser console. If set to true, debugging output will be logged to the browser console.
enable_message_carbons
----------------------
Default = ``false``
Support for `XEP-0280: Message Carbons <https://xmpp.org/extensions/xep-0280.html>`_
expose_rid_and_sid expose_rid_and_sid
------------------ ------------------