open-webui/src/lib/utils/wakeLock.ts
Timothy Jaeryang Baek a9227421d8 refac
2026-10-12 17:57:07 +04:00

32 lines
973 B
TypeScript

export const acquireWakeLock = () => {
if (typeof navigator === 'undefined' || !('wakeLock' in navigator)) return () => {};
let lock: WakeLockSentinel | null = null;
let stopped = false;
let pending = false;
const request = async () => {
if (stopped || pending || (lock && !lock.released) || document.visibilityState !== 'visible')
return;
pending = true;
try {
const acquired = await navigator.wakeLock.request('screen');
// Cleanup can run while the browser is still granting the lock.
if (stopped) await acquired.release();
else lock = acquired;
} catch (error) {
console.log('Wake Lock request failed:', error);
} finally {
pending = false;
}
};
document.addEventListener('visibilitychange', request);
void request();
return () => {
stopped = true;
document.removeEventListener('visibilitychange', request);
void lock?.release().catch((error) => console.log('Wake Lock release failed:', error));
lock = null;
};
};