mirror of
https://github.com/koel/koel
synced 2025-02-17 13:58:28 +00:00
feat: repeat mode shortcut
This commit is contained in:
parent
b8bfd37964
commit
e29c1b6008
6 changed files with 6 additions and 8 deletions
|
@ -137,6 +137,7 @@ or a textarea.
|
||||||
* <kbd>j</kbd> plays the next song in queue
|
* <kbd>j</kbd> plays the next song in queue
|
||||||
* <kbd>k</kbd> plays the previous song in queue
|
* <kbd>k</kbd> plays the previous song in queue
|
||||||
* <kbd>l</kbd> marks/unmarks the current song as favorite
|
* <kbd>l</kbd> marks/unmarks the current song as favorite
|
||||||
|
* <kbd>r</kbd> circles through repeat modes (no repeat, repeat all, repeat one)
|
||||||
* <kbd>→</kbd> seeks forward 10 seconds
|
* <kbd>→</kbd> seeks forward 10 seconds
|
||||||
* <kbd>←</kbd> seeks backward 10 seconds
|
* <kbd>←</kbd> seeks backward 10 seconds
|
||||||
* <kbd>↑</kbd> increases volume by 10%
|
* <kbd>↑</kbd> increases volume by 10%
|
||||||
|
|
|
@ -8,7 +8,7 @@ import RepeatModeSwitch from './RepeatModeSwitch.vue'
|
||||||
new class extends UnitTestCase {
|
new class extends UnitTestCase {
|
||||||
protected test () {
|
protected test () {
|
||||||
it('changes mode', async () => {
|
it('changes mode', async () => {
|
||||||
const mock = this.mock(playbackService, 'changeRepeatMode')
|
const mock = this.mock(playbackService, 'rotateRepeatMode')
|
||||||
preferenceStore.state.repeat_mode = 'NO_REPEAT'
|
preferenceStore.state.repeat_mode = 'NO_REPEAT'
|
||||||
this.render(RepeatModeSwitch)
|
this.render(RepeatModeSwitch)
|
||||||
|
|
||||||
|
|
|
@ -29,7 +29,7 @@ const readableMode = computed(() => mode.value
|
||||||
.join(' ')
|
.join(' ')
|
||||||
)
|
)
|
||||||
|
|
||||||
const changeMode = () => playbackService.changeRepeatMode()
|
const changeMode = () => playbackService.rotateRepeatMode()
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
|
|
|
@ -20,6 +20,7 @@ onKeyStroke('f', () => eventBus.emit('FOCUS_SEARCH_FIELD'))
|
||||||
onKeyStroke('j', () => playbackService.playNext())
|
onKeyStroke('j', () => playbackService.playNext())
|
||||||
onKeyStroke('k', () => playbackService.playPrev())
|
onKeyStroke('k', () => playbackService.playPrev())
|
||||||
onKeyStroke(' ', () => playbackService.toggle())
|
onKeyStroke(' ', () => playbackService.toggle())
|
||||||
|
onKeyStroke('r', () => playbackService.rotateRepeatMode())
|
||||||
|
|
||||||
onKeyStroke('ArrowRight', () => playbackService.seekBy(10))
|
onKeyStroke('ArrowRight', () => playbackService.seekBy(10))
|
||||||
onKeyStroke('ArrowLeft', () => playbackService.seekBy(-10))
|
onKeyStroke('ArrowLeft', () => playbackService.seekBy(-10))
|
||||||
|
|
|
@ -220,7 +220,7 @@ new class extends UnitTestCase {
|
||||||
])('it switches from repeat mode %s to repeat mode %s', (fromMode, toMode) => {
|
])('it switches from repeat mode %s to repeat mode %s', (fromMode, toMode) => {
|
||||||
playbackService.init(document.querySelector('.plyr')!)
|
playbackService.init(document.querySelector('.plyr')!)
|
||||||
preferences.repeat_mode = fromMode
|
preferences.repeat_mode = fromMode
|
||||||
playbackService.changeRepeatMode()
|
playbackService.rotateRepeatMode()
|
||||||
|
|
||||||
expect(preferences.repeat_mode).toEqual(toMode)
|
expect(preferences.repeat_mode).toEqual(toMode)
|
||||||
})
|
})
|
||||||
|
|
|
@ -199,11 +199,7 @@ class PlaybackService {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public rotateRepeatMode () {
|
||||||
* Circle through the repeat mode.
|
|
||||||
* The selected mode will be stored into local storage as well.
|
|
||||||
*/
|
|
||||||
public changeRepeatMode () {
|
|
||||||
let index = this.repeatModes.indexOf(preferences.repeat_mode) + 1
|
let index = this.repeatModes.indexOf(preferences.repeat_mode) + 1
|
||||||
|
|
||||||
if (index >= this.repeatModes.length) {
|
if (index >= this.repeatModes.length) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue