blob: e5d3ffef64a5495de240e9fffc051113c8d8ffb6 [file] [log] [blame]
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