wildfire-im-sdk
Version:
野火IM SDK for Vue3 projects
98 lines (84 loc) • 2.42 kB
JavaScript
import MessageContent from "./messageContent";
import MessageContentType from "./messageContentType";
import wfc from "../client/wfc";
import LinkMessageContent from "./linkMessageContent";
export default class ArticlesMessageContent extends MessageContent {
topArticle;
subArticles;
constructor() {
super(MessageContentType.Articles);
}
digest(message) {
return this.topArticle.title;
}
encode() {
let payload = super.encode();
let obj = {
top: this.topArticle.toJson(),
}
if (this.subArticles) {
obj['subArticles'] = this.subArticles.map(article => article.toJson());
}
payload.binaryContent = wfc.utf8_to_b64(JSON.stringify(obj));
return payload;
}
decode(payload) {
super.decode(payload);
let obj = JSON.parse(wfc.b64_to_utf8(payload.binaryContent));
this.topArticle = new Article();
this.topArticle.fromJson(obj.top);
if (obj.subArticles) {
this.subArticles = [];
obj.subArticles.forEach(article => {
let tmp = new Article();
tmp.fromJson(article);
this.subArticles.push(tmp);
})
}
}
toLinkMessageContent() {
let contents = [];
contents.push(this.topArticle.toLinkMessageContent())
if (this.subArticles) {
this.subArticles.forEach(article => {
contents.push(article.toLinkMessageContent())
})
}
return contents;
}
}
class Article {
articleId;
cover;
title;
digest;
url;
readReport;
toJson() {
let obj = {
id: this.articleId,
cover: this.cover,
title: this.title,
url: this.url,
digest: this.digest,
rr: this.readReport
}
return obj;
}
fromJson(obj) {
this.articleId = obj.id;
this.cover = obj.cover;
this.title = obj.title;
this.digest = obj.digest;
this.url = obj.url;
this.readReport = obj.rr;
}
toLinkMessageContent() {
let content = new LinkMessageContent();
content.url = this.url;
content.title = this.title;
content.contentDigest = this.digest;
content.thumbnail = this.cover;
return content;
}
}