Verified Commit e17aee29 authored by Eliot Berriot's avatar Eliot Berriot
Browse files

Merge branch 'release/0.2.2'

parents f4a8d0f8 f74b6b5a
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
__version__ = '0.2.1' __version__ = '0.2.2'
__version_info__ = tuple([int(num) if num.isdigit() else num for num in __version__.replace('-', '.', 1).split('.')]) __version_info__ = tuple([int(num) if num.isdigit() else num for num in __version__.replace('-', '.', 1).split('.')])
import factory import factory
import os
SAMPLES_PATH = os.path.dirname(os.path.abspath(__file__))
class ArtistFactory(factory.django.DjangoModelFactory): class ArtistFactory(factory.django.DjangoModelFactory):
...@@ -33,7 +36,8 @@ class TrackFactory(factory.django.DjangoModelFactory): ...@@ -33,7 +36,8 @@ class TrackFactory(factory.django.DjangoModelFactory):
class TrackFileFactory(factory.django.DjangoModelFactory): class TrackFileFactory(factory.django.DjangoModelFactory):
track = factory.SubFactory(TrackFactory) 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: class Meta:
model = 'music.TrackFile' model = 'music.TrackFile'
...@@ -29,7 +29,17 @@ class Command(BaseCommand): ...@@ -29,7 +29,17 @@ class Command(BaseCommand):
def handle(self, *args, **options): def handle(self, *args, **options):
# self.stdout.write(self.style.SUCCESS('Successfully closed poll "%s"' % poll_id)) # self.stdout.write(self.style.SUCCESS('Successfully closed poll "%s"' % poll_id))
matching = glob.glob(options['path'], recursive=options['recursive'])
# Recursive is supported only on Python 3.5+, so we pass the option
# only if it's True to avoid breaking on older versions of Python
glob_kwargs = {}
if options['recursive']:
glob_kwargs['recursive'] = True
try:
matching = glob.glob(options['path'], **glob_kwargs)
except TypeError:
raise Exception('You need Python 3.5 to use the --recursive flag')
self.stdout.write('This will import {} files matching this pattern: {}'.format( self.stdout.write('This will import {} files matching this pattern: {}'.format(
len(matching), options['path'])) len(matching), options['path']))
......
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
"js-logger": "^1.3.0", "js-logger": "^1.3.0",
"semantic-ui-css": "^2.2.10", "semantic-ui-css": "^2.2.10",
"vue": "^2.3.3", "vue": "^2.3.3",
"vue-global-events": "^1.0.2",
"vue-resource": "^1.3.4", "vue-resource": "^1.3.4",
"vue-router": "^2.3.1", "vue-router": "^2.3.1",
"vuedraggable": "^2.14.1" "vuedraggable": "^2.14.1"
......
...@@ -86,6 +86,8 @@ class Queue { ...@@ -86,6 +86,8 @@ class Queue {
cache.remove('queue') cache.remove('queue')
} }
setVolume (newValue) { setVolume (newValue) {
newValue = Math.min(newValue, 1)
newValue = Math.max(newValue, 0)
this.state.volume = newValue this.state.volume = newValue
if (this.audio.setVolume) { if (this.audio.setVolume) {
this.audio.setVolume(newValue) this.audio.setVolume(newValue)
...@@ -94,7 +96,9 @@ class Queue { ...@@ -94,7 +96,9 @@ class Queue {
} }
cache.set('volume', newValue) cache.set('volume', newValue)
} }
incrementVolume (value) {
this.setVolume(this.state.volume + value)
}
reorder (oldIndex, newIndex) { reorder (oldIndex, newIndex) {
// called when the user uses drag / drop to reorder // called when the user uses drag / drop to reorder
// tracks in queue // tracks in queue
......
...@@ -87,10 +87,15 @@ ...@@ -87,10 +87,15 @@
<div class="ui inverted segment player-wrapper"> <div class="ui inverted segment player-wrapper">
<player></player> <player></player>
</div> </div>
<GlobalEvents
@keydown.r.stop="queue.restore"
/>
</div> </div>
</template> </template>
<script> <script>
import GlobalEvents from 'vue-global-events'
import Player from '@/components/audio/Player' import Player from '@/components/audio/Player'
import favoriteTracks from '@/favorites/tracks' import favoriteTracks from '@/favorites/tracks'
import Logo from '@/components/Logo' import Logo from '@/components/Logo'
...@@ -109,7 +114,8 @@ export default { ...@@ -109,7 +114,8 @@ export default {
Player, Player,
SearchBar, SearchBar,
Logo, Logo,
draggable draggable,
GlobalEvents
}, },
data () { data () {
return { return {
......
...@@ -56,10 +56,20 @@ ...@@ -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> <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>
</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> </div>
</template> </template>
<script> <script>
import GlobalEvents from 'vue-global-events'
import queue from '@/audio/queue' import queue from '@/audio/queue'
import Track from '@/audio/track' import Track from '@/audio/track'
import TrackFavoriteIcon from '@/components/favorites/TrackFavoriteIcon' import TrackFavoriteIcon from '@/components/favorites/TrackFavoriteIcon'
...@@ -68,7 +78,8 @@ import radios from '@/radios' ...@@ -68,7 +78,8 @@ import radios from '@/radios'
export default { export default {
name: 'player', name: 'player',
components: { components: {
TrackFavoriteIcon TrackFavoriteIcon,
GlobalEvents
}, },
data () { data () {
return { return {
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment