diff --git a/conversations.php b/conversations.php index 4819592..d111470 100644 --- a/conversations.php +++ b/conversations.php @@ -1034,6 +1034,8 @@ this._stagedMessages = []; // Last message timestamp seen (for delta polling) this._latestMessage = null; + // Preloaded messages cache used when we explicitly fetch before opening a conversation + this._preloadedMessages = null; // Removed: automatic "Nuevos mensajes" indicator — we always reload full conversation now // this._lastRenderMessageCount = 0; @@ -1213,8 +1215,25 @@ } else if (userId) { const conv = this.conversations.find(c => c.user_id == userId); if (conv) { + // Prefetch messages then open conversation using preloaded data to avoid double-fetch + try { + const url = `get_user_messages.php?user_id=${encodeURIComponent(userId)}&limit=${this.messageLimit}`; + const resp = await this.apiCall(url); + if (resp && resp.success) { + this._preloadedMessages = { userId: userId, resp: resp }; + } + } catch (e) { console.warn('Prefetch messages failed', e); } + this.openConversation(conv.user_id, conv.name, conv.phone_number); } else { + try { + const url = `get_user_messages.php?user_id=${encodeURIComponent(userId)}&limit=${this.messageLimit}`; + const resp = await this.apiCall(url); + if (resp && resp.success) { + this._preloadedMessages = { userId: userId, resp: resp }; + } + } catch (e) { console.warn('Prefetch messages failed', e); } + this.openConversation(userId, 'Usuario', ''); } } @@ -2723,9 +2742,18 @@ try { // Not sending 'before' param due to unstable server behavior in some cases. // The server-side pagination/fallback and client-side dedupe should handle continuity. - let url = `get_user_messages.php?user_id=${userId}&limit=${this.messageLimit}`; + // If we prefetched data (e.g. from notification click), use it to avoid double fetch + let data = null; + if (initial && this._preloadedMessages && this._preloadedMessages.userId == userId && this._preloadedMessages.resp) { + data = this._preloadedMessages.resp; + // clear preloaded cache + this._preloadedMessages = null; + if (console && console.debug) console.debug('Using preloaded messages for user', userId); + } else { + let url = `get_user_messages.php?user_id=${userId}&limit=${this.messageLimit}`; + data = await this.apiCall(url); + } - const data = await this.apiCall(url); if (!data) throw new Error('No autorizado o error en la petición'); let messages = [];