forked from Qortal/qortal-ui
248 lines
6.8 KiB
JavaScript
248 lines
6.8 KiB
JavaScript
export const replaceMessagesEdited = async ({
|
|
decodedMessages,
|
|
parentEpml,
|
|
isReceipient,
|
|
decodeMessageFunc,
|
|
_publicKey,
|
|
isNotInitial
|
|
}) => {
|
|
const findNewMessages = decodedMessages.map(async (msg) => {
|
|
let originalMsg = msg
|
|
let msgItem = msg
|
|
let newReactions = null
|
|
try {
|
|
if(isNotInitial && msg.chatReference){
|
|
const originalMsg2 = await parentEpml.request("apiCall", {
|
|
type: "api",
|
|
url: `/chat/message/${msg.chatReference}`,
|
|
})
|
|
if(originalMsg2.sender !== msg.sender){
|
|
const originalMsg2Decoded = decodeMessageFunc(originalMsg2, isReceipient, _publicKey)
|
|
let parsedMessageObj = null
|
|
try {
|
|
parsedMessageObj = JSON.parse(originalMsg2Decoded.decodedMessage)
|
|
if(Array.isArray(parsedMessageObj.reactions) && parsedMessageObj.reactions.length > 0){
|
|
newReactions = parsedMessageObj.reactions
|
|
}
|
|
originalMsg = originalMsg2
|
|
originalMsg.chatReference = msg.chatReference
|
|
} catch (error) {
|
|
|
|
}
|
|
}
|
|
|
|
}
|
|
let msgQuery = `&involving=${originalMsg.recipient}&involving=${originalMsg.sender}`
|
|
if (!isReceipient) {
|
|
msgQuery = `&txGroupId=${originalMsg.txGroupId}`
|
|
}
|
|
const response = await parentEpml.request("apiCall", {
|
|
type: "api",
|
|
url: `/chat/messages?chatreference=${originalMsg.signature}&reverse=true${msgQuery}`,
|
|
})
|
|
let decodedMsgs = []
|
|
response.map((eachMessage) => {
|
|
const msgRes = decodeMessageFunc(eachMessage, isReceipient, _publicKey)
|
|
let parsedMessageObj = originalMsg
|
|
try {
|
|
parsedMessageObj = JSON.parse(msgRes.decodedMessage)
|
|
decodedMsgs.push({
|
|
...msgRes,
|
|
decodedMessage: parsedMessageObj
|
|
})
|
|
} catch (error) {
|
|
|
|
}
|
|
|
|
})
|
|
|
|
const filterReactions = decodedMsgs.filter((message)=> {
|
|
if(!message.decodedMessage) return false
|
|
if(!message.decodedMessage.reactions || !Array.isArray(message.decodedMessage.reactions)) return false
|
|
return message.decodedMessage.reactions.length > 0
|
|
})
|
|
|
|
const filterWithoutReactions = decodedMsgs.filter((message)=> {
|
|
|
|
return message.sender === originalMsg.sender
|
|
})
|
|
|
|
if (filterReactions && Array.isArray(filterReactions) && filterReactions.length !== 0 && !newReactions) {
|
|
let responseItem = { ...filterReactions[0] }
|
|
let parsedMessageMsg = {}
|
|
try {
|
|
parsedMessageMsg = JSON.parse(originalMsg.decodedMessage)
|
|
|
|
} catch (error) {
|
|
|
|
}
|
|
let originalPosterMsg = {
|
|
...originalMsg,
|
|
decodedMessage: parsedMessageMsg
|
|
}
|
|
if(filterWithoutReactions.length > 0){
|
|
originalPosterMsg = {
|
|
...filterWithoutReactions[0]
|
|
}
|
|
|
|
|
|
}
|
|
|
|
originalPosterMsg.decodedMessage = JSON.stringify({
|
|
...originalPosterMsg.decodedMessage,
|
|
reactions: responseItem.decodedMessage.reactions
|
|
})
|
|
|
|
msgItem = {
|
|
...originalPosterMsg,
|
|
senderName: originalMsg.senderName,
|
|
sender: originalMsg.sender,
|
|
editedTimestamp: response[0].timestamp,
|
|
}
|
|
}
|
|
if (newReactions) {
|
|
let parsedMessageMsg = {}
|
|
try {
|
|
parsedMessageMsg = JSON.parse(originalMsg.decodedMessage)
|
|
|
|
} catch (error) {
|
|
|
|
}
|
|
let originalPosterMsg = {
|
|
...originalMsg,
|
|
decodedMessage: parsedMessageMsg
|
|
}
|
|
if(filterWithoutReactions.length > 0){
|
|
originalPosterMsg = {
|
|
...filterWithoutReactions[0]
|
|
}
|
|
|
|
|
|
}
|
|
|
|
originalPosterMsg.decodedMessage = JSON.stringify({
|
|
...originalPosterMsg.decodedMessage,
|
|
reactions: newReactions
|
|
})
|
|
|
|
msgItem = {
|
|
...originalPosterMsg,
|
|
senderName: originalMsg.senderName,
|
|
sender: originalMsg.sender,
|
|
editedTimestamp: response[0].timestamp,
|
|
}
|
|
}
|
|
|
|
|
|
if ((!Array.isArray(filterReactions) || (filterReactions || []).length === 0) && !newReactions && filterWithoutReactions.length > 0) {
|
|
let responseItem = { ...filterWithoutReactions[0] }
|
|
const originalPosterMsg = JSON.stringify(responseItem.decodedMessage)
|
|
msgItem = {
|
|
...responseItem,
|
|
decodedMessage: originalPosterMsg,
|
|
timestamp: originalMsg.timestamp,
|
|
editedTimestamp: responseItem.timestamp,
|
|
}
|
|
}
|
|
} catch (error) {
|
|
}
|
|
return msgItem
|
|
})
|
|
const updateMessages = await Promise.all(findNewMessages)
|
|
const findNewMessages2 = updateMessages.map(async (originalMsg) => {
|
|
let parsedMessageObj = originalMsg
|
|
try {
|
|
parsedMessageObj = JSON.parse(originalMsg.decodedMessage)
|
|
} catch (error) {
|
|
return originalMsg
|
|
}
|
|
let msgItem = originalMsg
|
|
try {
|
|
let msgQuery = `&involving=${originalMsg.recipient}&involving=${originalMsg.sender}`
|
|
if (!isReceipient) {
|
|
msgQuery = `&txGroupId=${originalMsg.txGroupId}`
|
|
}
|
|
if (parsedMessageObj.repliedTo) {
|
|
let originalReply
|
|
if(+parsedMessageObj.version > 2){
|
|
originalReply = await parentEpml.request("apiCall", {
|
|
type: "api",
|
|
url: `/chat/message/${parsedMessageObj.repliedTo}`,
|
|
})
|
|
}
|
|
if(+parsedMessageObj.version < 3){
|
|
originalReply = await parentEpml.request("apiCall", {
|
|
type: "api",
|
|
url: `/chat/messages?reference=${parsedMessageObj.repliedTo}&reverse=true${msgQuery}`,
|
|
})
|
|
}
|
|
|
|
|
|
const response = await parentEpml.request("apiCall", {
|
|
type: "api",
|
|
url: `/chat/messages?chatreference=${parsedMessageObj.repliedTo}&reverse=true${msgQuery}`,
|
|
})
|
|
|
|
let decodedMsgs = []
|
|
response.map((eachMessage) => {
|
|
const msgRes = decodeMessageFunc(eachMessage, isReceipient, _publicKey)
|
|
let parsedMessageObj = originalMsg
|
|
try {
|
|
parsedMessageObj = JSON.parse(msgRes.decodedMessage)
|
|
decodedMsgs.push({
|
|
...msgRes,
|
|
decodedMessage: parsedMessageObj
|
|
})
|
|
} catch (error) {
|
|
|
|
}
|
|
|
|
})
|
|
const filterWithoutReactions = decodedMsgs.filter((message)=> {
|
|
|
|
return message.sender === originalMsg.sender
|
|
})
|
|
const originalReplyMessage = originalReply.timestamp ? originalReply : originalReply.length !== 0 ? originalReply[0] : null
|
|
|
|
if (
|
|
originalReplyMessage &&
|
|
filterWithoutReactions &&
|
|
Array.isArray(filterWithoutReactions) &&
|
|
filterWithoutReactions.length !== 0
|
|
) {
|
|
const decodeOriginalReply = decodeMessageFunc(originalReplyMessage, isReceipient, _publicKey)
|
|
|
|
const decodeUpdatedReply = decodeMessageFunc(filterWithoutReactions[0], isReceipient, _publicKey)
|
|
const formattedRepliedToData = {
|
|
...decodeUpdatedReply,
|
|
senderName: decodeOriginalReply.senderName,
|
|
sender: decodeOriginalReply.sender,
|
|
}
|
|
msgItem = {
|
|
...originalMsg,
|
|
repliedToData: formattedRepliedToData,
|
|
}
|
|
} else {
|
|
|
|
|
|
if (
|
|
originalReplyMessage
|
|
) {
|
|
|
|
msgItem = {
|
|
...originalMsg,
|
|
repliedToData: decodeMessageFunc(originalReplyMessage, isReceipient, _publicKey),
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} catch (error) {
|
|
}
|
|
|
|
return msgItem
|
|
})
|
|
const updateMessages2 = await Promise.all(findNewMessages2)
|
|
|
|
return updateMessages2
|
|
}
|