mirror of
https://github.com/jeffvli/feishin.git
synced 2026-05-14 20:40:21 +02:00
51 lines
1.4 KiB
TypeScript
51 lines
1.4 KiB
TypeScript
import isElectron from 'is-electron';
|
|
import { useCallback, useEffect } from 'react';
|
|
|
|
import { useCurrentStatus } from '/@/renderer/store';
|
|
import { useWindowSettings } from '/@/renderer/store';
|
|
import { PlayerStatus } from '/@/shared/types/types';
|
|
|
|
const ipc = isElectron() ? window.api.ipc : null;
|
|
|
|
export const usePowerSaveBlocker = () => {
|
|
const status = useCurrentStatus();
|
|
const { preventSleepOnPlayback } = useWindowSettings();
|
|
|
|
const startPowerSaveBlocker = useCallback(async () => {
|
|
if (!ipc) return;
|
|
|
|
try {
|
|
await ipc.invoke('power-save-blocker-start');
|
|
} catch (error) {
|
|
console.error('Failed to start power save blocker:', error);
|
|
}
|
|
}, []);
|
|
|
|
const stopPowerSaveBlocker = useCallback(async () => {
|
|
if (!ipc) return;
|
|
|
|
try {
|
|
await ipc.invoke('power-save-blocker-stop');
|
|
} catch (error) {
|
|
console.error('Failed to stop power save blocker:', error);
|
|
}
|
|
}, []);
|
|
|
|
useEffect(() => {
|
|
if (!preventSleepOnPlayback) return;
|
|
|
|
if (status === PlayerStatus.PLAYING) {
|
|
startPowerSaveBlocker();
|
|
} else {
|
|
stopPowerSaveBlocker();
|
|
}
|
|
}, [status, preventSleepOnPlayback, startPowerSaveBlocker, stopPowerSaveBlocker]);
|
|
|
|
// Clean up on unmount
|
|
useEffect(() => {
|
|
return () => {
|
|
stopPowerSaveBlocker();
|
|
};
|
|
}, [stopPowerSaveBlocker]);
|
|
};
|