lx-music-desktop/src/renderer/core/useApp/usePlayer/useVolume.ts
2022-10-29 11:36:35 +08:00

76 lines
2.4 KiB
TypeScript

import { onBeforeUnmount, watch } from '@common/utils/vueTools'
import { setVolume as setPlayerVolume, setMute as setPlayerMute } from '@renderer/plugins/player'
import { debounce } from '@common/utils'
import { HOTKEY_PLAYER } from '@common/hotKey'
// import { player as eventPlayerNames } from '@renderer/event/names'
import { volume, isMute, setMute, setVolume } from '@renderer/store/player/volume'
import { appSetting, saveVolume, saveVolumeIsMute } from '@renderer/store/setting'
export default () => {
const handleSaveVolume = debounce(saveVolume, 300)
setVolume(appSetting['player.volume'])
setMute(appSetting['player.isMute'])
setPlayerVolume(appSetting['player.volume'])
setPlayerMute(appSetting['player.isMute'])
const handleToggleVolumeMute = (_isMute?: boolean) => {
let muteStatus = _isMute ?? !isMute.value
saveVolumeIsMute(muteStatus)
setMute(muteStatus)
}
const handleSetVolume = (num: number) => {
const _volume = num < 0 ? 0 : num > 1 ? 1 : num
setVolume(_volume)
}
const handleSetVolumeUp = (step = 0.02) => {
handleSetVolume(volume.value + step)
}
const handleSetVolumeDown = (step = 0.02) => {
handleSetVolume(volume.value - step)
}
const hotkeyVolumeUp = () => {
handleSetVolumeUp()
}
const hotkeyVolumeDown = () => {
handleSetVolumeDown()
}
const hotkeyVolumeMute = () => {
handleToggleVolumeMute()
}
watch(volume, _volume => {
handleSaveVolume(_volume)
setPlayerVolume(_volume)
})
watch(isMute, mute => {
saveVolumeIsMute(mute)
setPlayerMute(mute)
})
watch(() => appSetting['player.volume'], _volume => {
setVolume(_volume)
})
watch(() => appSetting['player.isMute'], muteStatus => {
setMute(muteStatus)
})
window.key_event.on(HOTKEY_PLAYER.volume_up.action, hotkeyVolumeUp)
window.key_event.on(HOTKEY_PLAYER.volume_down.action, hotkeyVolumeDown)
window.key_event.on(HOTKEY_PLAYER.volume_mute.action, hotkeyVolumeMute)
window.app_event.on('setVolume', handleSetVolume)
window.app_event.on('setVolumeIsMute', handleToggleVolumeMute)
onBeforeUnmount(() => {
window.key_event.off(HOTKEY_PLAYER.volume_up.action, hotkeyVolumeUp)
window.key_event.off(HOTKEY_PLAYER.volume_down.action, hotkeyVolumeDown)
window.key_event.off(HOTKEY_PLAYER.volume_mute.action, hotkeyVolumeMute)
window.app_event.off('setVolume', handleSetVolume)
window.app_event.off('setVolumeIsMute', handleToggleVolumeMute)
})
}