blob: 85fe48f8ac95482e0c317b7db957f002517ffa16 [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 = []
9 }
10
Adrien Béraud35e7d7c2021-04-13 03:28:39 -040011 static from(accountId, object) {
Adrien Béraud5e9e19b2021-04-22 01:38:53 -040012 const conversation = new Conversation(object.id, accountId, object.members.map(member => {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -040013 member.contact = Contact.from(member.contact)
14 return member
15 }))
Adrien Béraud5e9e19b2021-04-22 01:38:53 -040016 conversation.messages = object.messages
17 return conversation
Adrien Béraud35e7d7c2021-04-13 03:28:39 -040018 }
19 static fromSingleContact(accountId, contact) {
20 return new Conversation(undefined, accountId, [{contact}])
Adrien Béraudc4dd44a2021-04-08 01:05:24 -040021 }
22
23 getId() { return this.id }
24
Adrien Béraud35e7d7c2021-04-13 03:28:39 -040025 getAccountId() { return this.accountId }
26
Adrien Béraudc4dd44a2021-04-08 01:05:24 -040027 getDisplayName() {
Adrien Béraud995e8022021-04-08 13:46:51 -040028 if (this.members.length !== 0) {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -040029 return this.members[0].contact.getDisplayName()
Adrien Béraud995e8022021-04-08 13:46:51 -040030 }
31 return this.getDisplayUri()
Adrien Béraudc4dd44a2021-04-08 01:05:24 -040032 }
33
Adrien Béraud150b4782021-04-21 19:40:59 -040034 getDisplayNameNoFallback() {
35 if (this.members.length !== 0) {
36 return this.members[0].contact.getDisplayNameNoFallback()
37 }
38 }
39
40 async getObject(params) {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -040041 const members = params.memberFilter ? this.members.filter(params.memberFilter) : this.members
Adrien Béraudc4dd44a2021-04-08 01:05:24 -040042 return {
43 id: this.id,
Adrien Béraud5e9e19b2021-04-22 01:38:53 -040044 messages: this.messages,
Adrien Béraud150b4782021-04-21 19:40:59 -040045 members: await Promise.all(members.map(async member => {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -040046 const copiedMember = { role: member.role }//Object.assign({}, member);
Adrien Béraud150b4782021-04-21 19:40:59 -040047 copiedMember.contact = await member.contact.getObject()
Adrien Béraud35e7d7c2021-04-13 03:28:39 -040048 return copiedMember
Adrien Béraud150b4782021-04-21 19:40:59 -040049 }))
Adrien Béraudc4dd44a2021-04-08 01:05:24 -040050 }
51 }
52
53 getSummary() {
54 return this.getObject()
55 }
56
57 getDisplayUri() {
Adrien Béraud35e7d7c2021-04-13 03:28:39 -040058 return this.getId() || this.getFirstMember().contact.getUri()
59 }
60
61 getFirstMember() {
62 return this.members[0]
63 }
64
65 getMembers() {
66 return this.members
Adrien Béraudc4dd44a2021-04-08 01:05:24 -040067 }
68
69 addMessage(message) {
Adrien Béraud4e287b92021-04-24 16:15:56 -040070 if (this.messages.length === 0)
71 this.messages.push(message)
72 else if (message.id === this.messages[this.messages.length - 1].linearizedParent) {
73 this.messages.push(message)
74 } else if (message.linearizedParent === this.messages[0].id) {
75 this.messages.unshift(message)
76 } else {
77 console.log("Can't insert message " + message.id)
78 }
79 }
80
81 addLoadedMessages(messages) {
82 messages.forEach(message => this.addMessage(message))
Adrien Béraudc4dd44a2021-04-08 01:05:24 -040083 }
Adrien Béraud5e9e19b2021-04-22 01:38:53 -040084
85 getMessages() {
86 return this.messages
87 }
Adrien Béraudc4dd44a2021-04-08 01:05:24 -040088}
89
Adrien Béraude74741b2021-04-19 13:22:54 -040090export default Conversation;