diff --git a/qortal-ui-crypto/api/constants.js b/qortal-ui-crypto/api/constants.js index b3fa7cd4..6193f595 100644 --- a/qortal-ui-crypto/api/constants.js +++ b/qortal-ui-crypto/api/constants.js @@ -249,7 +249,7 @@ const ERROR_CODES = { 1000: "Not yet released." } -const CHAT_REFERENCE_FEATURE_TRIGGER_TIMESTAMP = 9999999999999 +const CHAT_REFERENCE_FEATURE_TRIGGER_TIMESTAMP = 0 const QORT_DECIMALS = 1e8 diff --git a/qortal-ui-crypto/api/transactions/chat/ChatTransaction.js b/qortal-ui-crypto/api/transactions/chat/ChatTransaction.js index a53a0f81..d368e8ca 100644 --- a/qortal-ui-crypto/api/transactions/chat/ChatTransaction.js +++ b/qortal-ui-crypto/api/transactions/chat/ChatTransaction.js @@ -82,16 +82,17 @@ export default class ChatTransaction extends ChatBase { this._isText, this._feeBytes ) - + console.log('updated test') // After the feature trigger timestamp we need to include chat reference if (new Date(this._timestamp).getTime() >= CHAT_REFERENCE_FEATURE_TRIGGER_TIMESTAMP) { params.push(this._hasChatReference) if (this._hasChatReference[0] == 1) { + console.log('past through', this._chatReference) params.push(this._chatReference) } } - + console.log({params}) return params; } } diff --git a/qortal-ui-plugins/plugins/core/components/ChatPage.js b/qortal-ui-plugins/plugins/core/components/ChatPage.js index 59a784da..0ce9de05 100644 --- a/qortal-ui-plugins/plugins/core/components/ChatPage.js +++ b/qortal-ui-plugins/plugins/core/components/ChatPage.js @@ -503,9 +503,36 @@ class ChatPage extends LitElement { async processMessages(messages, isInitial) { + const findNewMessages = messages.map(async(msg)=> { + console.log({msg}) + let msgItem = msg + try { + const response = await parentEpml.request('apiCall', { + type: 'api', + url: `/chat/messages?chatreference=${msg.reference}&reverse=true&involving=${msg.recipient}&involving=${msg.sender}`, + }); + + if(response && Array.isArray(response) && response.length !== 0){ + let responseItem = {...response[0]} + delete responseItem.timestamp + msgItem = { + ...msg, + ...responseItem, + editedTimestamp : response[0].timestamp + } + } + console.log({response}) + } catch (error) { + console.log(error) + } + + return msgItem + }) + const updateMessages = await Promise.all(findNewMessages) + if (isInitial) { - this.messages = messages.map((eachMessage) => { + const decodedMessages = updateMessages.map((eachMessage) => { if (eachMessage.isText === true) { this.messageSignature = eachMessage.signature @@ -518,7 +545,61 @@ class ChatPage extends LitElement { } }) - this._messages = [...this.messages].sort(function (a, b) { + + const findNewMessages2 = decodedMessages.map(async(msg)=> { + console.log({msg}) + let parsedMessageObj = msg + try { + parsedMessageObj = JSON.parse(msg.decodedMessage) + } catch (error) { + return msg + } + + + let msgItem = msg + try { + if(parsedMessageObj.repliedTo){ + const response = await parentEpml.request('apiCall', { + type: 'api', + url: `/chat/messages?chatreference=${parsedMessageObj.repliedTo}&reverse=true&involving=${msg.recipient}&involving=${msg.sender}`, + }); + + if(response && Array.isArray(response) && response.length !== 0){ + + msgItem = { + ...msg, + repliedToData : this.decodeMessage(response[0]) + } + } else { + + const response2 = await parentEpml.request('apiCall', { + type: 'api', + url: `/chat/messages?reference=${parsedMessageObj.repliedTo}&reverse=true&involving=${msg.recipient}&involving=${msg.sender}`, + }); + + if(response2 && Array.isArray(response2) && response2.length !== 0){ + + msgItem = { + ...msg, + repliedToData : this.decodeMessage(response2[0]) + } + } + } + + } + + + } catch (error) { + console.log(error) + } + + return msgItem + }) + const updateMessages2 = await Promise.all(findNewMessages2) + + + + this._messages = updateMessages2.sort(function (a, b) { return a.timestamp - b.timestamp }) @@ -905,7 +986,8 @@ class ChatPage extends LitElement { // need whole original message object, transform the data and put it in local storage // create new var called repliedToData and use that to modify the UI // find specific object property in local - + let typeMessage = 'regular'; + this.isLoading = true; this.chatEditor.disable(); const messageText = this.mirrorChatInput.value; @@ -914,6 +996,8 @@ class ChatPage extends LitElement { const sanitizedMessage = messageText.replace(/ /gi, ' ').replace(//gi, '\n'); const trimmedMessage = sanitizedMessage.trim(); + console.log('is replied', this.repliedToMessageObj) + if (/^\s*$/.test(trimmedMessage)) { this.isLoading = false; this.chatEditor.enable(); @@ -923,14 +1007,35 @@ class ChatPage extends LitElement { let err1string = get("chatpage.cchange24"); parentEpml.request('showSnackBar', `${err1string}`); } else if (this.repliedToMessageObj) { + let chatReference = this.repliedToMessageObj.reference + + if(this.repliedToMessageObj.chatReference){ + chatReference = this.repliedToMessageObj.chatReference + } + typeMessage = 'reply' const messageObject = { messageText, images: [''], - repliedTo: this.repliedToMessageObj.signature, + repliedTo: chatReference, version: 1 } const stringifyMessageObject = JSON.stringify(messageObject) - this.sendMessage(stringifyMessageObject); + this.sendMessage(stringifyMessageObject, typeMessage ); + } else if (this.editedMessageObj) { + let chatReference = this.repliedToMessageObj.reference + + if(this.repliedToMessageObj.chatReference){ + chatReference = this.repliedToMessageObj.chatReference + } + typeMessage = 'reply' + const messageObject = { + messageText, + images: [''], + repliedTo: chatReference, + version: 1 + } + const stringifyMessageObject = JSON.stringify(messageObject) + this.sendMessage(stringifyMessageObject, typeMessage, chatReference); } else { const messageObject = { messageText, @@ -939,11 +1044,12 @@ class ChatPage extends LitElement { version: 1 } const stringifyMessageObject = JSON.stringify(messageObject) - this.sendMessage(stringifyMessageObject); + this.sendMessage(stringifyMessageObject, typeMessage); } } - async sendMessage(messageText) { + async sendMessage(messageText, typeMessage, chatReference) { + console.log({messageText}, 'hello') this.isLoading = true; let _reference = new Uint8Array(64); @@ -959,7 +1065,8 @@ class ChatPage extends LitElement { timestamp: Date.now(), recipient: this._chatId, recipientPublicKey: this._publicKey.key, - hasChatReference: 0, + hasChatReference: typeMessage === 'edit' ? 1 : 0, + chatReference: chatReference, message: messageText, lastReference: reference, proofOfWorkNonce: 0, @@ -967,7 +1074,7 @@ class ChatPage extends LitElement { isText: 1 } }); - + console.log({chatResponse}) _computePow(chatResponse) } else { let groupResponse = await parentEpml.request('chat', { diff --git a/qortal-ui-plugins/plugins/core/components/ChatScroller.js b/qortal-ui-plugins/plugins/core/components/ChatScroller.js index 14d314be..db991014 100644 --- a/qortal-ui-plugins/plugins/core/components/ChatScroller.js +++ b/qortal-ui-plugins/plugins/core/components/ChatScroller.js @@ -44,6 +44,7 @@ class ChatScroller extends LitElement { render() { + console.log({messages: this.messages}) return html`