refactor getoldmessage logic
This commit is contained in:
parent
e708ffef82
commit
2811f9f67f
@ -19,6 +19,7 @@ import '@polymer/paper-spinner/paper-spinner-lite.js'
|
|||||||
import '@material/mwc-button'
|
import '@material/mwc-button'
|
||||||
import '@material/mwc-dialog'
|
import '@material/mwc-dialog'
|
||||||
import '@material/mwc-icon'
|
import '@material/mwc-icon'
|
||||||
|
import { replaceMessagesEdited } from '../../utils/replace-messages-edited.js';
|
||||||
|
|
||||||
const messagesCache = localForage.createInstance({
|
const messagesCache = localForage.createInstance({
|
||||||
name: "messages-cache",
|
name: "messages-cache",
|
||||||
@ -451,100 +452,17 @@ class ChatPage extends LitElement {
|
|||||||
});
|
});
|
||||||
|
|
||||||
const decodeMsgs = getInitialMessages.map((eachMessage) => {
|
const decodeMsgs = getInitialMessages.map((eachMessage) => {
|
||||||
|
|
||||||
return this.decodeMessage(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
|
const updateMessages2 = await replaceMessagesEdited({
|
||||||
try {
|
decodedMessages: decodeMsgs,
|
||||||
parsedMessageObj = JSON.parse(msg.decodedMessage)
|
parentEpml,
|
||||||
} catch (error) {
|
isReceipient: this.isReceipient,
|
||||||
return msg
|
decodeMessageFunc: this.decodeMessage,
|
||||||
}
|
_publicKey: this._publicKey
|
||||||
|
|
||||||
|
|
||||||
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 Promise.all(findNewMessages2)
|
|
||||||
|
|
||||||
this.messagesRendered = [...updateMessages2, ...this.messagesRendered].sort(function (a, b) {
|
this.messagesRendered = [...updateMessages2, ...this.messagesRendered].sort(function (a, b) {
|
||||||
return a.timestamp
|
return a.timestamp
|
||||||
- b.timestamp
|
- b.timestamp
|
||||||
@ -917,7 +835,6 @@ class ChatPage extends LitElement {
|
|||||||
|
|
||||||
|
|
||||||
const stringified = JSON.stringify(messageObject)
|
const stringified = JSON.stringify(messageObject)
|
||||||
console.log({stringified})
|
|
||||||
const size = new Blob([stringified]).size;
|
const size = new Blob([stringified]).size;
|
||||||
this.chatMessageSize = size
|
this.chatMessageSize = size
|
||||||
|
|
||||||
@ -1046,18 +963,25 @@ class ChatPage extends LitElement {
|
|||||||
* @param {Object} encodedMessageObj
|
* @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 = {}
|
let decodedMessageObj = {}
|
||||||
|
|
||||||
if (this.isReceipient === true) {
|
if (isReceipientVar === true) {
|
||||||
// direct chat
|
// direct chat
|
||||||
|
if (encodedMessageObj.isEncrypted === true && _publicKeyVar.hasPubKey === true && encodedMessageObj.data) {
|
||||||
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, _publicKeyVar.key, encodedMessageObj.reference)
|
||||||
|
|
||||||
let decodedMessage = window.parent.decryptChatMessage(encodedMessageObj.data, window.parent.reduxStore.getState().app.selectedAddress.keyPair.privateKey, this._publicKey.key, encodedMessageObj.reference)
|
|
||||||
decodedMessageObj = { ...encodedMessageObj, decodedMessage }
|
decodedMessageObj = { ...encodedMessageObj, decodedMessage }
|
||||||
} else if (encodedMessageObj.isEncrypted === false && encodedMessageObj.data) {
|
} else if (encodedMessageObj.isEncrypted === false && encodedMessageObj.data) {
|
||||||
|
|
||||||
let bytesArray = window.parent.Base58.decode(encodedMessageObj.data)
|
let bytesArray = window.parent.Base58.decode(encodedMessageObj.data)
|
||||||
let decodedMessage = new TextDecoder('utf-8').decode(bytesArray)
|
let decodedMessage = new TextDecoder('utf-8').decode(bytesArray)
|
||||||
decodedMessageObj = { ...encodedMessageObj, decodedMessage }
|
decodedMessageObj = { ...encodedMessageObj, decodedMessage }
|
||||||
@ -1356,7 +1280,6 @@ class ChatPage extends LitElement {
|
|||||||
let _reference = new Uint8Array(64);
|
let _reference = new Uint8Array(64);
|
||||||
window.crypto.getRandomValues(_reference);
|
window.crypto.getRandomValues(_reference);
|
||||||
let reference = window.parent.Base58.encode(_reference);
|
let reference = window.parent.Base58.encode(_reference);
|
||||||
|
|
||||||
const sendMessageRequest = async () => {
|
const sendMessageRequest = async () => {
|
||||||
if (this.isReceipient === true) {
|
if (this.isReceipient === true) {
|
||||||
let chatResponse = await parentEpml.request('chat', {
|
let chatResponse = await parentEpml.request('chat', {
|
||||||
|
100
qortal-ui-plugins/plugins/utils/replace-messages-edited.js
Normal file
100
qortal-ui-plugins/plugins/utils/replace-messages-edited.js
Normal file
@ -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…
x
Reference in New Issue
Block a user