diff --git a/api/funkwhale_api/music/tests/factories.py b/api/funkwhale_api/music/tests/factories.py index dfa7a75e2814c82e276f692da07d1411da2b3e95..d4ec048101984419b5b1459943be5998f43f261a 100644 --- a/api/funkwhale_api/music/tests/factories.py +++ b/api/funkwhale_api/music/tests/factories.py @@ -1,4 +1,7 @@ import factory +import os + +SAMPLES_PATH = os.path.dirname(os.path.abspath(__file__)) class ArtistFactory(factory.django.DjangoModelFactory): @@ -33,7 +36,8 @@ class TrackFactory(factory.django.DjangoModelFactory): class TrackFileFactory(factory.django.DjangoModelFactory): track = factory.SubFactory(TrackFactory) - audio_file = factory.django.FileField() + audio_file = factory.django.FileField( + from_path=os.path.join(SAMPLES_PATH, 'test.ogg')) class Meta: model = 'music.TrackFile' diff --git a/front/package.json b/front/package.json index 7cec50319a142649dedfb00645418b195c9bf339..55e773fba7b52c6d61655d4e1e80c71349203457 100644 --- a/front/package.json +++ b/front/package.json @@ -18,6 +18,7 @@ "js-logger": "^1.3.0", "semantic-ui-css": "^2.2.10", "vue": "^2.3.3", + "vue-global-events": "^1.0.2", "vue-resource": "^1.3.4", "vue-router": "^2.3.1", "vuedraggable": "^2.14.1" diff --git a/front/src/audio/queue.js b/front/src/audio/queue.js index 25b27f00ea7e677ee9d4973ae876413488cbb17a..77fe6bf2bc89bf0f9fc114b52f7512f9ea19ef94 100644 --- a/front/src/audio/queue.js +++ b/front/src/audio/queue.js @@ -86,6 +86,8 @@ class Queue { cache.remove('queue') } setVolume (newValue) { + newValue = Math.min(newValue, 1) + newValue = Math.max(newValue, 0) this.state.volume = newValue if (this.audio.setVolume) { this.audio.setVolume(newValue) @@ -94,7 +96,9 @@ class Queue { } cache.set('volume', newValue) } - + incrementVolume (value) { + this.setVolume(this.state.volume + value) + } reorder (oldIndex, newIndex) { // called when the user uses drag / drop to reorder // tracks in queue diff --git a/front/src/components/Sidebar.vue b/front/src/components/Sidebar.vue index e39dd16b9cc3eee8c0528a313011e317304aa0b0..0ce16a75f94a6b597a2ea0e3d120c336533232c7 100644 --- a/front/src/components/Sidebar.vue +++ b/front/src/components/Sidebar.vue @@ -87,10 +87,15 @@ <div class="ui inverted segment player-wrapper"> <player></player> </div> + <GlobalEvents + @keydown.r.stop="queue.restore" + /> </div> </template> <script> +import GlobalEvents from 'vue-global-events' + import Player from '@/components/audio/Player' import favoriteTracks from '@/favorites/tracks' import Logo from '@/components/Logo' @@ -109,7 +114,8 @@ export default { Player, SearchBar, Logo, - draggable + draggable, + GlobalEvents }, data () { return { diff --git a/front/src/components/audio/Player.vue b/front/src/components/audio/Player.vue index b72f37c5c83ff741ba336d2be1d51dca595845eb..92ea9d0a48297ac1be4f65a894c584fd801e6282 100644 --- a/front/src/components/audio/Player.vue +++ b/front/src/components/audio/Player.vue @@ -56,10 +56,20 @@ <i title="Clear your queue" @click="queue.clean()" :class="['ui', 'trash', 'secondary', {'disabled': queue.tracks.length === 0}, 'icon']" :disabled="queue.tracks.length === 0"></i> </div> </div> + <GlobalEvents + @keydown.space.prevent="pauseOrPlay" + @keydown.ctrl.left.prevent="queue.previous" + @keydown.ctrl.right.prevent="queue.next" + @keydown.ctrl.down.prevent="queue.incrementVolume(-0.1)" + @keydown.ctrl.up.prevent="queue.incrementVolume(0.1)" + /> + </div> </template> <script> +import GlobalEvents from 'vue-global-events' + import queue from '@/audio/queue' import Track from '@/audio/track' import TrackFavoriteIcon from '@/components/favorites/TrackFavoriteIcon' @@ -68,7 +78,8 @@ import radios from '@/radios' export default { name: 'player', components: { - TrackFavoriteIcon + TrackFavoriteIcon, + GlobalEvents }, data () { return {