|
48 | 48 | _converse.roster = new _converse.RosterContacts();
|
49 | 49 | _converse.roster.browserStorage = new Backbone.BrowserStorage[_converse.storage](
|
50 | 50 | b64_sha1(`converse.contacts-${_converse.bare_jid}`));
|
| 51 | + |
| 52 | + _converse.roster.data = new Backbone.Model(); |
| 53 | + const id = b64_sha1(`converse-roster-model-${_converse.bare_jid}`); |
| 54 | + _converse.roster.data.id = id; |
| 55 | + _converse.roster.data.browserStorage = new Backbone.BrowserStorage[_converse.storage](id); |
| 56 | + _converse.roster.data.fetch(); |
| 57 | + |
51 | 58 | _converse.rostergroups = new _converse.RosterGroups();
|
52 | 59 | _converse.rostergroups.browserStorage = new Backbone.BrowserStorage[_converse.storage](
|
53 | 60 | b64_sha1(`converse.roster.groups${_converse.bare_jid}`));
|
|
330 | 337 |
|
331 | 338 | onConnected () {
|
332 | 339 | /* Called as soon as the connection has been established
|
333 |
| - * (either after initial login, or after reconnection). |
334 |
| - * |
335 |
| - * Use the opportunity to register stanza handlers. |
336 |
| - */ |
| 340 | + * (either after initial login, or after reconnection). |
| 341 | + * |
| 342 | + * Use the opportunity to register stanza handlers. |
| 343 | + */ |
337 | 344 | this.registerRosterHandler();
|
338 | 345 | this.registerRosterXHandler();
|
339 | 346 | },
|
340 | 347 |
|
341 | 348 | registerRosterHandler () {
|
342 | 349 | /* Register a handler for roster IQ "set" stanzas, which update
|
343 |
| - * roster contacts. |
344 |
| - */ |
| 350 | + * roster contacts. |
| 351 | + */ |
345 | 352 | _converse.connection.addHandler((iq) => {
|
346 | 353 | _converse.roster.onRosterPush(iq);
|
347 | 354 | return true;
|
|
350 | 357 |
|
351 | 358 | registerRosterXHandler () {
|
352 | 359 | /* Register a handler for RosterX message stanzas, which are
|
353 |
| - * used to suggest roster contacts to a user. |
354 |
| - */ |
| 360 | + * used to suggest roster contacts to a user. |
| 361 | + */ |
355 | 362 | let t = 0;
|
356 | 363 | _converse.connection.addHandler(
|
357 | 364 | function (msg) {
|
|
560 | 567 | /* An IQ stanza containing the roster has been received from
|
561 | 568 | * the XMPP server.
|
562 | 569 | */
|
563 |
| - const items = sizzle(`query[xmlns="${Strophe.NS.ROSTER}"] item`, iq); |
564 |
| - _.each(items, this.updateContact.bind(this)); |
| 570 | + const query = sizzle(`query[xmlns="${Strophe.NS.ROSTER}"]`, iq).pop(), |
| 571 | + items = sizzle(`item`, query); |
| 572 | + _.each(items, (item) => this.updateContact(item)); |
| 573 | + this.data.save('version', query.getAttribute('ver')); |
565 | 574 | _converse.emit('roster', iq);
|
566 | 575 | },
|
567 | 576 |
|
|
0 commit comments