Add new api method vcard.update
This commit is contained in:
parent
f9aa75b69e
commit
b5a516e044
|
@ -14,6 +14,7 @@
|
||||||
- `_converse.api.vcard.get` now also accepts a `Backbone.Model` instance and
|
- `_converse.api.vcard.get` now also accepts a `Backbone.Model` instance and
|
||||||
has an additional `force` parameter to force fetching the vcard even if it
|
has an additional `force` parameter to force fetching the vcard even if it
|
||||||
has already been fetched.
|
has already been fetched.
|
||||||
|
- New API method `_converse.api.vcard.update`.
|
||||||
|
|
||||||
## UI changes
|
## UI changes
|
||||||
|
|
||||||
|
|
|
@ -1292,3 +1292,30 @@ Example:
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
update
|
||||||
|
~~~~~~
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
|
||||||
|
* ``model`` a `Backbone.Model` instance
|
||||||
|
* ``force`` (optional), a boolean indicating whether the vcard should be
|
||||||
|
fetched again even if it's been fetched before.
|
||||||
|
|
||||||
|
Fetches the VCard associated with a particular `Backbone.Model` instance
|
||||||
|
(by using its `jid` or `muc_jid` attribute) and then updates the model with the
|
||||||
|
returned VCard data.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
.. code-block:: javascript
|
||||||
|
|
||||||
|
converse.plugins.add('myplugin', {
|
||||||
|
initialize: function () {
|
||||||
|
|
||||||
|
_converse.api.waitUntil('rosterContactsFetched').then(() => {
|
||||||
|
const chatbox = _converse.chatboxes.getChatBox('someone@example.org');
|
||||||
|
_converse.api.vcard.update(chatbox);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
|
@ -16,35 +16,18 @@
|
||||||
|
|
||||||
function onVCardData (_converse, jid, iq, callback) {
|
function onVCardData (_converse, jid, iq, callback) {
|
||||||
const vcard = iq.querySelector('vCard');
|
const vcard = iq.querySelector('vCard');
|
||||||
if (_.isNull(vcard)) {
|
let result = {};
|
||||||
// Some servers return an empty IQ
|
if (!_.isNull(vcard)) {
|
||||||
return onVCardError(_converse, jid, iq, callback);
|
result = {
|
||||||
}
|
'stanza': iq,
|
||||||
const img_type = _.get(vcard.querySelector('TYPE'), 'textContent'),
|
'fullname': _.get(vcard.querySelector('FN'), 'textContent'),
|
||||||
img = _.get(vcard.querySelector('BINVAL'), 'textContent'),
|
'image': _.get(vcard.querySelector('BINVAL'), 'textContent'),
|
||||||
url = _.get(vcard.querySelector('URL'), 'textContent'),
|
'image_type': _.get(vcard.querySelector('TYPE'), 'textContent'),
|
||||||
fullname = _.get(vcard.querySelector('FN'), 'textContent');
|
'url': _.get(vcard.querySelector('URL'), 'textContent')
|
||||||
|
};
|
||||||
if (!u.isSameBareJID(jid, _converse.bare_jid)) {
|
|
||||||
const contact = _converse.roster.get(jid);
|
|
||||||
if (contact) {
|
|
||||||
contact.save({
|
|
||||||
'fullname': fullname || _.get(contact, 'fullname', jid),
|
|
||||||
'image_type': img_type,
|
|
||||||
'image': img,
|
|
||||||
'url': url,
|
|
||||||
'vcard_updated': moment().format()
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (callback) {
|
if (callback) {
|
||||||
callback({
|
callback(result);
|
||||||
'stanza': iq,
|
|
||||||
'fullname': fullname,
|
|
||||||
'image': img,
|
|
||||||
'image_type': img_type,
|
|
||||||
'url': url
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -78,20 +61,11 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateChatBoxFromVCard (_converse, jid) {
|
function updateChatBoxFromVCard (_converse, jid) {
|
||||||
_converse.api.vcard.get(jid)
|
const chatbox = _converse.chatboxes.getChatBox(jid);
|
||||||
.then((vcard) => {
|
if (_.isNil(chatbox)) {
|
||||||
const chatbox = _converse.chatboxes.getChatBox(jid);
|
return;
|
||||||
if (!_.isUndefined(chatbox)) {
|
}
|
||||||
chatbox.save(_.pick(vcard, ['fullname', 'url', 'image_type', 'image', 'vcard_updated']));
|
_converse.api.vcard.update(chatbox);
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch((e) => {
|
|
||||||
_converse.log(e, Strophe.LogLevel.ERROR);
|
|
||||||
_converse.log(
|
|
||||||
"updateChatBoxFromVCard: Error occured while attempting to update chatbox with VCard data",
|
|
||||||
Strophe.LogLevel.ERROR
|
|
||||||
);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -175,15 +149,14 @@
|
||||||
});
|
});
|
||||||
|
|
||||||
_converse.on('initialized', () => {
|
_converse.on('initialized', () => {
|
||||||
_converse.roster.on("add", (contact) => _converse.api.vcard.get(contact));
|
_converse.roster.on("add", (contact) => _converse.api.vcard.update(contact));
|
||||||
});
|
});
|
||||||
|
|
||||||
_converse.on('statusInitialized', function fetchOwnVCard () {
|
_converse.on('statusInitialized', function fetchOwnVCard () {
|
||||||
_converse.api.disco.supports(Strophe.NS.VCARD, _converse.domain)
|
_converse.api.disco.supports(Strophe.NS.VCARD, _converse.domain)
|
||||||
.then((result) => {
|
.then((result) => {
|
||||||
if (result.length) {
|
if (result.length) {
|
||||||
_converse.api.vcard.get(_converse.xmppstatus)
|
_converse.api.vcard.update(_converse.xmppstatus);
|
||||||
.then((vcard) => _converse.xmppstatus.save(vcard));
|
|
||||||
}})
|
}})
|
||||||
.catch(_.partial(_converse.log, _, Strophe.LogLevel.FATAL));
|
.catch(_.partial(_converse.log, _, Strophe.LogLevel.FATAL));
|
||||||
});
|
});
|
||||||
|
@ -200,8 +173,17 @@
|
||||||
}
|
}
|
||||||
return getVCard(_converse, jid);
|
return getVCard(_converse, jid);
|
||||||
} else {
|
} else {
|
||||||
return {};
|
return Promise.resolve({});
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
'update' (model, force) {
|
||||||
|
this.get(model, force).then((vcard) => {
|
||||||
|
model.save(_.extend(
|
||||||
|
_.pick(vcard, ['fullname', 'url', 'image_type', 'image', 'vcard_updated']),
|
||||||
|
{'vcard_updated': moment().format()}
|
||||||
|
));
|
||||||
|
}).catch(_.partial(_converse.log, _, Strophe.LogLevel.ERROR));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue
Block a user