blob: 956b1c921db688f4cf470276011d50fbb477b2d4 [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;