Skip to content

Commit 021f89d

Browse files
committed
新增播放器声音大小、静音、播放进度控制(#2386
1 parent 2ccca63 commit 021f89d

7 files changed

Lines changed: 69 additions & 6 deletions

File tree

publish/changeLog.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
11
### 新增
22

3-
- 新增「设置 → 其他设置 → 主窗口使用软件内置的圆角及阴影」设置(#2360
4-
*默认启用,关闭后将使用系统原生的窗口样式,该设置重启软件后生效*
3+
- 开放API新增播放器声音大小、静音、播放进度控制,详情看接入文档(#2386

src/common/types/player.d.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ declare namespace LX {
1111
| 'pause'
1212
| 'play'
1313
| 'next'
14+
| 'seek'
15+
| 'volume'
16+
| 'mute'
1417

1518
interface LyricInfo extends LX.Music.LyricInfo {
1619
rawlrcInfo: LX.Music.LyricInfo
@@ -29,6 +32,8 @@ declare namespace LX {
2932
lyricLineAllText: string
3033
lyric: string
3134
collect: boolean
35+
volume: number
36+
mute: boolean
3237
}
3338
}
3439
}

src/main/app.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,8 @@ export const initGlobalData = () => {
6565
lyricLineAllText: '',
6666
lyric: '',
6767
collect: false,
68+
volume: 0,
69+
mute: false,
6870
},
6971
}
7072

@@ -230,6 +232,15 @@ export const listenerAppEvent = (startApp: () => void) => {
230232
global.lx.theme.shouldUseDarkColors = shouldUseDarkColors
231233
global.lx?.event_app.system_theme_change(shouldUseDarkColors)
232234
})
235+
236+
global.lx.event_app.on('updated_config', (config, setting) => {
237+
if (config.includes('player.volume')) {
238+
global.lx.event_app.player_status({ volume: Math.trunc(setting['player.volume']! * 100) })
239+
}
240+
if (config.includes('player.isMute')) {
241+
global.lx.event_app.player_status({ mute: setting['player.isMute'] })
242+
}
243+
})
233244
}
234245

235246
const initTheme = () => {

src/main/modules/openApi/index.ts

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,12 +142,44 @@ const handleStartServer = async(port: number, ip: string) => new Promise<void>((
142142
case '/skip-prev':
143143
sendTaskbarButtonClick('prev')
144144
break
145+
case '/seek': {
146+
const offset = parseFloat(querystring.parse(query ?? '').offset as string)
147+
if (Number.isNaN(offset) || offset < 0 || offset > global.lx.player_status.duration) {
148+
code = 400
149+
msg = 'Invalid offset'
150+
} else {
151+
sendTaskbarButtonClick('seek', parseFloat(offset.toFixed(3)))
152+
}
153+
break
154+
}
145155
case '/collect':
146156
sendTaskbarButtonClick('collect')
147157
break
148158
case '/uncollect':
149159
sendTaskbarButtonClick('unCollect')
150160
break
161+
case '/volume': {
162+
const volume = parseInt(querystring.parse(query ?? '').volume as string)
163+
if (Number.isNaN(volume) || volume < 0 || volume > 100) {
164+
code = 400
165+
msg = 'Invalid volume'
166+
} else {
167+
sendTaskbarButtonClick('volume', volume / 100)
168+
}
169+
break
170+
}
171+
case '/mute': {
172+
const mute = querystring.parse(query ?? '').mute
173+
if (mute == 'true') {
174+
sendTaskbarButtonClick('mute', true)
175+
} else if (mute == 'false') {
176+
sendTaskbarButtonClick('mute', false)
177+
} else {
178+
code = 400
179+
msg = 'Invalid mute value'
180+
}
181+
break
182+
}
151183
case '/subscribe-player-status':
152184
try {
153185
handleSubscribePlayerStatus(req, res, query)

src/main/modules/winMain/rendererEvent/app.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -137,8 +137,8 @@ export const sendFocus = () => {
137137
sendEvent(WIN_MAIN_RENDERER_EVENT_NAME.focus)
138138
}
139139

140-
export const sendTaskbarButtonClick = (action: LX.Player.StatusButtonActions) => {
141-
sendEvent(WIN_MAIN_RENDERER_EVENT_NAME.player_action_on_button_click, action)
140+
export const sendTaskbarButtonClick = (action: LX.Player.StatusButtonActions, data?: unknown) => {
141+
sendEvent(WIN_MAIN_RENDERER_EVENT_NAME.player_action_on_button_click, { action, data })
142142
}
143143
export const sendConfigChange = (setting: Partial<LX.AppSetting>) => {
144144
sendEvent(WIN_MAIN_RENDERER_EVENT_NAME.on_config_change, setting)

src/renderer/core/useApp/usePlayer/usePlayStatus.ts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ export default () => {
8181
// buttons.lockLrc = setting.desktopLyric.isLock
8282
// setButtons()
8383
// }
84-
const rTaskbarThumbarClick = onPlayerAction(async({ params: action }) => {
84+
const rTaskbarThumbarClick = onPlayerAction(async({ params: { action, data } }) => {
8585
switch (action) {
8686
case 'play':
8787
play()
@@ -105,6 +105,19 @@ export default () => {
105105
void removeListMusics({ listId: loveList.id, ids: ['progress' in playMusicInfo.musicInfo ? playMusicInfo.musicInfo.metadata.musicInfo.id : playMusicInfo.musicInfo.id] })
106106
if (await updateCollectStatus()) sendPlayerStatus({ collect })
107107
break
108+
case 'seek': {
109+
let progress = data as number
110+
if (progress < 0) progress = 0
111+
else if (progress > playProgress.maxPlayTime) progress = playProgress.maxPlayTime
112+
window.app_event.setProgress(progress)
113+
break
114+
}
115+
case 'mute':
116+
window.app_event.setVolumeIsMute(data as boolean)
117+
break
118+
case 'volume':
119+
window.app_event.setVolume(data as number)
120+
break
108121
// case 'lrc':
109122
// setVisibleDesktopLyric(true)
110123
// updateSetting()

src/renderer/utils/ipc.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -476,7 +476,10 @@ export const hotKeyGetStatus = async() => {
476476
}
477477

478478
// 主进程操作播放器状态
479-
export const onPlayerAction = (listener: LX.IpcRendererEventListenerParams<LX.Player.StatusButtonActions>): RemoveListener => {
479+
export const onPlayerAction = (listener: LX.IpcRendererEventListenerParams<{
480+
action: LX.Player.StatusButtonActions
481+
data?: unknown
482+
}>): RemoveListener => {
480483
rendererOn(WIN_MAIN_RENDERER_EVENT_NAME.player_action_on_button_click, listener)
481484
return () => {
482485
rendererOff(WIN_MAIN_RENDERER_EVENT_NAME.player_action_on_button_click, listener)

0 commit comments

Comments
 (0)