Browse Source

rough draft reply logic

q-apps
Phillip Lang Martinez 2 years ago
parent
commit
912bfffabd
  1. 2
      qortal-ui-crypto/api/constants.js
  2. 5
      qortal-ui-crypto/api/transactions/chat/ChatTransaction.js
  3. 125
      qortal-ui-plugins/plugins/core/components/ChatPage.js
  4. 27
      qortal-ui-plugins/plugins/core/components/ChatScroller.js

2
qortal-ui-crypto/api/constants.js

@ -249,7 +249,7 @@ const ERROR_CODES = {
1000: "Not yet released." 1000: "Not yet released."
} }
const CHAT_REFERENCE_FEATURE_TRIGGER_TIMESTAMP = 9999999999999 const CHAT_REFERENCE_FEATURE_TRIGGER_TIMESTAMP = 0
const QORT_DECIMALS = 1e8 const QORT_DECIMALS = 1e8

5
qortal-ui-crypto/api/transactions/chat/ChatTransaction.js

@ -82,16 +82,17 @@ export default class ChatTransaction extends ChatBase {
this._isText, this._isText,
this._feeBytes this._feeBytes
) )
console.log('updated test')
// After the feature trigger timestamp we need to include chat reference // After the feature trigger timestamp we need to include chat reference
if (new Date(this._timestamp).getTime() >= CHAT_REFERENCE_FEATURE_TRIGGER_TIMESTAMP) { if (new Date(this._timestamp).getTime() >= CHAT_REFERENCE_FEATURE_TRIGGER_TIMESTAMP) {
params.push(this._hasChatReference) params.push(this._hasChatReference)
if (this._hasChatReference[0] == 1) { if (this._hasChatReference[0] == 1) {
console.log('past through', this._chatReference)
params.push(this._chatReference) params.push(this._chatReference)
} }
} }
console.log({params})
return params; return params;
} }
} }

125
qortal-ui-plugins/plugins/core/components/ChatPage.js

@ -503,9 +503,36 @@ class ChatPage extends LitElement {
async processMessages(messages, isInitial) { 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) { if (isInitial) {
this.messages = messages.map((eachMessage) => { const decodedMessages = updateMessages.map((eachMessage) => {
if (eachMessage.isText === true) { if (eachMessage.isText === true) {
this.messageSignature = eachMessage.signature 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 return a.timestamp
- b.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 // 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 // create new var called repliedToData and use that to modify the UI
// find specific object property in local // find specific object property in local
let typeMessage = 'regular';
this.isLoading = true; this.isLoading = true;
this.chatEditor.disable(); this.chatEditor.disable();
const messageText = this.mirrorChatInput.value; const messageText = this.mirrorChatInput.value;
@ -914,6 +996,8 @@ class ChatPage extends LitElement {
const sanitizedMessage = messageText.replace(/&nbsp;/gi, ' ').replace(/<br\s*[\/]?>/gi, '\n'); const sanitizedMessage = messageText.replace(/&nbsp;/gi, ' ').replace(/<br\s*[\/]?>/gi, '\n');
const trimmedMessage = sanitizedMessage.trim(); const trimmedMessage = sanitizedMessage.trim();
console.log('is replied', this.repliedToMessageObj)
if (/^\s*$/.test(trimmedMessage)) { if (/^\s*$/.test(trimmedMessage)) {
this.isLoading = false; this.isLoading = false;
this.chatEditor.enable(); this.chatEditor.enable();
@ -923,14 +1007,35 @@ class ChatPage extends LitElement {
let err1string = get("chatpage.cchange24"); let err1string = get("chatpage.cchange24");
parentEpml.request('showSnackBar', `${err1string}`); parentEpml.request('showSnackBar', `${err1string}`);
} else if (this.repliedToMessageObj) { } else if (this.repliedToMessageObj) {
let chatReference = this.repliedToMessageObj.reference
if(this.repliedToMessageObj.chatReference){
chatReference = this.repliedToMessageObj.chatReference
}
typeMessage = 'reply'
const messageObject = { const messageObject = {
messageText, messageText,
images: [''], images: [''],
repliedTo: this.repliedToMessageObj.signature, repliedTo: chatReference,
version: 1 version: 1
} }
const stringifyMessageObject = JSON.stringify(messageObject) 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 { } else {
const messageObject = { const messageObject = {
messageText, messageText,
@ -939,11 +1044,12 @@ class ChatPage extends LitElement {
version: 1 version: 1
} }
const stringifyMessageObject = JSON.stringify(messageObject) 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; this.isLoading = true;
let _reference = new Uint8Array(64); let _reference = new Uint8Array(64);
@ -959,7 +1065,8 @@ class ChatPage extends LitElement {
timestamp: Date.now(), timestamp: Date.now(),
recipient: this._chatId, recipient: this._chatId,
recipientPublicKey: this._publicKey.key, recipientPublicKey: this._publicKey.key,
hasChatReference: 0, hasChatReference: typeMessage === 'edit' ? 1 : 0,
chatReference: chatReference,
message: messageText, message: messageText,
lastReference: reference, lastReference: reference,
proofOfWorkNonce: 0, proofOfWorkNonce: 0,
@ -967,7 +1074,7 @@ class ChatPage extends LitElement {
isText: 1 isText: 1
} }
}); });
console.log({chatResponse})
_computePow(chatResponse) _computePow(chatResponse)
} else { } else {
let groupResponse = await parentEpml.request('chat', { let groupResponse = await parentEpml.request('chat', {

27
qortal-ui-plugins/plugins/core/components/ChatScroller.js

@ -44,6 +44,7 @@ class ChatScroller extends LitElement {
render() { render() {
console.log({messages: this.messages})
return html` return html`
<ul id="viewElement" class="chat-list clearfix"> <ul id="viewElement" class="chat-list clearfix">
<div id="upObserver"></div> <div id="upObserver"></div>
@ -202,20 +203,7 @@ class MessageTemplate extends LitElement {
try { try {
const parsedMessageObj = JSON.parse(this.messageObj.decodedMessage) const parsedMessageObj = JSON.parse(this.messageObj.decodedMessage)
message = parsedMessageObj.messageText message = parsedMessageObj.messageText
repliedToData = { repliedToData = this.messageObj.repliedToData
"timestamp": 1663419371885,
"txGroupId": 0,
"reference": "5LuncmE2RsGVdQizkZLnjgqU8QozR2hHhkiSujUgywEfqAvm6RW4xZ7c9XjuMnb76bNmX2ntRNhnBF4ErvawM1dW",
"senderPublicKey": "xmZXCYzGU2t3S6Ehm2zp4pVm83q9d143NKRgmiU1dXW",
"sender": "Qj9aLrdK2FLQY6YssRQUkDmXNJCko2zF7e",
"senderName": "GiseleH",
"data": "3JLP9vViLoRPJ1Pqt2uC6Ufqf7wgTrs4HuV4Ltgwdnf5ekcBCCf5MTm2Sg3sXHeuVnCpoJAyVdqgAbr7tcBoq3soNZTjteusXjjW3NSMNcJEAadaTYC68xGXGmvK1jRyioPqGaKiXKzR2jPPRV5SyiPd66788Z2Rqt3VQB98rvronX5w5tE9UUWRor6bmMeVL3dj7fHYhLPPE5VBpCS9Eskti7vnTgDUQxnjfr",
"isText": true,
"isEncrypted": false,
"signature": "3jWvhQKSDt4Zqeup5sLfyNksVVphFW5iF11PsTZzXQLCCPH9pDMqwNoKE2oe3DPYz47VbbLgJaAWMVA44z9dUr9U",
"decodedMessage": "for TrentB512 who computer crashed your registered name in qortal for your level 3 account was TrentB512 https://exqlorer.com/address/Qf58otnEXeoyvD7dvYmfEGpQ64oMD3uvwM"
}
} catch (error) { } catch (error) {
message = this.messageObj.decodedMessage message = this.messageObj.decodedMessage
} }
@ -238,7 +226,14 @@ class MessageTemplate extends LitElement {
} else { } else {
nameMenu = html`<span>${this.messageObj.senderName ? this.messageObj.senderName : this.messageObj.sender}</span>` nameMenu = html`<span>${this.messageObj.senderName ? this.messageObj.senderName : this.messageObj.sender}</span>`
} }
if(repliedToData){
try {
const parsedMsg = JSON.parse(repliedToData.decodedMessage)
repliedToData.decodedMessage = parsedMsg
} catch (error) {
}
}
return hideit ? html`<li class="clearfix"></li>` : html` return hideit ? html`<li class="clearfix"></li>` : html`
<li class="clearfix message-parent"> <li class="clearfix message-parent">
<div class="message-data ${this.messageObj.sender === this.myAddress ? "" : ""}"> <div class="message-data ${this.messageObj.sender === this.myAddress ? "" : ""}">
@ -255,7 +250,7 @@ class MessageTemplate extends LitElement {
class="original-message" class="original-message"
style=${this.messageObj.sender === this.myAddress && "background-color: rgb(179 179 179 / 79%)"}> style=${this.messageObj.sender === this.myAddress && "background-color: rgb(179 179 179 / 79%)"}>
<p class="original-message-sender">${repliedToData.sendName ?? repliedToData.sender}</p> <p class="original-message-sender">${repliedToData.sendName ?? repliedToData.sender}</p>
<p class="replied-message">${repliedToData.decodedMessage}</p> <p class="replied-message">${repliedToData.decodedMessage.messageText}</p>
</div> </div>
`} `}
<div id="messageContent" class="message"> <div id="messageContent" class="message">

Loading…
Cancel
Save