95 lines
2.5 KiB
JavaScript
95 lines
2.5 KiB
JavaScript
export const FullyKioskMixin = (C) =>
|
|
class extends C {
|
|
get isFully() {
|
|
return window.fully !== undefined;
|
|
}
|
|
|
|
constructor() {
|
|
super();
|
|
|
|
if (!this.isFully) return;
|
|
|
|
this._fullyMotion = false;
|
|
this._motionTimeout = undefined;
|
|
|
|
for (const ev of [
|
|
"screenOn",
|
|
"screenOff",
|
|
"pluggedAC",
|
|
"pluggedUSB",
|
|
"onBatteryLevelChanged",
|
|
"unplugged",
|
|
"networkReconnect",
|
|
"onMotion",
|
|
]) {
|
|
window.fully.bind(ev, `window.browser_mod.fully_update("${ev}");`);
|
|
}
|
|
|
|
window.fully.bind(
|
|
"onScreensaverStart",
|
|
`window.browser_mod.fully_screensaver = true; window.browser_mod.screen_update();`
|
|
);
|
|
window.fully.bind(
|
|
"onScreensaverStop",
|
|
`window.browser_mod.fully_screensaver = false; window.browser_mod.screen_update();`
|
|
);
|
|
|
|
this._keepingAlive = false;
|
|
}
|
|
|
|
fully_update(event) {
|
|
if (!this.isFully) return;
|
|
if (event === "screenOn") {
|
|
window.clearTimeout(this._keepAliveTimer);
|
|
if (!this._keepingAlive) this.screen_update();
|
|
} else if (event === "screenOff") {
|
|
this.screen_update();
|
|
this._keepingAlive = false;
|
|
if (this.config.force_stay_awake) {
|
|
this._keepAliveTimer = window.setTimeout(() => {
|
|
this._keepingAlive = true;
|
|
window.fully.turnScreenOn();
|
|
window.fully.turnScreenOff();
|
|
}, 270000);
|
|
}
|
|
} else if (event === "onMotion") {
|
|
this.fullyMotionTriggered();
|
|
}
|
|
|
|
this.sendUpdate({
|
|
fully: {
|
|
battery: window.fully.getBatteryLevel(),
|
|
charging: window.fully.isPlugged(),
|
|
motion: this._fullyMotion,
|
|
ip: window.fully.getIp4Address(),
|
|
},
|
|
});
|
|
}
|
|
|
|
startCamera() {
|
|
if (this._fullyCameraTimer !== undefined) return;
|
|
this._fullyCameraTimer = window.setInterval(() => {
|
|
this.sendUpdate({
|
|
camera: window.fully.getCamshotJpgBase64(),
|
|
});
|
|
}, 200);
|
|
}
|
|
stopCamera() {
|
|
window.clearInterval(this._fullyCameraTimer);
|
|
this._fullyCameraTimer = undefined;
|
|
}
|
|
|
|
fullyMotionTriggered() {
|
|
if (this._keepingAlive) return;
|
|
this._fullyMotion = true;
|
|
this.startCamera();
|
|
clearTimeout(this._motionTimeout);
|
|
this._motionTimeout = setTimeout(() => {
|
|
this._fullyMotion = false;
|
|
this.stopCamera();
|
|
this.fully_update();
|
|
}, 5000);
|
|
this.fully_update();
|
|
}
|
|
};
|