Telegram Web K with changes to work inside I2P https://web.telegram.i2p/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

86 lines
2.4 KiB

/*
* https://github.com/morethanwords/tweb
* Copyright (C) 2019-2021 Eduard Kuzmenko
* https://github.com/morethanwords/tweb/blob/master/LICENSE
*/
import replaceContent from '../../helpers/dom/replaceContent';
import toHHMMSS from '../../helpers/string/toHHMMSS';
import CALL_STATE from '../../lib/calls/callState';
import {i18n, LangPackKey} from '../../lib/langPack';
export default class CallDescriptionElement {
private container: HTMLElement;
private state: CALL_STATE;
private interval: number;
constructor(private appendTo: HTMLElement) {
this.container = document.createElement('div');
this.container.classList.add('call-description');
}
public detach() {
if(this.interval !== undefined) {
clearInterval(this.interval);
this.interval = undefined;
}
this.container.remove();
this.state = undefined;
}
public update(instance: any) {
const {connectionState} = instance;
if(this.state === connectionState) {
return;
}
this.state = connectionState;
let element: HTMLElement;
if(connectionState === CALL_STATE.CONNECTED) {
element = document.createElement('span');
element.classList.add('call-description-duration');
const setTime = () => {
element.innerText = toHHMMSS(instance.duration, true);
};
this.interval = window.setInterval(setTime, 1000);
setTime();
} else {
let langPackKey: LangPackKey;
switch(connectionState) {
case CALL_STATE.PENDING:
langPackKey = instance.isOutgoing ? 'Call.StatusRinging' : 'Call.StatusCalling';
break;
case CALL_STATE.REQUESTING:
langPackKey = 'Call.StatusRequesting';
break;
case CALL_STATE.EXCHANGING_KEYS:
langPackKey = 'VoipExchangingKeys';
break;
case CALL_STATE.CLOSED:
langPackKey = instance.connectedAt !== undefined ? 'Call.StatusEnded' : 'Call.StatusFailed';
break;
default:
langPackKey = 'Call.StatusConnecting';
break;
}
element = i18n(langPackKey);
if(this.interval !== undefined) {
clearInterval(this.interval);
this.interval = undefined;
}
}
this.container.classList.toggle('has-duration', connectionState === CALL_STATE.CONNECTED);
replaceContent(this.container, element);
if(!this.container.parentElement) {
this.appendTo.append(this.container);
}
}
}