From 4fa88dd7a09ee59be3ead9fd55d4396c0ce17eea Mon Sep 17 00:00:00 2001 From: lyswhut Date: Wed, 18 Jan 2023 14:04:04 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=A3=B0=E9=9F=B3=E8=BE=93?= =?UTF-8?q?=E5=87=BA=E8=AE=BE=E5=A4=87=E6=9B=B4=E6=94=B9=E6=97=B6=E5=90=8E?= =?UTF-8?q?=E7=9A=84=E8=87=AA=E5=8A=A8=E6=9A=82=E5=81=9C=E6=92=AD=E6=94=BE?= =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E6=97=A0=E6=95=88=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- publish/changeLog.md | 7 +-- .../core/useApp/usePlayer/useMediaDevice.ts | 49 ++++++++----------- 2 files changed, 22 insertions(+), 34 deletions(-) diff --git a/publish/changeLog.md b/publish/changeLog.md index c46f9f1a..73788aa9 100644 --- a/publish/changeLog.md +++ b/publish/changeLog.md @@ -1,9 +1,4 @@ ### 修复 -- 修复备份文件导入指引无法识别v2配置的问题 -- 修复从搜索界面进入歌单详情后,若启用强迫症设置的清空功能会导致意外清空搜索框、搜索列表的问题 -- 修复桌面歌词在启用卡拉OK歌词后字体边缘可能被截断的问题(特别是纵向歌词某些字的边角被截断导致后面的阴影露出来或阴影不均匀的问题) -- 修复桌面歌词启用歌词缩放后的阴影显示问题 -- 修复Linux armv7l系统(如树莓派)下无法启动的问题(与修复Linux arm64的方法一样采用内置预编译模块的方式修复) -- 修复备份与恢复的列表导入列表信息设置逻辑问题与潜在导入问题 +- 修复声音输出设备更改时后的自动暂停播放设置无效的问题 diff --git a/src/renderer/core/useApp/usePlayer/useMediaDevice.ts b/src/renderer/core/useApp/usePlayer/useMediaDevice.ts index 8a59bc29..6523c746 100644 --- a/src/renderer/core/useApp/usePlayer/useMediaDevice.ts +++ b/src/renderer/core/useApp/usePlayer/useMediaDevice.ts @@ -16,24 +16,22 @@ export default () => { let prevDeviceLabel: string | null = null let prevDeviceId = '' - const setMediaDevice = async(mediaDeviceId: string) => { - let label = prevDeviceLabel + const getMediaDevice = async(deviceId: string) => { const devices = await getDevices() - let device = devices.find(device => device.deviceId === mediaDeviceId) - if (device) { - mediaDeviceId = device.deviceId - label = device.label - } else { - mediaDeviceId = 'default' - device = devices.find(device => device.deviceId === mediaDeviceId) - if (device) label = device.label + let device = devices.find(device => device.deviceId === deviceId) + if (!device) { + deviceId = 'default' + device = devices.find(device => device.deviceId === deviceId) } + return device ? { label: device.label, deviceId: device.deviceId } : { label: '', deviceId: '' } + } + const setMediaDevice = async(deviceId: string, label: string) => { prevDeviceLabel = label // console.log(device) - setMediaDeviceId(mediaDeviceId).then(() => { - prevDeviceId = mediaDeviceId - saveMediaDeviceId(mediaDeviceId) + setMediaDeviceId(deviceId).then(() => { + prevDeviceId = deviceId + saveMediaDeviceId(deviceId) }).catch((err: any) => { console.log(err) setMediaDeviceId('default').finally(() => { @@ -43,13 +41,13 @@ export default () => { }) } - const handleDeviceChangeStopPlay = (device: MediaDeviceInfo, mediaDeviceId: string) => { + const handleDeviceChangeStopPlay = (label: string) => { // console.log(device) - // console.log(this.appSetting.player['isMediaDeviceRemovedStopPlay,'] this.isPlay, device.label, this.prevDeviceLabel) + // console.log(appSetting['player.isMediaDeviceRemovedStopPlay'], isPlay.value, label, prevDeviceLabel) if ( appSetting['player.isMediaDeviceRemovedStopPlay'] && isPlay.value && - device.label != prevDeviceLabel + label != prevDeviceLabel ) { window.lx.isPlayedStop = true pause() @@ -57,26 +55,21 @@ export default () => { } const handleMediaListChange = async() => { - let mediaDeviceId = appSetting['player.mediaDeviceId'] - const devices = await getDevices() - let device = devices.find(device => device.deviceId === mediaDeviceId) - device ??= devices.find(device => device.deviceId === 'default') - // @ts-expect-error - device ??= { label: '', deviceId: '' } + const mediaDeviceId = appSetting['player.mediaDeviceId'] + const device = await getMediaDevice(mediaDeviceId) - // @ts-expect-error - handleDeviceChangeStopPlay(device, mediaDeviceId) + handleDeviceChangeStopPlay(device.label) - void setMediaDevice(device!.deviceId) + if (device.deviceId == mediaDeviceId) prevDeviceLabel = device.label + else void setMediaDevice(device.deviceId, device.label) } watch(() => appSetting['player.mediaDeviceId'], (id) => { if (prevDeviceId == id) return - void setMediaDevice(id) + void getMediaDevice(id).then(async({ deviceId, label }) => setMediaDevice(deviceId, label)) }) - - void setMediaDevice(appSetting['player.mediaDeviceId']) + void getMediaDevice(appSetting['player.mediaDeviceId']).then(async({ deviceId, label }) => setMediaDevice(deviceId, label)) // eslint-disable-next-line @typescript-eslint/no-misused-promises navigator.mediaDevices.addEventListener('devicechange', handleMediaListChange)