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; } }