blob: e616ae1fabefbf3a18f6429d2dd2dafcce843076 [file] [log] [blame]
/*
* Copyright (C) 2022 Savoir-faire Linux Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation; either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public
* License along with this program. If not, see
* <https://www.gnu.org/licenses/>.
*/
import { AccountDetails, Devices, IAccount, VolatileDetails } from 'jami-web-common';
import { Contact } from './contact';
export type AccountType = 'RING' | 'SIP';
export class Account implements IAccount {
readonly id: string;
details: AccountDetails;
volatileDetails: VolatileDetails;
defaultModerators: Contact[] = [];
devices: Devices = {};
contacts: Contact[] = [];
constructor(id: string, details: AccountDetails, volatileDetails: VolatileDetails) {
this.id = id;
this.details = details;
this.volatileDetails = volatileDetails;
}
static fromInterface(accountInterface: IAccount) {
const account = new Account(accountInterface.id, accountInterface.details, accountInterface.volatileDetails);
account.defaultModerators = accountInterface.defaultModerators.map(Contact.fromInterface);
return account;
}
getType(): AccountType {
return this.details['Account.type'] as AccountType;
}
getUri() {
return this.details['Account.username'];
}
getRegisteredName() {
return this.volatileDetails['Account.registeredName'];
}
isRendezVous() {
return this.details['Account.rendezVous'] === 'true';
}
isPublicIn() {
return this.details['DHT.PublicInCalls'] === 'true';
}
updateDetails(details: Partial<AccountDetails>) {
this.details = { ...this.details, ...details };
}
getDisplayUri() {
return this.getRegisteredName() ?? this.getUri();
}
getDisplayName() {
return this.details['Account.displayName'] || this.getDisplayUri();
}
getDisplayNameNoFallback() {
return this.details['Account.displayName'] || this.getRegisteredName();
}
}