4
1
mirror of https://github.com/Qortal/qortal-ui.git synced 2025-02-11 17:55:51 +00:00

remove logs , imporve replace msgs efficiency

This commit is contained in:
PhilReact 2023-09-10 11:37:01 -05:00
parent 8dfab316a7
commit f5a9fe46c4
4 changed files with 73 additions and 192 deletions

View File

@ -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`
<chat-scroller
chatId=${this.chatId}
@ -2623,7 +2604,6 @@ class ChatPage extends LitElement {
}
this.webWorkerDecodeMessages.onerror = e => {
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

View File

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

View File

@ -179,7 +179,6 @@ class Chat extends LitElement {
}
render() {
console.log('q-chat')
return html`
<div class="container clearfix">
<div class="people-list" id="people-list">
@ -470,10 +469,7 @@ class Chat extends LitElement {
}, 60000)
}
async updated(changedProperties) {
console.log({changedProperties})
}
clearConsole() {
if (!isElectron()) {

View File

@ -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;
};