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

add sorting to webworker

This commit is contained in:
PhilReact 2023-09-05 22:19:50 -05:00
parent 8de559c955
commit 61f92f454c
5 changed files with 2960 additions and 24 deletions

View File

@ -20,6 +20,9 @@ import Placeholder from '@tiptap/extension-placeholder'
import Highlight from '@tiptap/extension-highlight' import Highlight from '@tiptap/extension-highlight'
import WebWorker from 'web-worker:./computePowWorker.js' import WebWorker from 'web-worker:./computePowWorker.js'
import WebWorkerFile from 'web-worker:./computePowWorkerFile.js' import WebWorkerFile from 'web-worker:./computePowWorkerFile.js'
import WebWorkerSortMessages from 'web-worker:./webworkerSortMessages.js'
import WebWorkerDecodeMessages from 'web-worker:./webworkerDecodeMessages.js'
import ShortUniqueId from 'short-unique-id' import ShortUniqueId from 'short-unique-id'
import Compressor from 'compressorjs' import Compressor from 'compressorjs'
@ -1340,6 +1343,8 @@ class ChatPage extends LitElement {
} }
this.webWorker = null this.webWorker = null
this.webWorkerFile = null this.webWorkerFile = null
this.webWorkerSortMessages = null
this.webWorkerDecodeMessages = null
this.currentEditor = '_chatEditorDOM' this.currentEditor = '_chatEditorDOM'
this.initialChat = this.initialChat.bind(this) this.initialChat = this.initialChat.bind(this)
this.setOpenGifModal = this.setOpenGifModal.bind(this) this.setOpenGifModal = this.setOpenGifModal.bind(this)
@ -1401,6 +1406,7 @@ class ChatPage extends LitElement {
} }
render() { render() {
console.log('chatpage')
return html` return html`
<div class="main-container"> <div class="main-container">
<div <div
@ -1889,8 +1895,13 @@ class ChatPage extends LitElement {
await this.initUpdate() await this.initUpdate()
this.webWorker = new WebWorker() this.webWorker = new WebWorker()
this.webWorkerFile = new WebWorkerFile() this.webWorkerFile = new WebWorkerFile()
this.webWorkerSortMessages = new WebWorkerSortMessages()
this.webWorkerDecodeMessages = new WebWorkerDecodeMessages()
await this.getUpdateCompleteTextEditor() await this.getUpdateCompleteTextEditor()
const chatscrollerEl = this.shadowRoot.querySelector('_chatEditorDOM')
if(!chatscrollerEl) return
const elementChatId = this.shadowRoot.getElementById('_chatEditorDOM').shadowRoot.getElementById('_chatEditorDOM') const elementChatId = this.shadowRoot.getElementById('_chatEditorDOM').shadowRoot.getElementById('_chatEditorDOM')
const elementChatImageId = this.shadowRoot.getElementById('chatTextCaption').shadowRoot.getElementById('newChat') const elementChatImageId = this.shadowRoot.getElementById('chatTextCaption').shadowRoot.getElementById('newChat')
const elementChatAttachmentId = this.shadowRoot.getElementById('chatAttachmentId').shadowRoot.getElementById('newAttachmentChat') const elementChatAttachmentId = this.shadowRoot.getElementById('chatAttachmentId').shadowRoot.getElementById('newAttachmentChat')
@ -2042,6 +2053,9 @@ class ChatPage extends LitElement {
if (this.webWorkerFile) { if (this.webWorkerFile) {
this.webWorkerFile.terminate() this.webWorkerFile.terminate()
} }
if(this.webWorkerSortMessages){
this.webWorkerSortMessages.terminate()
}
if (this.editor) { if (this.editor) {
this.editor.destroy() this.editor.destroy()
} }
@ -2389,15 +2403,15 @@ class ChatPage extends LitElement {
document.querySelector('html').setAttribute('theme', this.theme) document.querySelector('html').setAttribute('theme', this.theme)
}) })
parentEpml.ready().then(() => { // parentEpml.ready().then(() => {
parentEpml.subscribe('selected_address', async selectedAddress => { // parentEpml.subscribe('selected_address', async selectedAddress => {
this.selectedAddress = {} // this.selectedAddress = {}
selectedAddress = JSON.parse(selectedAddress) // selectedAddress = JSON.parse(selectedAddress)
if (!selectedAddress || Object.entries(selectedAddress).length === 0) return // if (!selectedAddress || Object.entries(selectedAddress).length === 0) return
this.selectedAddress = selectedAddress // this.selectedAddress = selectedAddress
}) // })
}) // })
parentEpml.imReady() parentEpml.imReady()
const isEnabledChatEnter = localStorage.getItem('isEnabledChatEnter') const isEnabledChatEnter = localStorage.getItem('isEnabledChatEnter')
@ -2437,6 +2451,19 @@ class ChatPage extends LitElement {
} }
} }
shouldUpdate(changedProperties) {
if (changedProperties.has('setActiveChatHeadUrl')) {
return false
}
if (changedProperties.has('setOpenPrivateMessage')) {
return false
}
return true
}
async getName(recipient) { async getName(recipient) {
try { try {
const getNames = await parentEpml.request("apiCall", { const getNames = await parentEpml.request("apiCall", {
@ -2653,10 +2680,29 @@ class ChatPage extends LitElement {
url: `/chat/messages?txGroupId=${Number(this._chatId)}&limit=20&reverse=true&before=${scrollElement.messageObj.timestamp}&haschatreference=false&encoding=BASE64` url: `/chat/messages?txGroupId=${Number(this._chatId)}&limit=20&reverse=true&before=${scrollElement.messageObj.timestamp}&haschatreference=false&encoding=BASE64`
}) })
const decodeMsgs = getInitialMessages.map((eachMessage) => { let decodeMsgs = []
return this.decodeMessage(eachMessage)
try {
await new Promise((res, rej) => {
console.log('this.webWorkerDecodeMessages2.', this.webWorkerDecodeMessages)
this.webWorkerDecodeMessages.postMessage({messages: getInitialMessages, isReceipient: this.isReceipient, _publicKey: this._publicKey, privateKey: window.parent.reduxStore.getState().app.selectedAddress.keyPair.privateKey });
this.webWorkerDecodeMessages.onmessage = e => {
decodeMsgs = e.data
res()
}
this.webWorkerDecodeMessages.onerror = e => {
console.log('e',e)
rej()
}
}) })
} catch (error) {
console.log({error})
}
queue.push(() => replaceMessagesEdited({ queue.push(() => replaceMessagesEdited({
decodedMessages: decodeMsgs, decodedMessages: decodeMsgs,
@ -2666,12 +2712,25 @@ class ChatPage extends LitElement {
_publicKey: this._publicKey, _publicKey: this._publicKey,
addToUpdateMessageHashmap: this.addToUpdateMessageHashmap addToUpdateMessageHashmap: this.addToUpdateMessageHashmap
})); }));
let list = [...decodeMsgs, ...this.messagesRendered.slice(0,80)]
// this.messagesRendered = [...decodeMsgs, ...this.messagesRendered.slice(0,80)].sort(function (a, b) {
// return a.timestamp
// - b.timestamp
// })
await new Promise((res, rej) => {
this.messagesRendered = [...decodeMsgs, ...this.messagesRendered.slice(0,80)].sort(function (a, b) { this.webWorkerSortMessages.postMessage({list});
return a.timestamp
- b.timestamp this.webWorkerSortMessages.onmessage = e => {
console.log('e',e)
list = e.data
res()
}
}) })
console.log({list})
this.messagesRendered = list
this.isLoadingOldMessages = false this.isLoadingOldMessages = false
await this.getUpdateComplete() await this.getUpdateComplete()
const marginElements = Array.from(this.shadowRoot.querySelector('chat-scroller').shadowRoot.querySelectorAll('message-template')) const marginElements = Array.from(this.shadowRoot.querySelector('chat-scroller').shadowRoot.querySelectorAll('message-template'))
@ -2685,6 +2744,7 @@ class ChatPage extends LitElement {
async getAfterMessages(scrollElement) { async getAfterMessages(scrollElement) {
const firstMsg = this.messagesRendered.at(-1) const firstMsg = this.messagesRendered.at(-1)
const timestamp = scrollElement.messageObj.timestamp const timestamp = scrollElement.messageObj.timestamp
console.log('getAfterMessages')
if (this.isReceipient) { if (this.isReceipient) {
const getInitialMessages = await parentEpml.request('apiCall', { const getInitialMessages = await parentEpml.request('apiCall', {
@ -2756,6 +2816,9 @@ class ChatPage extends LitElement {
} }
async addToUpdateMessageHashmap(array){ async addToUpdateMessageHashmap(array){
console.log({array})
const chatscrollerEl = this.shadowRoot.querySelector('chat-scroller')
if(!chatscrollerEl) return
const viewElement = this.shadowRoot.querySelector('chat-scroller').shadowRoot.getElementById('viewElement') const viewElement = this.shadowRoot.querySelector('chat-scroller').shadowRoot.getElementById('viewElement')
const originalScrollTop = viewElement.scrollTop; const originalScrollTop = viewElement.scrollTop;
const originalScrollHeight = viewElement.scrollHeight; const originalScrollHeight = viewElement.scrollHeight;
@ -3013,6 +3076,7 @@ viewElement.scrollTop = originalScrollTop + heightDifference;
isReceipientVar = isReceipient isReceipientVar = isReceipient
_publicKeyVar = _publicKey _publicKeyVar = _publicKey
} }
console.log({_publicKeyVar})
let decodedMessageObj = {} let decodedMessageObj = {}
@ -4088,6 +4152,8 @@ viewElement.scrollTop = originalScrollTop + heightDifference;
} }
downElementObserver() { downElementObserver() {
const chatscrollerEl = this.shadowRoot.querySelector('chat-scroller')
if(!chatscrollerEl) return
const downObserver = this.shadowRoot.querySelector('chat-scroller').shadowRoot.getElementById('downObserver') const downObserver = this.shadowRoot.querySelector('chat-scroller').shadowRoot.getElementById('downObserver')
const options = { const options = {

View File

@ -631,6 +631,7 @@ class MessageTemplate extends LitElement {
} }
render() { render() {
const hidemsg = this.hideMessages const hidemsg = this.hideMessages
let message = "" let message = ""
let messageVersion2 = "" let messageVersion2 = ""

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,15 @@
self.addEventListener('message', async e => {
const response = e.data.list.sort(function (a, b) {
return a.timestamp
- b.timestamp
})
postMessage(response)
})

View File

@ -61,7 +61,7 @@ class Chat extends LitElement {
constructor() { constructor() {
super() super()
this.selectedAddress = {} this.selectedAddress = window.parent.reduxStore.getState().app.selectedAddress
this.config = { this.config = {
user: { user: {
node: { node: {
@ -179,6 +179,7 @@ class Chat extends LitElement {
} }
render() { render() {
console.log('q-chat')
return html` return html`
<div class="container clearfix"> <div class="container clearfix">
<div class="people-list" id="people-list"> <div class="people-list" id="people-list">
@ -443,12 +444,7 @@ class Chat extends LitElement {
let configLoaded = false let configLoaded = false
parentEpml.ready().then(() => { 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
})
parentEpml.subscribe('config', c => { parentEpml.subscribe('config', c => {
if (!configLoaded) { if (!configLoaded) {
setTimeout(getBlockedUsers, 1) setTimeout(getBlockedUsers, 1)
@ -474,6 +470,11 @@ class Chat extends LitElement {
}, 60000) }, 60000)
} }
async updated(changedProperties) {
console.log({changedProperties})
}
clearConsole() { clearConsole() {
if (!isElectron()) { if (!isElectron()) {
} else { } else {