wildfire-im-sdk
Version:
野火IM SDK for Vue3 projects
60 lines (49 loc) • 1.92 kB
JavaScript
/*
* 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;
}
}