Skip to content

Commit d3598c5

Browse files
committed
优化随机播放重新混洗交互
1 parent be48e78 commit d3598c5

5 files changed

Lines changed: 58 additions & 6 deletions

File tree

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import assert from 'node:assert/strict'
2+
3+
import { resolvePlayModeSelection } from '../../src/renderer/core/player/playMode.mjs'
4+
5+
const run = (name, fn) => {
6+
try {
7+
fn()
8+
console.log(`PASS ${name}`)
9+
} catch (err) {
10+
console.error(`FAIL ${name}`)
11+
throw err
12+
}
13+
}
14+
15+
run('switching to random requests random queue reset', () => {
16+
assert.deepEqual(resolvePlayModeSelection('listLoop', 'random'), {
17+
nextMode: 'random',
18+
shouldResetRandomQueue: true,
19+
})
20+
})
21+
22+
run('clicking random again keeps mode and requests random queue reset', () => {
23+
assert.deepEqual(resolvePlayModeSelection('random', 'random'), {
24+
nextMode: 'random',
25+
shouldResetRandomQueue: true,
26+
})
27+
})
28+
29+
run('non-random repeated click does nothing special', () => {
30+
assert.deepEqual(resolvePlayModeSelection('listLoop', 'listLoop'), {
31+
nextMode: 'listLoop',
32+
shouldResetRandomQueue: false,
33+
})
34+
})

src/renderer/components/common/TogglePlayModeBtn.vue

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@
7474
</template>
7575

7676
<script setup>
77-
import { ref } from '@common/utils/vueTools'
77+
import { nextTick, ref } from '@common/utils/vueTools'
7878
// import useNextTogglePlay from '@renderer/utils/compositions/useNextTogglePlay'
7979
// import useToggleDesktopLyric from '@renderer/utils/compositions/useToggleDesktopLyric'
8080
// import { musicInfo, playMusicInfo } from '@renderer/store/player/state'
@@ -90,7 +90,9 @@ const {
9090
9191
const toggleMode = (mode) => {
9292
btn_ref.value.hide()
93-
toggleNextPlayMode(mode)
93+
void nextTick(() => {
94+
toggleNextPlayMode(mode)
95+
})
9496
}
9597
9698
</script>

src/renderer/core/player/action.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -282,6 +282,15 @@ export const resetRandomNextMusicInfo = () => {
282282
}
283283
}
284284

285+
export const resetRandomPlayQueue = () => {
286+
resetRandomNextMusicInfo()
287+
clearPlayedList()
288+
289+
if (!playMusicInfo.musicInfo || playMusicInfo.isTempPlay) return
290+
291+
addPlayedList({ ...(playMusicInfo as LX.Player.PlayMusicInfo) })
292+
}
293+
285294
export const getNextPlayMusicInfo = async(): Promise<LX.Player.PlayMusicInfo | null> => {
286295
if (tempPlayList.length) { // 如果稍后播放列表存在歌曲则直接播放改列表的歌曲
287296
const playMusicInfo = tempPlayList[0]
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
export const resolvePlayModeSelection = (currentMode, selectedMode) => {
2+
return {
3+
nextMode: selectedMode,
4+
shouldResetRandomQueue: selectedMode === 'random',
5+
}
6+
}

src/renderer/utils/compositions/useNextTogglePlay.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ import {
33
computed,
44
} from '@common/utils/vueTools'
55
import { useI18n } from '@renderer/plugins/i18n'
6+
import { resetRandomPlayQueue } from '@renderer/core/player'
7+
import { resolvePlayModeSelection } from '@renderer/core/player/playMode.mjs'
68

79
// const playNextModes = [
810
// 'listLoop',
@@ -25,10 +27,9 @@ export default () => {
2527
})
2628

2729
const toggleNextPlayMode = (mode: LX.AppSetting['player.togglePlayMethod']) => {
28-
if (mode == appSetting['player.togglePlayMethod']) return
29-
// let index = playNextModes.indexOf(appSetting['player.togglePlayMethod'])
30-
// if (++index >= playNextModes.length) index = 0
31-
setTogglePlayMode(mode)
30+
const { nextMode, shouldResetRandomQueue } = resolvePlayModeSelection(appSetting['player.togglePlayMethod'], mode)
31+
if (nextMode != appSetting['player.togglePlayMethod']) setTogglePlayMode(nextMode)
32+
if (shouldResetRandomQueue) resetRandomPlayQueue()
3233
}
3334

3435
return {

0 commit comments

Comments
 (0)