mirror of
https://github.com/antebudimir/feishin.git
synced 2026-01-01 18:33:33 +00:00
add setting to prevent sleep on playback (#1072)
This commit is contained in:
parent
40fb5ba916
commit
b00305cc86
7 changed files with 114 additions and 0 deletions
|
|
@ -6,6 +6,7 @@ import { AudioPlayer } from '/@/renderer/components';
|
|||
import { CenterControls } from '/@/renderer/features/player/components/center-controls';
|
||||
import { LeftControls } from '/@/renderer/features/player/components/left-controls';
|
||||
import { RightControls } from '/@/renderer/features/player/components/right-controls';
|
||||
import { usePowerSaveBlocker } from '/@/renderer/features/player/hooks/use-power-save-blocker';
|
||||
import { PlayersRef } from '/@/renderer/features/player/ref/players-ref';
|
||||
import { updateSong } from '/@/renderer/features/player/update-remote-song';
|
||||
import {
|
||||
|
|
@ -41,6 +42,8 @@ export const Playerbar = () => {
|
|||
const { expanded: isFullScreenPlayerExpanded } = useFullScreenPlayerStore();
|
||||
const setFullScreenPlayerStore = useSetFullScreenPlayerStore();
|
||||
|
||||
usePowerSaveBlocker();
|
||||
|
||||
const handleToggleFullScreenPlayer = (e?: KeyboardEvent | MouseEvent<HTMLDivElement>) => {
|
||||
e?.stopPropagation();
|
||||
setFullScreenPlayerStore({ expanded: !isFullScreenPlayerExpanded });
|
||||
|
|
|
|||
50
src/renderer/features/player/hooks/use-power-save-blocker.ts
Normal file
50
src/renderer/features/player/hooks/use-power-save-blocker.ts
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
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]);
|
||||
};
|
||||
Loading…
Add table
Add a link
Reference in a new issue