From f5a9fe46c41579e8cd566d0931a245950b54ef9f Mon Sep 17 00:00:00 2001 From: PhilReact Date: Sun, 10 Sep 2023 11:37:01 -0500 Subject: [PATCH] remove logs , imporve replace msgs efficiency --- plugins/plugins/core/components/ChatPage.js | 80 ++-------- .../plugins/core/components/ChatScroller.js | 29 +--- .../core/messaging/q-chat/q-chat.src.js | 6 +- .../plugins/utils/replace-messages-edited.js | 150 +++++++----------- 4 files changed, 73 insertions(+), 192 deletions(-) diff --git a/plugins/plugins/core/components/ChatPage.js b/plugins/plugins/core/components/ChatPage.js index dee271f1..85948ccd 100644 --- a/plugins/plugins/core/components/ChatPage.js +++ b/plugins/plugins/core/components/ChatPage.js @@ -55,8 +55,10 @@ const parentEpml = new Epml({ type: 'WINDOW', source: window.parent }) export const queue = new RequestQueue(); -export const chatLimit = 40 -export const totalMsgCount = 120 +export const chatLimit = 20 +export const chatLimitHalf = 10 + +export const totalMsgCount = 60 class ChatPage extends LitElement { static get properties() { return { @@ -2142,7 +2144,6 @@ class ChatPage extends LitElement { } async goToRepliedMessage(message, clickedOnMessage) { - console.log({message}) const findMessage = this.shadowRoot.querySelector('chat-scroller').shadowRoot.getElementById(message.signature) if (findMessage) { @@ -2173,9 +2174,7 @@ class ChatPage extends LitElement { await this.getUpdateComplete() const marginElements = Array.from(this.shadowRoot.querySelector('chat-scroller').shadowRoot.querySelectorAll('message-template')) - console.log({marginElements}) const findMessage2 = marginElements.find((item) => item.messageObj.signature === message.signature) || marginElements.find((item) => item.messageObj.originalSignature === message.signature) || marginElements.find((item) => item.messageObj.signature === message.originalSignature) || marginElements.find((item) => item.messageObj.originalSignature === message.originalSignature) - console.log({findMessage2}, message.signature) if (findMessage2) { findMessage2.scrollIntoView({ block: 'center' }) } @@ -2410,26 +2409,9 @@ class ChatPage extends LitElement { document.querySelector('html').setAttribute('theme', this.theme) }) - // parentEpml.ready().then(() => { - // parentEpml.subscribe('selected_address', async selectedAddress => { - // this.selectedAddress = {} - // selectedAddress = JSON.parse(selectedAddress) - // if (!selectedAddress || Object.entries(selectedAddress).length === 0) return - // this.selectedAddress = selectedAddress - // }) - - // }) + this.lastReadMessageTimestamp = await chatLastSeen.getItem(this.chatId) || 0 - // parentEpml.subscribe('chat_last_seen', async chatList => { - // const parsedChatList = JSON.parse(chatList) - // console.log({parsedChatList}, this.chatId) - // const findChatSeen = parsedChatList.find(chat=> chat.key === this.chatId) - // console.log({findChatSeen}) - // if(findChatSeen && this.lastReadMessageTimestamp !== findChatSeen.timestamp){ - // this.lastReadMessageTimestamp = findChatSeen.timestamp - - // } - // }) + parentEpml.imReady() const isEnabledChatEnter = localStorage.getItem('isEnabledChatEnter') @@ -2528,7 +2510,6 @@ class ChatPage extends LitElement { } renderChatScroller() { - console.log('clearUpdateMessageHashmap', Object.keys(this.updateMessageHash).length) return html` { - console.log('e',e) rej() } @@ -2639,7 +2619,6 @@ class ChatPage extends LitElement { addToUpdateMessageHashmap: this.addToUpdateMessageHashmap })); - console.log({decodeMsgs}) let list = [...decodeMsgs] @@ -2648,7 +2627,6 @@ class ChatPage extends LitElement { this.webWorkerSortMessages.postMessage({list}); this.webWorkerSortMessages.onmessage = e => { - console.log('e',e) list = e.data res() @@ -2685,7 +2663,6 @@ class ChatPage extends LitElement { } this.webWorkerDecodeMessages.onerror = e => { - console.log('e',e) rej() } @@ -2700,7 +2677,6 @@ class ChatPage extends LitElement { addToUpdateMessageHashmap: this.addToUpdateMessageHashmap })); - console.log({decodeMsgs}) let list = [...decodeMsgs] @@ -2709,7 +2685,6 @@ class ChatPage extends LitElement { this.webWorkerSortMessages.postMessage({list}); this.webWorkerSortMessages.onmessage = e => { - console.log('e',e) list = e.data res() @@ -2745,7 +2720,6 @@ class ChatPage extends LitElement { } this.webWorkerDecodeMessages.onerror = e => { - console.log('e',e) rej() } @@ -2767,7 +2741,6 @@ class ChatPage extends LitElement { this.webWorkerSortMessages.postMessage({list}); this.webWorkerSortMessages.onmessage = e => { - console.log('e',e) list = e.data res() @@ -2808,7 +2781,6 @@ class ChatPage extends LitElement { } this.webWorkerDecodeMessages.onerror = e => { - console.log('e',e) rej() } @@ -2830,7 +2802,6 @@ class ChatPage extends LitElement { this.webWorkerSortMessages.postMessage({list}); this.webWorkerSortMessages.onmessage = e => { - console.log('e',e) list = e.data res() @@ -2872,7 +2843,6 @@ class ChatPage extends LitElement { } this.webWorkerDecodeMessages.onerror = e => { - console.log('e',e) rej() } @@ -2895,7 +2865,6 @@ class ChatPage extends LitElement { this.webWorkerSortMessages.postMessage({list}); this.webWorkerSortMessages.onmessage = e => { - console.log('e',e) list = e.data res() @@ -2933,7 +2902,6 @@ class ChatPage extends LitElement { } this.webWorkerDecodeMessages.onerror = e => { - console.log('e',e) rej() } @@ -2958,7 +2926,6 @@ class ChatPage extends LitElement { this.webWorkerSortMessages.postMessage({list}); this.webWorkerSortMessages.onmessage = e => { - console.log('e',e) list = e.data res() @@ -3002,7 +2969,6 @@ class ChatPage extends LitElement { } async clearUpdateMessageHashmap(){ - console.log('hello clear') this.updateMessageHash = {} this.requestUpdate() } @@ -3046,7 +3012,6 @@ class ChatPage extends LitElement { } this.webWorkerDecodeMessages.onerror = e => { - console.log('e',e) rej() } @@ -3078,7 +3043,6 @@ class ChatPage extends LitElement { this.webWorkerSortMessages.postMessage({list}); this.webWorkerSortMessages.onmessage = e => { - console.log('e',e) list = e.data res() @@ -3141,23 +3105,6 @@ class ChatPage extends LitElement { } - - // let list = [...this.messagesRendered] - - // await new Promise((res, rej) => { - - // this.webWorkerSortMessages.postMessage({list}); - - // this.webWorkerSortMessages.onmessage = e => { - // console.log('e',e) - - // list = e.data - // res() - - // } - // }) - - // this.messagesRendered = list } } @@ -3329,27 +3276,24 @@ class ChatPage extends LitElement { let isUnread = false const chatId = this.chatId - console.log('this.chatHeads', this.chatHeads) const findContent = this.chatHeads.find((item)=> item.url === chatId) const chatInfoTimestamp = findContent.timestamp || 0 const lastReadMessageTimestamp = this.lastReadMessageTimestamp - console.log({lastReadMessageTimestamp, chatInfoTimestamp}) if(lastReadMessageTimestamp && chatInfoTimestamp){ if(lastReadMessageTimestamp < chatInfoTimestamp){ isUnread = true } } - console.log({isUnread}) if(isUnread){ const getInitialMessagesBefore = await parentEpml.request('apiCall', { type: 'api', - url: `/chat/messages?involving=${window.parent.reduxStore.getState().app.selectedAddress.address}&involving=${cid}&limit=${20}&reverse=true&before=${lastReadMessageTimestamp}&haschatreference=false&encoding=BASE64` + url: `/chat/messages?involving=${window.parent.reduxStore.getState().app.selectedAddress.address}&involving=${cid}&limit=${chatLimitHalf}&reverse=true&before=${lastReadMessageTimestamp}&haschatreference=false&encoding=BASE64` }) const getInitialMessagesAfter = await parentEpml.request('apiCall', { type: 'api', - url: `/chat/messages?involving=${window.parent.reduxStore.getState().app.selectedAddress.address}&involving=${cid}&limit=${20}&reverse=false&after=${lastReadMessageTimestamp - 1000}&haschatreference=false&encoding=BASE64` + url: `/chat/messages?involving=${window.parent.reduxStore.getState().app.selectedAddress.address}&involving=${cid}&limit=${chatLimitHalf}&reverse=false&after=${lastReadMessageTimestamp - 1000}&haschatreference=false&encoding=BASE64` }) getInitialMessages = [...getInitialMessagesBefore, ...getInitialMessagesAfter] } else { @@ -3450,27 +3394,24 @@ class ChatPage extends LitElement { let isUnread = false const chatId = this.chatId - console.log('this.chatHeads', this.chatHeads) const findContent = this.chatHeads.find((item)=> item.url === chatId) const chatInfoTimestamp = findContent.timestamp || 0 - console.log({lastReadMessageTimestamp, chatInfoTimestamp}) if(lastReadMessageTimestamp && chatInfoTimestamp){ if(lastReadMessageTimestamp < chatInfoTimestamp){ isUnread = true } } - console.log({isUnread}, '2') if(isUnread){ const getInitialMessagesBefore = await parentEpml.request('apiCall', { type: 'api', - url: `/chat/messages?txGroupId=${groupId}&limit=${20}&reverse=true&before=${lastReadMessageTimestamp}&haschatreference=false&encoding=BASE64` + url: `/chat/messages?txGroupId=${groupId}&limit=${chatLimitHalf}&reverse=true&before=${lastReadMessageTimestamp}&haschatreference=false&encoding=BASE64` }) const getInitialMessagesAfter = await parentEpml.request('apiCall', { type: 'api', - url: `/chat/messages?txGroupId=${groupId}&limit=${20}&reverse=false&after=${lastReadMessageTimestamp - 1000}&haschatreference=false&encoding=BASE64` + url: `/chat/messages?txGroupId=${groupId}&limit=${chatLimitHalf}&reverse=false&after=${lastReadMessageTimestamp - 1000}&haschatreference=false&encoding=BASE64` }) getInitialMessages = [...getInitialMessagesBefore, ...getInitialMessagesAfter] } else { @@ -4295,7 +4236,6 @@ class ChatPage extends LitElement { const _computePow = async (chatBytes, isForward) => { const difficulty = this.balance < 4 ? 18 : 8 - console.log({difficulty}) const path = window.parent.location.origin + '/memory-pow/memory-pow.wasm.full' let worker diff --git a/plugins/plugins/core/components/ChatScroller.js b/plugins/plugins/core/components/ChatScroller.js index 33b4ffc6..d5a78398 100644 --- a/plugins/plugins/core/components/ChatScroller.js +++ b/plugins/plugins/core/components/ChatScroller.js @@ -320,7 +320,6 @@ class ChatScroller extends LitElement { async newListMessages(newMessages, message) { - console.log('sup') let data = [] const copy = [...newMessages] copy.forEach(newMessage => { @@ -337,7 +336,6 @@ class ChatScroller extends LitElement { }); - console.log({data}) this.messagesToRender = data this.clearLoaders() this.requestUpdate() @@ -355,7 +353,6 @@ class ChatScroller extends LitElement { async newListMessagesUnreadMessages(newMessages, message, lastReadMessageTimestamp) { const viewElement = this.shadowRoot.querySelector("#viewElement"); - console.log('sup', lastReadMessageTimestamp); let data = []; const copy = [...newMessages]; @@ -370,7 +367,6 @@ class ChatScroller extends LitElement { // Check if this is the message before which the divider should be placed if (!dividerPlaced && newMessage.timestamp <= lastReadMessageTimestamp) { - console.log('true true') newMessage.isDivider = true; dividerPlaced = true; // Ensure the divider is only added once break; // Exit once the divider is placed @@ -390,7 +386,6 @@ class ChatScroller extends LitElement { } }); - console.log({ data }); this.messagesToRender = data; this.clearLoaders(); this.requestUpdate(); @@ -415,7 +410,6 @@ class ChatScroller extends LitElement { previousScrollHeight = viewElement.scrollHeight; - console.log('sup', type); const copy = [...this.messagesToRender] for (const newMessage of newMessages) { @@ -453,9 +447,7 @@ class ChatScroller extends LitElement { } this.messagesToRender = copy this.requestUpdate(); - console.log("Before waiting for updateComplete"); await this.updateComplete; - console.log("After waiting for updateComplete"); if (type === 'initial') { @@ -469,7 +461,6 @@ class ChatScroller extends LitElement { async prependOldMessages(oldMessages) { - console.log('2', { oldMessages }); if (!this.messagesToRender) this.messagesToRender = []; // Ensure it's initialized let currentMessageGroup = null; @@ -546,22 +537,9 @@ class ChatScroller extends LitElement { this.messagesToRender = newMessagesToRender; this.requestUpdate(); - console.log('await this.updateComplete 1') await this.updateComplete; - console.log('await this.updateComplete 2') - // Adjust scroll position based on the difference in scroll heights - // await new Promise((res)=> { - // setTimeout(()=> { - // res() - // }, 5000) - // }) - // const newScrollHeight = viewElement.scrollHeight; - // viewElement.scrollTop = previousScrollTop + (newScrollHeight - previousScrollHeight); - // viewElement.scrollTop = viewElement.scrollHeight - viewElement.clientHeight; - // const newScrollHeight = viewElement.scrollHeight; - // viewElement.scrollTop = viewElement.scrollTop + (newScrollHeight - viewElement.scrollHeight); - // If the user was at the bottom before the update, keep them at the bottom + if (isUserAtBottom) { viewElement.scrollTop = viewElement.scrollHeight - viewElement.clientHeight; } else { @@ -583,7 +561,6 @@ class ChatScroller extends LitElement { const viewElement = this.shadowRoot.querySelector("#viewElement"); previousScrollTop = viewElement.scrollTop; previousScrollHeight = viewElement.scrollHeight; - console.log({updatedMessagesArray}, this.messagesToRender) for (let group of this.messagesToRender) { for (let i = 0; i < group.messages.length; i++) { const update = updatedMessagesArray.find(updatedMessage => ((updatedMessage.chatReference === group.messages[i].signature) || (updatedMessage.chatReference === group.messages[i].originalSignature))); @@ -604,7 +581,6 @@ class ChatScroller extends LitElement { async updated(changedProperties) { if (changedProperties && changedProperties.has('messages')) { - console.log({changedProperties}, this.messages) if (this.messages.type === 'initial') { this.addNewMessages(this.messages.messages, 'initial') @@ -738,7 +714,6 @@ class ChatScroller extends LitElement { } shouldUpdate(changedProperties) { - console.log({changedProperties}) if (changedProperties.has('isLoadingMessages')) { return true } @@ -758,7 +733,6 @@ class ChatScroller extends LitElement { return true } if(changedProperties.has('messagesToRender')){ - console.log('true', this.messagesToRender) return true } if(changedProperties.has('isLoadingBefore')){ @@ -774,7 +748,6 @@ class ChatScroller extends LitElement { async getUpdateComplete() { await super.getUpdateComplete() const marginElements = Array.from(this.shadowRoot.querySelectorAll('message-template')) - console.log({ marginElements }) await Promise.all(marginElements.map(el => el.updateComplete)) return true } diff --git a/plugins/plugins/core/messaging/q-chat/q-chat.src.js b/plugins/plugins/core/messaging/q-chat/q-chat.src.js index 5e784bf3..95370b95 100644 --- a/plugins/plugins/core/messaging/q-chat/q-chat.src.js +++ b/plugins/plugins/core/messaging/q-chat/q-chat.src.js @@ -179,7 +179,6 @@ class Chat extends LitElement { } render() { - console.log('q-chat') return html`
@@ -470,10 +469,7 @@ class Chat extends LitElement { }, 60000) } - async updated(changedProperties) { - console.log({changedProperties}) - - } + clearConsole() { if (!isElectron()) { diff --git a/plugins/plugins/utils/replace-messages-edited.js b/plugins/plugins/utils/replace-messages-edited.js index d27364d4..129a4a8b 100644 --- a/plugins/plugins/utils/replace-messages-edited.js +++ b/plugins/plugins/utils/replace-messages-edited.js @@ -155,125 +155,97 @@ export const replaceMessagesEdited = async ({ return results; }; - const findNewMessages = async (msg) => { - let msgItem = msg + const findUpdatedMessage = async (msg) => { + let msgItem = { ...msg }; + try { - let msgQuery = `&involving=${msg.recipient}&involving=${msg.sender}` + let msgQuery = `&involving=${msg.recipient}&involving=${msg.sender}`; if (!isReceipient) { - msgQuery = `&txGroupId=${msg.txGroupId}` + msgQuery = `&txGroupId=${msg.txGroupId}`; } - const response = await parentEpml.request("apiCall", { + + // Find new messages first + const newMsgResponse = await parentEpml.request("apiCall", { type: "api", url: `/chat/messages?chatreference=${msg.signature}&reverse=true${msgQuery}&limit=1&sender=${msg.sender}&encoding=BASE64`, - }) - - if (response && Array.isArray(response) && response.length !== 0) { - let responseItem = { ...response[0] } - const decodeResponseItem = decodeMessageFunc(responseItem, isReceipient, _publicKey) - delete decodeResponseItem.timestamp - + }); + + if (Array.isArray(newMsgResponse) && newMsgResponse.length > 0) { + const decodeResponseItem = decodeMessageFunc(newMsgResponse[0], isReceipient, _publicKey); + delete decodeResponseItem.timestamp; + msgItem = { - ...msg, + ...msgItem, ...decodeResponseItem, senderName: msg.senderName, sender: msg.sender, - editedTimestamp: response[0].timestamp, + editedTimestamp: newMsgResponse[0].timestamp, originalSignature: msg.signature - } + }; } - } catch (error) { - } - - return msgItem - }; - - const findNewMessages2 = async (msg) => { - let parsedMessageObj = msg - try { - parsedMessageObj = JSON.parse(msg.decodedMessage) - } catch (error) { - return msg - } - let msgItem = msg - try { - let msgQuery = `&involving=${msg.recipient}&involving=${msg.sender}` - if (!isReceipient) { - msgQuery = `&txGroupId=${msg.txGroupId}` + + // Then check and find replies in the same iteration + let parsedMessageObj; + try { + parsedMessageObj = JSON.parse(msg.decodedMessage); + } catch (error) { + // If parsing fails, return the msgItem as is + return msgItem; } + if (parsedMessageObj.repliedTo) { - let originalReply + let originalReply; if(+parsedMessageObj.version > 2){ originalReply = await parentEpml.request("apiCall", { type: "api", - url: `/chat/message/${parsedMessageObj.repliedTo}?encoding=BASE64`, - }) - } - if(+parsedMessageObj.version < 3){ + url: `/chat/message/${parsedMessageObj.repliedTo}?encoding=BASE64`, + }); + } else { originalReply = await parentEpml.request("apiCall", { type: "api", - url: `/chat/messages?reference=${parsedMessageObj.repliedTo}&reverse=true${msgQuery}&encoding=BASE64`, - }) - } - - - - - const originalReplyMessage = originalReply.timestamp ? originalReply : originalReply.length !== 0 ? originalReply[0] : null - - const response = await parentEpml.request("apiCall", { + url: `/chat/messages?reference=${parsedMessageObj.repliedTo}&reverse=true${msgQuery}&encoding=BASE64`, + }); + } + + const originalReplyMessage = originalReply.timestamp ? originalReply : originalReply.length > 0 ? originalReply[0] : null; + + const replyResponse = await parentEpml.request("apiCall", { type: "api", url: `/chat/messages?chatreference=${parsedMessageObj.repliedTo}&reverse=true${msgQuery}&limit=1&sender=${originalReplyMessage.sender}&encoding=BASE64`, - }) - - + }); + if ( originalReplyMessage && - response && - Array.isArray(response) && - response.length !== 0 + Array.isArray(replyResponse) && + replyResponse.length !== 0 ) { - const decodeOriginalReply = decodeMessageFunc(originalReplyMessage, isReceipient, _publicKey) - - const decodeUpdatedReply = decodeMessageFunc(response[0], isReceipient, _publicKey) - const formattedRepliedToData = { + const decodeOriginalReply = decodeMessageFunc(originalReplyMessage, isReceipient, _publicKey); + const decodeUpdatedReply = decodeMessageFunc(replyResponse[0], isReceipient, _publicKey); + + msgItem.repliedToData = { ...decodeUpdatedReply, senderName: decodeOriginalReply.senderName, sender: decodeOriginalReply.sender, - } - msgItem = { - ...msg, - repliedToData: formattedRepliedToData, - } - } else { - - - if ( - originalReplyMessage - ) { - msgItem = { - ...msg, - repliedToData: decodeMessageFunc(originalReplyMessage, isReceipient, _publicKey), - } - } + }; + } else if (originalReplyMessage) { + msgItem.repliedToData = decodeMessageFunc(originalReplyMessage, isReceipient, _publicKey); } } + } catch (error) { + // Handle or log the error gracefully + console.error(error); } - - - return msgItem + + return msgItem; }; - - - + const sortedMessages = decodedMessages.sort((a, b) => b.timestamp - a.timestamp); - - // Execute the functions with concurrency limit - const updateMessages = await executeWithConcurrencyLimit(sortedMessages, findNewMessages); - const updateMessages2 = await executeWithConcurrencyLimit(updateMessages.filter(item => item !== 'null' && item !== null), findNewMessages2); - - addToUpdateMessageHashmap(updateMessages2) - - - return updateMessages2; + + // Execute the functions with concurrency limit + const updatedMessages = await executeWithConcurrencyLimit(sortedMessages, findUpdatedMessage); + addToUpdateMessageHashmap(updatedMessages); + + return updatedMessages; + };