Browse Source

refactor getoldmessage logic

pull/127/head
Phillip Lang Martinez 2 years ago
parent
commit
2811f9f67f
  1. 119
      qortal-ui-plugins/plugins/core/components/ChatPage.js
  2. 100
      qortal-ui-plugins/plugins/utils/replace-messages-edited.js

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

@ -19,6 +19,7 @@ import '@polymer/paper-spinner/paper-spinner-lite.js'
import '@material/mwc-button'
import '@material/mwc-dialog'
import '@material/mwc-icon'
import { replaceMessagesEdited } from '../../utils/replace-messages-edited.js';
const messagesCache = localForage.createInstance({
name: "messages-cache",
@ -451,100 +452,17 @@ class ChatPage extends LitElement {
});
const decodeMsgs = getInitialMessages.map((eachMessage) => {
return this.decodeMessage(eachMessage)
})
const findNewMessages = decodeMsgs.map(async(msg)=> {
let msgItem = msg
try {
let msgQuery = `&involving=${msg.recipient}&involving=${msg.sender}`
if(!this.isReceipient){
msgQuery = `&txGroupId=${msg.txGroupId}`
}
const response = await parentEpml.request('apiCall', {
type: 'api',
url: `/chat/messages?chatreference=${msg.reference}&reverse=true${msgQuery}`,
});
if(response && Array.isArray(response) && response.length !== 0){
let responseItem = {...response[0]}
delete responseItem.timestamp
msgItem = {
...msg,
...responseItem,
editedTimestamp : response[0].timestamp
}
}
} catch (error) {
console.log(error)
}
return msgItem
})
const updateMessages = await Promise.all(findNewMessages)
const findNewMessages2 = updateMessages.map(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(!this.isReceipient){
msgQuery = `&txGroupId=${msg.txGroupId}`
}
if(parsedMessageObj.repliedTo){
const response = await parentEpml.request('apiCall', {
type: 'api',
url: `/chat/messages?chatreference=${parsedMessageObj.repliedTo}&reverse=true${msgQuery}`,
});
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${msgQuery}`,
});
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 replaceMessagesEdited({
decodedMessages: decodeMsgs,
parentEpml,
isReceipient: this.isReceipient,
decodeMessageFunc: this.decodeMessage,
_publicKey: this._publicKey
})
const updateMessages2 = await Promise.all(findNewMessages2)
this.messagesRendered = [...updateMessages2, ...this.messagesRendered].sort(function (a, b) {
return a.timestamp
- b.timestamp
@ -917,7 +835,6 @@ class ChatPage extends LitElement {
const stringified = JSON.stringify(messageObject)
console.log({stringified})
const size = new Blob([stringified]).size;
this.chatMessageSize = size
@ -1046,18 +963,25 @@ class ChatPage extends LitElement {
* @param {Object} encodedMessageObj
*
*/
decodeMessage(encodedMessageObj) {
decodeMessage(encodedMessageObj, isReceipient, _publicKey ) {
let isReceipientVar
let _publicKeyVar
try {
isReceipientVar = this.isReceipient === undefined ? isReceipient : this.isReceipient;
_publicKeyVar = this._publicKey === undefined ? _publicKey : this._publicKey
} catch (error) {
isReceipientVar = isReceipient
_publicKeyVar = _publicKey
}
let decodedMessageObj = {}
if (this.isReceipient === true) {
if (isReceipientVar === true) {
// direct chat
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)
if (encodedMessageObj.isEncrypted === true && _publicKeyVar.hasPubKey === true && encodedMessageObj.data) {
let decodedMessage = window.parent.decryptChatMessage(encodedMessageObj.data, window.parent.reduxStore.getState().app.selectedAddress.keyPair.privateKey, _publicKeyVar.key, encodedMessageObj.reference)
decodedMessageObj = { ...encodedMessageObj, decodedMessage }
} else if (encodedMessageObj.isEncrypted === false && encodedMessageObj.data) {
let bytesArray = window.parent.Base58.decode(encodedMessageObj.data)
let decodedMessage = new TextDecoder('utf-8').decode(bytesArray)
decodedMessageObj = { ...encodedMessageObj, decodedMessage }
@ -1356,7 +1280,6 @@ class ChatPage extends LitElement {
let _reference = new Uint8Array(64);
window.crypto.getRandomValues(_reference);
let reference = window.parent.Base58.encode(_reference);
const sendMessageRequest = async () => {
if (this.isReceipient === true) {
let chatResponse = await parentEpml.request('chat', {

100
qortal-ui-plugins/plugins/utils/replace-messages-edited.js

@ -0,0 +1,100 @@
export const replaceMessagesEdited = async ({
decodedMessages,
parentEpml,
isReceipient,
decodeMessageFunc,
_publicKey
}) => {
const findNewMessages = decodedMessages.map(async (msg) => {
let msgItem = msg
try {
let msgQuery = `&involving=${msg.recipient}&involving=${msg.sender}`
if (!isReceipient) {
msgQuery = `&txGroupId=${msg.txGroupId}`
}
const response = await parentEpml.request("apiCall", {
type: "api",
url: `/chat/messages?chatreference=${msg.reference}&reverse=true${msgQuery}`,
})
console.log({response})
if (response && Array.isArray(response) && response.length !== 0) {
let responseItem = { ...response[0] }
console.log('right before')
const decodeResponseItem = decodeMessageFunc(responseItem, isReceipient, _publicKey)
console.log({decodeResponseItem})
delete decodeResponseItem.timestamp
msgItem = {
...msg,
...decodeResponseItem,
editedTimestamp: response[0].timestamp,
}
}
} catch (error) {
console.log(error)
}
return msgItem
})
const updateMessages = await Promise.all(findNewMessages)
const findNewMessages2 = updateMessages.map(async (msg) => {
let parsedMessageObj = msg
try {
parsedMessageObj = JSON.parse(msg.decodedMessage)
} catch (error) {
console.log('error', {parsedMessageObj})
return msg
}
console.log('noerror')
let msgItem = msg
try {
let msgQuery = `&involving=${msg.recipient}&involving=${msg.sender}`
if (!isReceipient) {
msgQuery = `&txGroupId=${msg.txGroupId}`
}
console.log({parsedMessageObj})
if (parsedMessageObj.repliedTo) {
const response = await parentEpml.request("apiCall", {
type: "api",
url: `/chat/messages?chatreference=${parsedMessageObj.repliedTo}&reverse=true${msgQuery}`,
})
console.log({response2: response})
if (
response &&
Array.isArray(response) &&
response.length !== 0
) {
msgItem = {
...msg,
repliedToData: decodeMessageFunc(response[0], isReceipient, _publicKey),
}
} else {
const response2 = await parentEpml.request("apiCall", {
type: "api",
url: `/chat/messages?reference=${parsedMessageObj.repliedTo}&reverse=true${msgQuery}`,
})
if (
response2 &&
Array.isArray(response2) &&
response2.length !== 0
) {
msgItem = {
...msg,
repliedToData: decodeMessageFunc(response2[0]),
}
}
}
}
} catch (error) {
console.log(error)
}
return msgItem
})
const updateMessages2 = await Promise.all(findNewMessages2)
return updateMessages2
}
Loading…
Cancel
Save