blob: 174ba03910cb27abcaf15da6c12ed17ee4760045 [file] [log] [blame]
import Contact from './Contact.js';
class Conversation {
constructor(id, accountId, members) {
this.id = id;
this.accountId = accountId;
this.members = members || [];
this.messages = [];
this.infos = {};
}
static from(accountId, object) {
const conversation = new Conversation(
object.id,
accountId,
object.members.map((member) => {
member.contact = Contact.from(member.contact);
return member;
})
);
conversation.messages = object.messages;
return conversation;
}
static fromSingleContact(accountId, contact) {
return new Conversation(undefined, accountId, [{ contact }]);
}
getId() {
return this.id;
}
getAccountId() {
return this.accountId;
}
getDisplayName() {
if (this.members.length !== 0) {
return this.members[0].contact.getDisplayName();
}
return this.getDisplayUri();
}
getDisplayNameNoFallback() {
if (this.members.length !== 0) {
return this.members[0].contact.getDisplayNameNoFallback();
}
}
async getObject(params) {
const members = params.memberFilter ? this.members.filter(params.memberFilter) : this.members;
return {
id: this.id,
messages: this.messages,
members: await Promise.all(
members.map(async (member) => {
const copiedMember = { role: member.role }; //Object.assign({}, member);
copiedMember.contact = await member.contact.getObject();
return copiedMember;
})
),
};
}
getSummary() {
return this.getObject();
}
getDisplayUri() {
return this.getId() || this.getFirstMember().contact.getUri();
}
getFirstMember() {
return this.members[0];
}
getMembers() {
return this.members;
}
addMessage(message) {
if (this.messages.length === 0) this.messages.push(message);
else if (message.id === this.messages[this.messages.length - 1].linearizedParent) {
this.messages.push(message);
} else if (message.linearizedParent === this.messages[0].id) {
this.messages.unshift(message);
} else {
console.log("Can't insert message " + message.id);
}
}
addLoadedMessages(messages) {
messages.forEach((message) => this.addMessage(message));
}
getMessages() {
return this.messages;
}
setInfos(infos) {
this.infos = infos;
}
}
export default Conversation;