()
for (let i = 0; i < totalMessages; i++) {
@@ -6790,15 +7032,31 @@ class ExportService {
msg.senderUsername,
msg.isSend
) || '')
+ const quotedReplyDisplay = await this.resolveQuotedReplyDisplayWithNames({
+ content: msg.content,
+ isGroup,
+ displayNamePreference: options.displayNamePreference,
+ getContact: getContactCached,
+ groupNicknamesMap,
+ cleanedMyWxid,
+ rawMyWxid,
+ myDisplayName: myInfo.displayName || cleanedMyWxid
+ })
+ const finalMsgText = quotedReplyDisplay
+ ? this.buildQuotedReplyText(quotedReplyDisplay)
+ : msgText
const src = this.getWeCloneSource(msg, typeName, mediaItem)
+ const platformMessageId = this.getExportPlatformMessageId(msg) || ''
+ const replyToMessageId = this.getExportReplyToMessageId(msg.content) || ''
const row = [
i + 1,
- i + 1,
+ platformMessageId,
+ replyToMessageId,
typeName,
msg.isSend ? 1 : 0,
talker,
- msgText,
+ finalMsgText,
src,
this.formatIsoTimestamp(msg.createTime)
]
@@ -7270,8 +7528,18 @@ class ExportService {
const timeText = this.formatTimestamp(msg.createTime)
const typeName = this.getMessageTypeName(msg.localType)
+ const quotedReplyDisplay = await this.resolveQuotedReplyDisplayWithNames({
+ content: msg.content,
+ isGroup,
+ displayNamePreference: options.displayNamePreference,
+ getContact: getContactCached,
+ groupNicknamesMap,
+ cleanedMyWxid,
+ rawMyWxid,
+ myDisplayName: myInfo.displayName || cleanedMyWxid
+ })
- let textContent = this.formatHtmlMessageText(
+ let textContent = quotedReplyDisplay?.replyText || this.formatHtmlMessageText(
msg.content,
msg.localType,
cleanedMyWxid,
@@ -7302,7 +7570,7 @@ class ExportService {
}
}
- const linkCard = this.extractHtmlLinkCard(msg.content, msg.localType)
+ const linkCard = quotedReplyDisplay ? null : this.extractHtmlLinkCard(msg.content, msg.localType)
let mediaHtml = ''
if (mediaItem?.kind === 'image') {
@@ -7318,25 +7586,40 @@ class ExportService {
mediaHtml = ``
}
- const textHtml = linkCard
- ? ``
- : (textContent
- ? `${this.renderTextWithEmoji(textContent).replace(/\r?\n/g, '
')}
`
- : '')
+ const textHtml = quotedReplyDisplay
+ ? (() => {
+ const quotedSenderHtml = quotedReplyDisplay.quotedSender
+ ? `${this.escapeHtml(quotedReplyDisplay.quotedSender)}
`
+ : ''
+ const quotedPreviewHtml = `${this.renderTextWithEmoji(quotedReplyDisplay.quotedPreview).replace(/\r?\n/g, '
')}
`
+ const replyTextHtml = textContent
+ ? `${this.renderTextWithEmoji(textContent).replace(/\r?\n/g, '
')}
`
+ : ''
+ return `${quotedSenderHtml}${quotedPreviewHtml}
${replyTextHtml}`
+ })()
+ : (linkCard
+ ? ``
+ : (textContent
+ ? `${this.renderTextWithEmoji(textContent).replace(/\r?\n/g, '
')}
`
+ : ''))
const senderNameHtml = isGroup
? `${this.escapeHtml(resolvedSenderName)}
`
: ''
const timeHtml = `${this.escapeHtml(timeText)}
`
const messageBody = `${timeHtml}${senderNameHtml}${mediaHtml}${textHtml}
`
+ const platformMessageId = this.getExportPlatformMessageId(msg)
+ const replyToMessageId = this.getExportReplyToMessageId(msg.content)
// Compact JSON object
- const itemObj = {
+ const itemObj: Record = {
i: i + 1, // index
t: msg.createTime, // timestamp
s: isSenderMe ? 1 : 0, // isSend
a: avatarHtml, // avatar HTML
b: messageBody // body HTML
}
+ if (platformMessageId) itemObj.p = platformMessageId
+ if (replyToMessageId) itemObj.r = replyToMessageId
writeBuf.push(JSON.stringify(itemObj))
@@ -7384,8 +7667,10 @@ class ExportService {
// Render Item Function
const renderItem = (item, index) => {
const isSenderMe = item.s === 1;
+ const platformIdAttr = item.p ? \` data-platform-message-id="\${item.p}"\` : '';
+ const replyToAttr = item.r ? \` data-reply-to-message-id="\${item.r}"\` : '';
return \`
-