wildfire-im-sdk
Version:
野火IM SDK for Vue3 projects
65 lines (57 loc) • 1.74 kB
JavaScript
// 文件、图片、视频、文字混合消息
// 列表排列,媒体在前,文字在最后
import MessageContent from "./messageContent";
import MessageContentType from "./messageContentType";
import wfc from "../client/wfc";
export default class MixFileTextMessageContent extends MessageContent {
/**
* 媒体文件列表
* @type {FileEntry[]}
*/
files = []
text = ''
/**
*
* @param files :FileEntry[]
* @param text :string
*/
constructor(files, text = '') {
super(MessageContentType.MESSAGE_CONTENT_TYPE_MIX_FILE_TEXT);
if (files && files.length > 10) {
console.error('文件混排消息,一次最多支持 10 个文件')
files = files.slice(0, 9);
}
this.files = files;
this.text = text;
}
digest() {
return '[文件混排组合] ' + this.text;
}
encode() {
let payload = super.encode();
payload.searchableContent = this.text;
// 发送时,不需要带上 localPath,localPath 只是本地使用
this.files.forEach(m => m.localPath = '')
let obj = {
"mu": this.files
}
let str = JSON.stringify(obj);
payload.binaryContent = wfc.utf8_to_b64(str);
return payload;
}
decode(payload) {
super.decode(payload);
this.text = payload.searchableContent;
if (payload.binaryContent && payload.binaryContent.length > 0) {
let muStr = wfc.b64_to_utf8(payload.binaryContent)
this.files = JSON.parse(muStr).mu
}
}
}
class FileEntry {
url = ''
localPath = ''
name = ''
size = 0
iv = false // 是否是图片或视频
}