blob: 06854113f0dcb6b039d97eddf6c80f0368509b78 [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