Bladeren bron

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

JC Brand 3 jaren geleden
bovenliggende
commit
0d0ee294ad
2 gewijzigde bestanden met toevoegingen van 16 en 14 verwijderingen
  1. 14 12
      src/headless/plugins/vcard/api.js
  2. 2 2
      src/headless/plugins/vcard/utils.js

+ 14 - 12
src/headless/plugins/vcard/api.js

@@ -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) {

+ 2 - 2
src/headless/plugins/vcard/utils.js

@@ -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()
         }
     }