194 대화 회수 후 전달 대화방 목록 확인 시 대화상대없음 으로 보여짐 198 부재중 시간 설정 후 확인 시 부재중으로 변하지 않음 로그아웃시 idle 체크 해제 알림대화타입 대화전달 못하게 막음.
67 lines
1.7 KiB
TypeScript
67 lines
1.7 KiB
TypeScript
import { powerMonitor, BrowserWindow } from 'electron';
|
|
import { IdleStateChannel } from '@ucap-webmessenger/native-electron';
|
|
import { setInterval } from 'timers';
|
|
|
|
export enum IdleType {
|
|
ACTIVE = 'ACT',
|
|
IDLE = 'IDLE'
|
|
}
|
|
|
|
export class IdleChecker {
|
|
private limitSec: number;
|
|
private intervalObject: any;
|
|
private status: IdleType;
|
|
private window: BrowserWindow | null;
|
|
|
|
public constructor(window: BrowserWindow, limitedMin?: number) {
|
|
limitedMin = limitedMin || 10;
|
|
|
|
this.limitSec = limitedMin * 60;
|
|
this.intervalObject = null;
|
|
this.status = IdleType.ACTIVE;
|
|
this.window = window;
|
|
}
|
|
|
|
private doCheckIdle(): void {
|
|
const idle: number = powerMonitor.getSystemIdleTime();
|
|
if (idle > this.limitSec) {
|
|
if (this.status === IdleType.ACTIVE) {
|
|
this.status = IdleType.IDLE;
|
|
// TODO :: USER_STATUS change away
|
|
this.window.webContents.send(IdleStateChannel.Changed, this.status);
|
|
}
|
|
} else {
|
|
if (this.status === IdleType.IDLE) {
|
|
this.status = IdleType.ACTIVE;
|
|
// TODO :: USER_STATUS chage online
|
|
this.window.webContents.send(IdleStateChannel.Changed, this.status);
|
|
}
|
|
}
|
|
}
|
|
|
|
public resetIdleTime(limitedMin: number): void {
|
|
limitedMin = limitedMin || 10;
|
|
|
|
if (!!this.intervalObject) {
|
|
clearInterval(this.intervalObject);
|
|
this.intervalObject = undefined;
|
|
}
|
|
this.limitSec = limitedMin * 60;
|
|
|
|
this.startChecker();
|
|
}
|
|
|
|
public startChecker() {
|
|
if (!this.intervalObject) {
|
|
this.intervalObject = setInterval(() => this.doCheckIdle(), 1000);
|
|
}
|
|
}
|
|
|
|
public destoryChecker() {
|
|
if (!!this.intervalObject) {
|
|
clearInterval(this.intervalObject);
|
|
this.intervalObject = undefined;
|
|
}
|
|
}
|
|
}
|