| 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 |