diff --git a/qortal-ui-plugins/plugins/core/components/ChatModals.js b/qortal-ui-plugins/plugins/core/components/ChatModals.js
index ab772335..b7370ef3 100644
--- a/qortal-ui-plugins/plugins/core/components/ChatModals.js
+++ b/qortal-ui-plugins/plugins/core/components/ChatModals.js
@@ -175,7 +175,13 @@ class ChatModals extends LitElement {
};
const sendMessageRequest = async (isEncrypted, _publicKey) => {
-
+ const messageObject = {
+ messageText,
+ images: [''],
+ repliedTo: '',
+ version: 1
+ }
+ const stringifyMessageObject = JSON.stringify(messageObject)
let chatResponse = await parentEpml.request('chat', {
type: 18,
nonce: this.selectedAddress.nonce,
@@ -184,7 +190,7 @@ class ChatModals extends LitElement {
recipient: recipient,
recipientPublicKey: _publicKey,
hasChatReference: 0,
- message: messageText,
+ message: stringifyMessageObject,
lastReference: reference,
proofOfWorkNonce: 0,
isEncrypted: isEncrypted,
diff --git a/qortal-ui-plugins/plugins/core/components/ChatPage.js b/qortal-ui-plugins/plugins/core/components/ChatPage.js
index 0ce9de05..36046bf9 100644
--- a/qortal-ui-plugins/plugins/core/components/ChatPage.js
+++ b/qortal-ui-plugins/plugins/core/components/ChatPage.js
@@ -221,7 +221,7 @@ class ChatPage extends LitElement {
${this.repliedToMessageObj.senderName ? this.repliedToMessageObj.senderName : this.repliedToMessageObj.sender}
-
${this.repliedToMessageObj.decodedMessage}
+
${this.repliedToMessageObj.message}
${translate("chatpage.cchange25")}
-
${this.editedMessageObj.decodedMessage}
+
${this.editedMessageObj.message}
{
@@ -475,7 +474,7 @@ class ChatPage extends LitElement {
} else {
const getInitialMessages = await parentEpml.request('apiCall', {
type: 'api',
- url: `/chat/messages?txGroupId=${Number(this._chatId)}&limit=20&reverse=true&before=${scrollElement.messageObj.timestamp}`,
+ url: `/chat/messages?txGroupId=${Number(this._chatId)}&limit=20&reverse=true&before=${scrollElement.messageObj.timestamp}&haschatreference=false`,
});
@@ -504,7 +503,7 @@ 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', {
@@ -521,7 +520,7 @@ class ChatPage extends LitElement {
editedTimestamp : response[0].timestamp
}
}
- console.log({response})
+
} catch (error) {
console.log(error)
}
@@ -547,7 +546,7 @@ class ChatPage extends LitElement {
const findNewMessages2 = decodedMessages.map(async(msg)=> {
- console.log({msg})
+
let parsedMessageObj = msg
try {
parsedMessageObj = JSON.parse(msg.decodedMessage)
@@ -622,15 +621,58 @@ class ChatPage extends LitElement {
setTimeout(() => this.downElementObserver(), 500)
} else {
- messages.forEach((eachMessage) => {
-
- const _eachMessage = this.decodeMessage(eachMessage)
-
-
- this.renderNewMessage(_eachMessage)
+
+ const findNewMessages2 = messages.map(async(msg)=> {
+ const _eachMessage = this.decodeMessage(msg)
+ let parsedMessageObj = _eachMessage
+ try {
+ parsedMessageObj = JSON.parse(_eachMessage.decodedMessage)
+ } catch (error) {
+ return msg
+ }
+
+
+ let msgItem = _eachMessage
+ try {
+ if(parsedMessageObj.repliedTo){
+ const response = await parentEpml.request('apiCall', {
+ type: 'api',
+ url: `/chat/messages?chatreference=${parsedMessageObj.repliedTo}&reverse=true&involving=${_eachMessage.recipient}&involving=${_eachMessage.sender}`,
+ });
+
+ if(response && Array.isArray(response) && response.length !== 0){
+
+ msgItem = {
+ ..._eachMessage,
+ repliedToData : this.decodeMessage(response[0])
+ }
+ } else {
+ const response2 = await parentEpml.request('apiCall', {
+ type: 'api',
+ url: `/chat/messages?reference=${parsedMessageObj.repliedTo}&reverse=true&involving=${_eachMessage.recipient}&involving=${_eachMessage.sender}`,
+ });
+ if(response2 && Array.isArray(response2) && response2.length !== 0){
+
+ msgItem = {
+ ..._eachMessage,
+ repliedToData : this.decodeMessage(response2[0])
+ }
+ }
+ }
+
+ }
+
+
+ } catch (error) {
+ console.log(error)
+ }
+
+
+ this.renderNewMessage(msgItem)
})
+ await Promise.all(findNewMessages2)
// this.newMessages = this.newMessages.concat(_newMessages)
@@ -654,11 +696,9 @@ class ChatPage extends LitElement {
// set edited message in chat editor
setEditedMessageObj(messageObj) {
- console.log(messageObj, "Edited Message Object Here")
this.editedMessageObj = {...messageObj};
this.repliedToMessageObj = null;
this.requestUpdate();
- console.log(this.editedMessageObj);
}
closeEditMessageContainer() {
@@ -725,7 +765,17 @@ class ChatPage extends LitElement {
}
async renderNewMessage(newMessage) {
+ if(newMessage.chatReference){
+ const findOriginalMessageIndex = this.messagesRendered.findIndex(msg=> msg.reference === newMessage.chatReference || (msg.chatReference && msg.chatReference === newMessage.chatReference) )
+ if(findOriginalMessageIndex !== -1){
+ const newMessagesRendered = [...this.messagesRendered]
+ newMessagesRendered[findOriginalMessageIndex] = {...newMessage, timestamp: newMessagesRendered[findOriginalMessageIndex].timestamp, editedTimestamp: newMessage.timestamp }
+ this.messagesRendered = newMessagesRendered
+ await this.getUpdateComplete();
+ }
+ return
+ }
const viewElement = this.shadowRoot.querySelector('chat-scroller').shadowRoot.getElementById('viewElement');
if (newMessage.sender === this.selectedAddress.address) {
@@ -761,11 +811,11 @@ class ChatPage extends LitElement {
if (this.isReceipient === true) {
// direct chat
- if (encodedMessageObj.isEncrypted === true && this._publicKey.hasPubKey === true) {
+ if (encodedMessageObj.isEncrypted === true && this._publicKey.hasPubKey === true && encodedMessageObj.data) {
let decodedMessage = window.parent.decryptChatMessage(encodedMessageObj.data, window.parent.reduxStore.getState().app.selectedAddress.keyPair.privateKey, this._publicKey.key, encodedMessageObj.reference)
decodedMessageObj = { ...encodedMessageObj, decodedMessage }
- } else if (encodedMessageObj.isEncrypted === false) {
+ } else if (encodedMessageObj.isEncrypted === false && encodedMessageObj.data) {
let bytesArray = window.parent.Base58.decode(encodedMessageObj.data)
let decodedMessage = new TextDecoder('utf-8').decode(bytesArray)
@@ -821,7 +871,6 @@ class ChatPage extends LitElement {
// Message Event
directSocket.onmessage = async (e) => {
-
if (initial === 0) {
const isReceipient = this.chatId.includes('direct')
@@ -835,13 +884,13 @@ class ChatPage extends LitElement {
const lastMessage = cachedData[cachedData.length - 1]
const newMessages = await parentEpml.request('apiCall', {
type: 'api',
- url: `/chat/messages?involving=${window.parent.reduxStore.getState().app.selectedAddress.address}&involving=${cid}&limit=20&reverse=true&after=${lastMessage.timestamp}`,
+ url: `/chat/messages?involving=${window.parent.reduxStore.getState().app.selectedAddress.address}&involving=${cid}&limit=20&reverse=true&after=${lastMessage.timestamp}&haschatreference=false`,
});
getInitialMessages = [...cachedData, ...newMessages]
} else {
getInitialMessages = await parentEpml.request('apiCall', {
type: 'api',
- url: `/chat/messages?involving=${window.parent.reduxStore.getState().app.selectedAddress.address}&involving=${cid}&limit=20&reverse=true`,
+ url: `/chat/messages?involving=${window.parent.reduxStore.getState().app.selectedAddress.address}&involving=${cid}&limit=20&reverse=true&haschatreference=false`,
});
@@ -852,8 +901,10 @@ class ChatPage extends LitElement {
initial = initial + 1
} else {
-
- this.processMessages(JSON.parse(e.data), false)
+ if(e.data){
+ this.processMessages(JSON.parse(e.data), false)
+ }
+
}
}
@@ -921,14 +972,14 @@ class ChatPage extends LitElement {
const newMessages = await parentEpml.request('apiCall', {
type: 'api',
- url: `/chat/messages?txGroupId=${groupId}&limit=20&reverse=true&after=${lastMessage.timestamp}`,
+ url: `/chat/messages?txGroupId=${groupId}&limit=20&reverse=true&after=${lastMessage.timestamp}&haschatreference=false`,
});
getInitialMessages = [...cachedData, ...newMessages]
} else {
getInitialMessages = await parentEpml.request('apiCall', {
type: 'api',
- url: `/chat/messages?txGroupId=${groupId}&limit=20&reverse=true`,
+ url: `/chat/messages?txGroupId=${groupId}&limit=20&reverse=true&haschatreference=false`,
});
@@ -939,8 +990,10 @@ class ChatPage extends LitElement {
initial = initial + 1
} else {
-
- this.processMessages(JSON.parse(e.data), false)
+ if(e.data){
+ this.processMessages(JSON.parse(e.data), false)
+ }
+
}
}
@@ -991,12 +1044,11 @@ class ChatPage extends LitElement {
this.isLoading = true;
this.chatEditor.disable();
const messageText = this.mirrorChatInput.value;
-
// Format and Sanitize Message
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;
@@ -1014,7 +1066,7 @@ class ChatPage extends LitElement {
}
typeMessage = 'reply'
const messageObject = {
- messageText,
+ messageText: trimmedMessage,
images: [''],
repliedTo: chatReference,
version: 1
@@ -1022,23 +1074,31 @@ class ChatPage extends LitElement {
const stringifyMessageObject = JSON.stringify(messageObject)
this.sendMessage(stringifyMessageObject, typeMessage );
} else if (this.editedMessageObj) {
- let chatReference = this.repliedToMessageObj.reference
+ typeMessage = 'edit'
+ let chatReference = this.editedMessageObj.reference
- if(this.repliedToMessageObj.chatReference){
- chatReference = this.repliedToMessageObj.chatReference
+ if(this.editedMessageObj.chatReference){
+ chatReference = this.editedMessageObj.chatReference
}
- typeMessage = 'reply'
+
+ let message = ""
+ try {
+ const parsedMessageObj = JSON.parse(this.editedMessageObj.decodedMessage)
+ message = parsedMessageObj
+
+ } catch (error) {
+ message = this.messageObj.decodedMessage
+ }
const messageObject = {
- messageText,
- images: [''],
- repliedTo: chatReference,
- version: 1
+ ...message,
+ messageText: trimmedMessage,
+
}
const stringifyMessageObject = JSON.stringify(messageObject)
this.sendMessage(stringifyMessageObject, typeMessage, chatReference);
} else {
const messageObject = {
- messageText,
+ messageText: trimmedMessage,
images: [''],
repliedTo: '',
version: 1
@@ -1049,7 +1109,7 @@ class ChatPage extends LitElement {
}
async sendMessage(messageText, typeMessage, chatReference) {
- console.log({messageText}, 'hello')
+
this.isLoading = true;
let _reference = new Uint8Array(64);
@@ -1074,7 +1134,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 db991014..3db65871 100644
--- a/qortal-ui-plugins/plugins/core/components/ChatScroller.js
+++ b/qortal-ui-plugins/plugins/core/components/ChatScroller.js
@@ -44,7 +44,6 @@ class ChatScroller extends LitElement {
render() {
- console.log({messages: this.messages})
return html`
@@ -219,7 +218,10 @@ class MessageTemplate extends LitElement {
const nodeUrl = myNode.protocol + '://' + myNode.domain + ':' + myNode.port
const avatarUrl = `${nodeUrl}/arbitrary/THUMBNAIL/${this.messageObj.senderName}/qortal_avatar?async=true&apiKey=${myNode.apiKey}`
avatarImg = html`
`
+ } else {
+ avatarImg = html`
`
}
+
if (this.messageObj.sender === this.myAddress) {
nameMenu = html`${this.messageObj.senderName ? this.messageObj.senderName : this.messageObj.sender}`
@@ -265,7 +267,7 @@ class MessageTemplate extends LitElement {
.showBlockUserModal=${() => this.showBlockUserModal()}
.showBlockIconFunc=${(props) => this.showBlockIconFunc(props)}
.showBlockAddressIcon=${this.showBlockAddressIcon}
- .originalMessage=${this.messageObj}
+ .originalMessage=${{...this.messageObj, message}}
.setRepliedToMessageObj=${this.setRepliedToMessageObj}
.setEditedMessageObj=${this.setEditedMessageObj}
.focusChatEditor=${this.focusChatEditor}
diff --git a/qortal-ui-plugins/plugins/core/components/ChatWelcomePage.js b/qortal-ui-plugins/plugins/core/components/ChatWelcomePage.js
index 782db47f..14735c00 100644
--- a/qortal-ui-plugins/plugins/core/components/ChatWelcomePage.js
+++ b/qortal-ui-plugins/plugins/core/components/ChatWelcomePage.js
@@ -402,7 +402,13 @@ class ChatWelcomePage extends LitElement {
};
const sendMessageRequest = async (isEncrypted, _publicKey) => {
-
+ const messageObject = {
+ messageText,
+ images: [''],
+ repliedTo: '',
+ version: 1
+ }
+ const stringifyMessageObject = JSON.stringify(messageObject)
let chatResponse = await parentEpml.request('chat', {
type: 18,
nonce: this.selectedAddress.nonce,
@@ -411,7 +417,7 @@ class ChatWelcomePage extends LitElement {
recipient: recipient,
recipientPublicKey: _publicKey,
hasChatReference: 0,
- message: messageText,
+ message: stringifyMessageObject,
lastReference: reference,
proofOfWorkNonce: 0,
isEncrypted: isEncrypted,
diff --git a/qortal-ui-plugins/plugins/core/components/NameMenu.js b/qortal-ui-plugins/plugins/core/components/NameMenu.js
index 17c39a88..9b1a9635 100644
--- a/qortal-ui-plugins/plugins/core/components/NameMenu.js
+++ b/qortal-ui-plugins/plugins/core/components/NameMenu.js
@@ -521,7 +521,13 @@ class NameMenu extends LitElement {
};
const sendMessageRequest = async (isEncrypted, _publicKey) => {
-
+ const messageObject = {
+ messageText,
+ images: [''],
+ repliedTo: '',
+ version: 1
+ }
+ const stringifyMessageObject = JSON.stringify(messageObject)
let chatResponse = await parentEpml.request('chat', {
type: 18,
nonce: this.selectedAddress.nonce,
@@ -530,7 +536,7 @@ class NameMenu extends LitElement {
recipient: recipient,
recipientPublicKey: _publicKey,
hasChatReference: 0,
- message: messageText,
+ message: stringifyMessageObject,
lastReference: reference,
proofOfWorkNonce: 0,
isEncrypted: isEncrypted,
diff --git a/qortal-ui-plugins/plugins/core/messaging/q-chat/q-chat.src.js b/qortal-ui-plugins/plugins/core/messaging/q-chat/q-chat.src.js
index 0eddc863..5de97d52 100644
--- a/qortal-ui-plugins/plugins/core/messaging/q-chat/q-chat.src.js
+++ b/qortal-ui-plugins/plugins/core/messaging/q-chat/q-chat.src.js
@@ -811,7 +811,13 @@ class Chat extends LitElement {
};
const sendMessageRequest = async (isEncrypted, _publicKey) => {
-
+ const messageObject = {
+ messageText,
+ images: [''],
+ repliedTo: '',
+ version: 1
+ }
+ const stringifyMessageObject = JSON.stringify(messageObject)
let chatResponse = await parentEpml.request('chat', {
type: 18,
nonce: this.selectedAddress.nonce,
@@ -820,7 +826,7 @@ class Chat extends LitElement {
recipient: recipient,
recipientPublicKey: _publicKey,
hasChatReference: 0,
- message: messageText,
+ message: stringifyMessageObject,
lastReference: reference,
proofOfWorkNonce: 0,
isEncrypted: isEncrypted,