| import Contact from './Contact.js'; |
| |
| class Account { |
| constructor(id, details, volatileDetails) { |
| this.id = id; |
| this.details = details; |
| this.volatileDetails = volatileDetails; |
| this.contactCache = {}; |
| this.contacts = {}; |
| this.conversations = {}; |
| this.lookups = []; |
| this.devices = {}; |
| } |
| |
| static from(object) { |
| const account = new Account(object.id, object.details, object.volatileDetails); |
| if (object.defaultModerators) account.defaultModerators = object.defaultModerators.map((m) => Contact.from(m)); |
| return account; |
| } |
| |
| update(data) { |
| this.details = data.details; |
| this.volatileDetails = data.volatileDetails; |
| } |
| |
| async getObject() { |
| const hasModerators = this.defaultModerators && this.defaultModerators.length; |
| return { |
| id: this.id, |
| details: this.details, |
| defaultModerators: hasModerators |
| ? await Promise.all(this.defaultModerators.map(async (c) => await c.getObject())) |
| : undefined, |
| volatileDetails: this.volatileDetails, |
| }; |
| } |
| |
| getId() { |
| return this.id; |
| } |
| |
| getType() { |
| return this.details['Account.type']; |
| } |
| |
| getUri() { |
| return this.details['Account.username']; |
| } |
| |
| getRegisteredName() { |
| return this.volatileDetails['Account.registeredName']; |
| } |
| |
| isRendezVous() { |
| return this.details['Account.rendezVous'] === Account.BOOL_TRUE; |
| } |
| |
| isPublicIn() { |
| return this.details['DHT.PublicInCalls'] === Account.BOOL_TRUE; |
| } |
| |
| setDetail(detail, value) { |
| this.details[detail] = value; |
| } |
| |
| updateDetails(details) { |
| return Object.assign(this.details, details); |
| } |
| |
| getDetails() { |
| return this.details; |
| } |
| |
| getSummary() { |
| return this.getObject(); |
| } |
| |
| getDisplayName() { |
| return this.details['Account.displayName'] || this.getDisplayUri(); |
| } |
| |
| getDisplayUri() { |
| return this.getRegisteredName() || this.getUri(); |
| } |
| |
| getDisplayNameNoFallback() { |
| return this.details['Account.displayName'] || this.getRegisteredName(); |
| } |
| |
| getConversationIds() { |
| return Object.keys(this.conversations); |
| } |
| getConversations() { |
| return this.conversations; |
| } |
| |
| getConversation(conversationId) { |
| return this.conversations[conversationId]; |
| } |
| |
| addConversation(conversation) { |
| this.conversations[conversation.getId()] = conversation; |
| } |
| |
| removeConversation(conversationId) { |
| delete this.conversations[conversationId]; |
| } |
| |
| getContactFromCache(uri) { |
| let contact = this.contactCache[uri]; |
| if (!contact) { |
| contact = new Contact(uri); |
| this.contactCache[uri] = contact; |
| } |
| return contact; |
| } |
| |
| getContacts() { |
| return this.contacts; |
| } |
| |
| getDefaultModerators() { |
| return this.defaultModerators; |
| } |
| |
| setDevices(devices) { |
| this.devices = { ...devices }; |
| } |
| getDevices() { |
| return this.devices; |
| } |
| } |
| |
| Account.TYPE_JAMI = 'RING'; |
| Account.TYPE_SIP = 'SIP'; |
| |
| Account.BOOL_TRUE = 'true'; |
| Account.BOOL_FALSE = 'false'; |
| |
| export default Account; |