Don't fetch vcard if failed attempt was already made today

This commit is contained in:
JC Brand 2022-01-16 19:37:20 +01:00
parent 7c51147023
commit 0d0ee294ad
2 changed files with 16 additions and 14 deletions

View File

@ -13,7 +13,7 @@ export default {
* @namespace _converse.api.vcard
* @memberOf _converse.api
*/
'vcard': {
vcard: {
/**
* Enables setting new values for a VCard.
*
@ -74,8 +74,9 @@ export default {
* chat or chatroom occupant).
*
* @example
* _converse.api.waitUntil('rosterContactsFetched').then(() => {
* _converse.api.vcard.get('someone@example.org').then(
* const { api } = _converse;
* api.waitUntil('rosterContactsFetched').then(() => {
* api.vcard.get('someone@example.org').then(
* (vcard) => {
* // Do something with the vcard...
* }
@ -84,16 +85,16 @@ export default {
*/
get (model, force) {
if (typeof model === 'string') {
return getVCard(_converse, model);
} else if (force ||
!model.get('vcard_updated') ||
!dayjs(model.get('vcard_error')).isSame(new Date(), "day")) {
return getVCard(model);
}
const error_date = model.get('vcard_error');
const already_tried_today = error_date && dayjs(error_date).isSame(new Date(), "day");
if (force || !model.get('vcard_updated') && !already_tried_today) {
const jid = model.get('jid');
if (!jid) {
log.error("No JID to get vcard for");
}
return getVCard(_converse, jid);
return getVCard(jid);
} else {
return Promise.resolve({});
}
@ -110,9 +111,10 @@ export default {
* fetched again even if it's been fetched before.
* @returns {promise} A promise which resolves once the update has completed.
* @example
* _converse.api.waitUntil('rosterContactsFetched').then(async () => {
* const chatbox = await _converse.chatboxes.getChatBox('someone@example.org');
* _converse.api.vcard.update(chatbox);
* const { api } = _converse;
* api.waitUntil('rosterContactsFetched').then(async () => {
* const chatbox = await api.chats.get('someone@example.org');
* api.vcard.update(chatbox);
* });
*/
async update (model, force) {

View File

@ -140,15 +140,15 @@ export function clearVCardsSession () {
}
}
export async function getVCard (_converse, jid) {
export async function getVCard (jid) {
const to = Strophe.getBareJidFromJid(jid) === _converse.bare_jid ? null : jid;
let iq;
try {
iq = await api.sendIQ(createStanza("get", to))
} catch (iq) {
return {
jid,
'stanza': iq,
'jid': jid,
'vcard_error': (new Date()).toISOString()
}
}