新增播放歌曲时阻止电脑休眠(#1563)

This commit is contained in:
lyswhut
2024-01-22 12:42:46 +08:00
parent 47635c95e1
commit b13f10d624
13 changed files with 89 additions and 3 deletions
+22
View File
@@ -3,6 +3,7 @@ import { qualityList } from '@renderer/store'
import { clearPlayedList } from '@renderer/store/player/action'
import { appSetting } from '@renderer/store/setting'
import { dislikeInfo } from '@renderer/store/dislikeList'
import { setPowerSaveBlocker as setPowerSaveBlockerRemote } from '@renderer/utils/ipc'
export const getPlayType = (highQuality: boolean, musicInfo: LX.Music.MusicInfo | LX.Download.ListItem): LX.Quality | null => {
if ('progress' in musicInfo || musicInfo.source == 'local') return null
@@ -41,3 +42,24 @@ export const filterList = async({ playedList, listId, list, playerMusicInfo, isN
return { filteredList: markRawList(filteredList), playerIndex }
}
let timeout: NodeJS.Timer | null = null
const clearTimer = () => {
if (!timeout) return
clearTimeout(timeout)
timeout = null
}
export const setPowerSaveBlocker = (enabled: boolean, force = false) => {
if (enabled) {
clearTimer()
if (!force && !appSetting['player.powerSaveBlocker']) return
setPowerSaveBlockerRemote(true)
} else if (force) {
clearTimer()
setPowerSaveBlockerRemote(false)
} else {
if (timeout) return
timeout = setTimeout(() => {
setPowerSaveBlockerRemote(false)
}, 60_000 * 1.5)
}
}
@@ -32,6 +32,7 @@ import { HOTKEY_PLAYER } from '@common/hotKey'
import { playNext, pause, playPrev, togglePlay, collectMusic, uncollectMusic, dislikeMusic } from '@renderer/core/player'
import usePlaybackRate from './usePlaybackRate'
import useSoundEffect from './useSoundEffect'
import { setPowerSaveBlocker } from '@renderer/core/player/utils'
export default () => {
@@ -53,12 +54,20 @@ export default () => {
void playPrev()
}
const addPowerSaveBlocker = () => {
setPowerSaveBlocker(true)
}
const removePowerSaveBlocker = () => {
setPowerSaveBlocker(false)
}
const setPlayStatus = () => {
setPlay(true)
}
const setPauseStatus = () => {
setPlay(false)
if (window.lx.isPlayedStop) pause()
removePowerSaveBlocker()
}
const handleUpdatePlayInfo = () => {
@@ -88,6 +97,7 @@ export default () => {
setTitle(null)
setAllStatus('')
setStop()
removePowerSaveBlocker()
}
watch(() => appSetting['player.togglePlayMethod'], newValue => {
@@ -112,6 +122,8 @@ export default () => {
window.app_event.on('stop', setStopStatus)
window.app_event.on('musicToggled', handleUpdatePlayInfo)
window.app_event.on('playerCanplay', handleCanplay)
window.app_event.on('playerPlaying', addPowerSaveBlocker)
window.app_event.on('playerEmptied', removePowerSaveBlocker)
window.app_event.on('playerEnded', handleEnded)
@@ -132,7 +144,9 @@ export default () => {
window.app_event.off('error', setPauseStatus)
window.app_event.off('stop', setStopStatus)
window.app_event.off('musicToggled', handleUpdatePlayInfo)
window.app_event.on('playerCanplay', handleCanplay)
window.app_event.off('playerPlaying', addPowerSaveBlocker)
window.app_event.off('playerEmptied', removePowerSaveBlocker)
window.app_event.off('playerCanplay', handleCanplay)
window.app_event.off('playerEnded', handleEnded)
})
+6
View File
@@ -687,6 +687,12 @@ export const showHideWindowToggle = () => {
export const focusWindow = () => {
rendererSend(WIN_MAIN_RENDERER_EVENT_NAME.focus)
}
/**
* 是否启用电源锁
*/
export const setPowerSaveBlocker = (enabled: boolean) => {
rendererSend<boolean>(WIN_MAIN_RENDERER_EVENT_NAME.set_power_save_blocker, enabled)
}
/**
* 窗口获取焦点事件
@@ -3,6 +3,8 @@ dt#play {{ $t('setting__play') }}
dd
.gap-top
base-checkbox(id="setting_player_startup_auto_play" :model-value="appSetting['player.startupAutoPlay']" :label="$t('setting__play_startup_auto_play')" @update:model-value="updateSetting({'player.startupAutoPlay': $event})")
.gap-top
base-checkbox(id="setting_player_power_save_blocker" :model-value="appSetting['player.powerSaveBlocker']" :label="$t('setting__play_power_save_blocker')" @update:model-value="handleUpdatePowerSaveBlocker")
.gap-top
base-checkbox(id="setting_player_save_play_time" :model-value="appSetting['player.isSavePlayTime']" :label="$t('setting__play_save_play_time')" @update:model-value="updateSetting({'player.isSavePlayTime': $event})")
.gap-top
@@ -35,6 +37,8 @@ import { hasInitedAdvancedAudioFeatures } from '@renderer/plugins/player'
import { dialog } from '@renderer/plugins/Dialog'
import { useI18n } from '@renderer/plugins/i18n'
import { appSetting, updateSetting } from '@renderer/store/setting'
import { setPowerSaveBlocker } from '@renderer/core/player/utils'
import { isPlay } from '@renderer/store/player/state'
export default {
@@ -84,6 +88,15 @@ export default {
mediaDeviceId.value = val
})
const handleUpdatePowerSaveBlocker = (enabled) => {
if (enabled) {
if (isPlay.value) setPowerSaveBlocker(true, true)
} else {
setPowerSaveBlocker(false, true)
}
updateSetting({ 'player.powerSaveBlocker': enabled })
}
return {
appSetting,
@@ -91,6 +104,7 @@ export default {
mediaDevices,
mediaDeviceId,
handleMediaDeviceIdChnage,
handleUpdatePowerSaveBlocker,
}
},
}