wildfire-im-sdk
Version:
野火IM SDK for Vue3 projects
111 lines (96 loc) • 3.53 kB
JavaScript
/*
* Copyright (c) 2020 WildFireChat. All rights reserved.
*/
import Conversation from "./conversation";
import Message from "../messages/message";
import wfc from '../client/wfc'
import {eq, gt} from '../util/longUtil'
import ConversationType from "./conversationType";
export default class ConversationInfo {
conversation = {};
lastMessage = {};
timestamp = 0;
draft = '';
unreadCount = {};
top = 0;
isSilent = false;
// TODO cache, maybe userInfo, groupInfo
target;
static protoConversationToConversationInfo(obj) {
let conversationInfo = Object.assign(new ConversationInfo(), obj);
conversationInfo.top = obj.isTop;
delete conversationInfo.isTop;
if (obj.conversation) {
conversationInfo.conversation = new Conversation(obj.conversation.type, obj.conversation.target, obj.conversation.line);
} else {
conversationInfo.conversation = new Conversation(obj.conversationType, obj.target, obj.line);
}
conversationInfo.lastMessage = Message.fromProtoMessage(obj.lastMessage);
if (!conversationInfo.timestamp){
conversationInfo.timestamp = 0;
}
return conversationInfo;
}
portrait() {
let portrait = '';
switch (this.conversation.type) {
case ConversationType.Single:
let u = wfc.getUserInfo(this.conversation.target, false);
portrait = u.portrait;
break;
case ConversationType.Group:
let g = wfc.getGroupInfo(this.conversation.target, false);
portrait = g.portrait;
break;
case ConversationType.Channel:
break;
case ConversationType.ChatRoom:
break;
default:
break;
}
return portrait;
}
title() {
let targetName = this.conversation.target;
switch (this.conversation.type) {
case ConversationType.Single:
targetName = wfc.getUserDisplayName(this.conversation.target);
break;
case ConversationType.Group:
let g = wfc.getGroupInfo(this.conversation.target, false);
targetName = g.name;
break;
case ConversationType.ChatRoom:
break;
case ConversationType.Channel:
break;
default:
break;
}
return targetName;
}
static equals(info1, info2) {
if (!info1 || !info2) {
return false;
}
if (!info1.conversation.equal(info2.conversation)) {
return false;
}
let unreadCount1 = info1.unreadCount;
let unreadCount2 = info2.unreadCount;
if (unreadCount1.unread !== unreadCount2.unread
|| unreadCount1.unreadMention !== unreadCount2.unreadMention
|| unreadCount1.unreadMentionAll !== unreadCount2.unreadMentionAll) {
return false;
}
if ((info1.lastMessage && !info2.lastMessage) || (!info1.lastMessage && info2.lastMessage)) {
return false;
}
if (info1.lastMessage && info2.lastMessage && info1.lastMessage.messageId !== info2.lastMessage.messageId) {
return false;
}
// 其他的应当都会反应在timestamp上
return eq(info1.timestamp, info2.timestamp) && info1.draft === info2.draft;
}
}