blob: 956b1c921db688f4cf470276011d50fbb477b2d4 [file] [log] [blame]
Adrien Béraude74741b2021-04-19 13:22:54 -04001import Contact from './Contact.js'
Adrien Béraud35e7d7c2021-04-13 03:28:39 -04002
Adrien Béraudc4dd44a2021-04-08 01:05:24 -04003class Conversation {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -04004 constructor(id, accountId, members) {
Adrien Béraudc4dd44a2021-04-08 01:05:24 -04005 this.id = id
Adrien Béraud35e7d7c2021-04-13 03:28:39 -04006 this.accountId = accountId
Adrien Béraud995e8022021-04-08 13:46:51 -04007 this.members = members || []
Adrien Béraudc4dd44a2021-04-08 01:05:24 -04008 this.messages = []
ervinanohb81c3912022-09-08 04:13:24 -04009 this.infos = {}
Adrien Béraudc4dd44a2021-04-08 01:05:24 -040010 }
11
Adrien Béraud35e7d7c2021-04-13 03:28:39 -040012 static from(accountId, object) {
Adrien Béraud5e9e19b2021-04-22 01:38:53 -040013 const conversation = new Conversation(object.id, accountId, object.members.map(member => {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -040014 member.contact = Contact.from(member.contact)
15 return member
16 }))
Adrien Béraud5e9e19b2021-04-22 01:38:53 -040017 conversation.messages = object.messages
18 return conversation
Adrien Béraud35e7d7c2021-04-13 03:28:39 -040019 }
20 static fromSingleContact(accountId, contact) {
21 return new Conversation(undefined, accountId, [{contact}])
Adrien Béraudc4dd44a2021-04-08 01:05:24 -040022 }
23
24 getId() { return this.id }
25
Adrien Béraud35e7d7c2021-04-13 03:28:39 -040026 getAccountId() { return this.accountId }
27
Adrien Béraudc4dd44a2021-04-08 01:05:24 -040028 getDisplayName() {
Adrien Béraud995e8022021-04-08 13:46:51 -040029 if (this.members.length !== 0) {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -040030 return this.members[0].contact.getDisplayName()
Adrien Béraud995e8022021-04-08 13:46:51 -040031 }
32 return this.getDisplayUri()
Adrien Béraudc4dd44a2021-04-08 01:05:24 -040033 }
34
Adrien Béraud150b4782021-04-21 19:40:59 -040035 getDisplayNameNoFallback() {
36 if (this.members.length !== 0) {
37 return this.members[0].contact.getDisplayNameNoFallback()
38 }
39 }
40
41 async getObject(params) {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -040042 const members = params.memberFilter ? this.members.filter(params.memberFilter) : this.members
Adrien Béraudc4dd44a2021-04-08 01:05:24 -040043 return {
44 id: this.id,
Adrien Béraud5e9e19b2021-04-22 01:38:53 -040045 messages: this.messages,
Adrien Béraud150b4782021-04-21 19:40:59 -040046 members: await Promise.all(members.map(async member => {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -040047 const copiedMember = { role: member.role }//Object.assign({}, member);
Adrien Béraud150b4782021-04-21 19:40:59 -040048 copiedMember.contact = await member.contact.getObject()
Adrien Béraud35e7d7c2021-04-13 03:28:39 -040049 return copiedMember
Adrien Béraud150b4782021-04-21 19:40:59 -040050 }))
Adrien Béraudc4dd44a2021-04-08 01:05:24 -040051 }
52 }
53
54 getSummary() {
55 return this.getObject()
56 }
57
58 getDisplayUri() {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -040059 return this.getId() || this.getFirstMember().contact.getUri()
60 }
61
62 getFirstMember() {
63 return this.members[0]
64 }
65
66 getMembers() {
67 return this.members
Adrien Béraudc4dd44a2021-04-08 01:05:24 -040068 }
69
70 addMessage(message) {
Adrien Béraud4e287b92021-04-24 16:15:56 -040071 if (this.messages.length === 0)
72 this.messages.push(message)
73 else if (message.id === this.messages[this.messages.length - 1].linearizedParent) {
74 this.messages.push(message)
75 } else if (message.linearizedParent === this.messages[0].id) {
76 this.messages.unshift(message)
77 } else {
78 console.log("Can't insert message " + message.id)
79 }
80 }
81
82 addLoadedMessages(messages) {
83 messages.forEach(message => this.addMessage(message))
Adrien Béraudc4dd44a2021-04-08 01:05:24 -040084 }
Adrien Béraud5e9e19b2021-04-22 01:38:53 -040085
86 getMessages() {
87 return this.messages
88 }
ervinanohb81c3912022-09-08 04:13:24 -040089
90 setInfos(infos){
91 this.infos = infos
92 }
Adrien Béraudc4dd44a2021-04-08 01:05:24 -040093}
94
Adrien Béraude74741b2021-04-19 13:22:54 -040095export default Conversation;