Sfoglia il codice sorgente

MAM: Prevent multiple simultaneous queries when scrolling up

JC Brand 4 anni fa
parent
commit
b071a0e22f
1 ha cambiato i file con 14 aggiunte e 4 eliminazioni
  1. 14 4
      src/plugins/mam-views/utils.js

+ 14 - 4
src/plugins/mam-views/utils.js

@@ -1,4 +1,5 @@
 import MAMPlaceholderMessage from '@converse/headless/plugins/mam/placeholder.js';
+import log from '@converse/headless/log.js';
 import { _converse, api } from '@converse/headless/core';
 import { fetchArchivedMessages } from '@converse/headless/plugins/mam/utils';
 import { html } from 'lit-html';
@@ -13,6 +14,9 @@ export function getPlaceholderTemplate (message, tpl) {
 }
 
 export async function fetchMessagesOnScrollUp (view) {
+    if (view.model.ui.get('chat-content-spinner-top')) {
+        return;
+    }
     if (view.model.messages.length) {
         const is_groupchat = view.model.get('type') === _converse.CHATROOMS_TYPE;
         const oldest_message = view.model.getOldestMessage();
@@ -20,10 +24,16 @@ export async function fetchMessagesOnScrollUp (view) {
             const by_jid = is_groupchat ? view.model.get('jid') : _converse.bare_jid;
             const stanza_id = oldest_message && oldest_message.get(`stanza_id ${by_jid}`);
             view.model.ui.set('chat-content-spinner-top', true);
-            if (stanza_id) {
-                await fetchArchivedMessages(view.model, { 'before': stanza_id });
-            } else {
-                await fetchArchivedMessages(view.model, { 'end': oldest_message.get('time') });
+            try {
+                if (stanza_id) {
+                    await fetchArchivedMessages(view.model, { 'before': stanza_id });
+                } else {
+                    await fetchArchivedMessages(view.model, { 'end': oldest_message.get('time') });
+                }
+            } catch (e) {
+                log.error(e);
+                view.model.ui.set('chat-content-spinner-top', false);
+                return;
             }
             if (api.settings.get('allow_url_history_change')) {
                 _converse.router.history.navigate(`#${oldest_message.get('msgid')}`);