Commit fbef370b authored by JC Brand's avatar JC Brand

Listen for new room bookmarks pushed from the user's PEP service

parent 5f3761dc
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
### New features ### New features
- XEP-0382 Spoiler Messages (currently only for private chats) - XEP-0382 Spoiler Messages (currently only for private chats)
- Listen for new room bookmarks pushed from the user's PEP service.
### API changes ### API changes
- New API method `_converse.disco.getIdentity` to check whether a JID has a given identity. - New API method `_converse.disco.getIdentity` to check whether a JID has a given identity.
......
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
} (this, function (jasmine, $, converse, utils, mock, test_utils) { } (this, function (jasmine, $, converse, utils, mock, test_utils) {
"use strict"; "use strict";
var $iq = converse.env.$iq, var $iq = converse.env.$iq,
$msg = converse.env.$msg,
Backbone = converse.env.Backbone, Backbone = converse.env.Backbone,
Strophe = converse.env.Strophe, Strophe = converse.env.Strophe,
_ = converse.env._, _ = converse.env._,
...@@ -278,8 +279,15 @@ ...@@ -278,8 +279,15 @@
describe("Bookmarks", function () { describe("Bookmarks", function () {
xit("can be pushed from the XMPP server", mock.initConverse(function (_converse) { it("can be pushed from the XMPP server", mock.initConverseWithPromises(
// TODO ['send'], ['rosterGroupsFetched', 'connected'], {},
function (done, _converse) {
test_utils.openControlBox().openRoomsPanel(_converse);
test_utils.waitUntil(function () {
return _converse.bookmarks;
}, 300).then(function () {
/* The stored data is automatically pushed to all of the user's /* The stored data is automatically pushed to all of the user's
* connected resources. * connected resources.
* *
...@@ -303,26 +311,26 @@ ...@@ -303,26 +311,26 @@
* </items> * </items>
* </event> * </event>
* </message> * </message>
* <message from='juliet@capulet.lit'
* to='juliet@capulet.lit/chamber'
* type='headline'
* id='rnfoo2'>
* <event xmlns='http://jabber.org/protocol/pubsub#event'>
* <items node='storage:bookmarks'>
* <item id='current'>
* <storage xmlns='storage:bookmarks'>
* <conference name='The Play&apos;s the Thing'
* autojoin='true'
* jid='theplay@conference.shakespeare.lit'>
* <nick>JC</nick>
* </conference>
* </storage>
* </item>
* </items>
* </event>
* </message>
*/ */
var stanza = $msg({
'from': 'dummy@localhost',
'to': 'dummy@localhost/resource',
'type': 'headline',
'id': 'rnfoo1'
}).c('event', {'xmlns': 'http://jabber.org/protocol/pubsub#event'})
.c('items', {'node': 'storage:bookmarks'})
.c('item', {'id': 'current'})
.c('storage', {'xmlns': 'storage:bookmarks'})
.c('conference', {'name': 'The Play&apos;s the Thing',
'autojoin': 'true',
'jid':'theplay@conference.shakespeare.lit'})
.c('nick').t('JC');
_converse.connection._dataRecv(test_utils.createRequest(stanza));
expect(_converse.bookmarks.length).toBe(1);
expect(_converse.chatboxviews.get('theplay@conference.shakespeare.lit')).not.toBeUndefined();
done();
});
})); }));
it("can be retrieved from the XMPP server", mock.initConverseWithPromises( it("can be retrieved from the XMPP server", mock.initConverseWithPromises(
......
...@@ -370,10 +370,13 @@ ...@@ -370,10 +370,13 @@
} }
}, },
onBookmarksReceived (deferred, iq) { createBookmarksFromStanza (stanza) {
const bookmarks = sizzle( const bookmarks = sizzle(
'items[node="storage:bookmarks"] item[id="current"] storage conference', 'items[node="storage:bookmarks"] '+
iq 'item#current '+
'storage[xmlns="storage:bookmarks"] '+
'conference',
stanza
) )
_.forEach(bookmarks, (bookmark) => { _.forEach(bookmarks, (bookmark) => {
this.create({ this.create({
...@@ -383,6 +386,10 @@ ...@@ -383,6 +386,10 @@
'nick': bookmark.querySelector('nick').textContent 'nick': bookmark.querySelector('nick').textContent
}); });
}); });
},
onBookmarksReceived (deferred, iq) {
this.createBookmarksFromStanza(iq);
if (!_.isUndefined(deferred)) { if (!_.isUndefined(deferred)) {
return deferred.resolve(); return deferred.resolve();
} }
...@@ -557,6 +564,16 @@ ...@@ -557,6 +564,16 @@
]).then(initBookmarks) ]).then(initBookmarks)
.catch(_.partial(_converse.log, _, Strophe.LogLevel.FATAL)); .catch(_.partial(_converse.log, _, Strophe.LogLevel.FATAL));
_converse.on('connected', () => {
// Add a handler for bookmarks pushed from other connected clients
// (from the same user obviously)
_converse.connection.addHandler((message) => {
if (message.querySelector('event[xmlns="'+Strophe.NS.PUBSUB+'#event"]')) {
_converse.bookmarks.createBookmarksFromStanza(message);
}
}, null, 'message', 'headline', null, _converse.bare_jid);
});
const afterReconnection = function () { const afterReconnection = function () {
if (!_converse.allow_bookmarks) { if (!_converse.allow_bookmarks) {
return; return;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment