/* * Copyright (c) 2020 WildFireChat. All rights reserved. */ import MessageContent from './messageContent' import MessageContentType from './messageContentType'; import wfc from '../client/wfc' import QuoteInfo from "../model/quoteInfo"; export default class TextMessageContent extends MessageContent { content; quoteInfo; constructor(content, mentionedType = 0, mentionedTargets = []) { super(MessageContentType.Text, mentionedType, mentionedTargets); this.content = content; } digest() { return this.content; } encode() { let payload = super.encode(); payload.searchableContent = this.content; if (this.quoteInfo) { let obj = { "quote": this.quoteInfo.encode() } // JSON.parse 和 JSON.stringify 不能处理java long let orgStr = JSON.stringify(obj); let str = orgStr.replace(/"u":"([0-9]+)"/, "\"u\":$1"); payload.binaryContent = wfc.utf8_to_b64(str); } return payload; } decode(payload) { super.decode(payload); this.content = payload.searchableContent; if (payload.binaryContent && payload.binaryContent.length > 0) { // JSON.parse 和 JSON.stringify 不能处理java long let quoteInfoStr = wfc.b64_to_utf8(payload.binaryContent) // FIXME node 环境,decodeURIComponent 方法,有时候会在最后添加上@字符,目前尚未找到原因,先规避 quoteInfoStr = quoteInfoStr.substring(0, quoteInfoStr.lastIndexOf('}') + 1) quoteInfoStr = quoteInfoStr.replace(/"u":([0-9]+),/, '"u":"$1",') let obj = JSON.parse(quoteInfoStr).quote this.quoteInfo = new QuoteInfo(); this.quoteInfo.decode(obj); } } setQuoteInfo(quoteInfo) { this.quoteInfo = quoteInfo; } }