mpd: Add volume command
This commit is contained in:
parent
f15b4e7327
commit
14444fe24f
@ -39,6 +39,9 @@ Bug fix release.
|
||||
- MPD: Don't return tracks with empty URIs. (Partly fixes: :issue:`1340`, PR:
|
||||
:issue:`1343`)
|
||||
|
||||
- MPD: Add ``volume`` command that was reintroduced, though still as a
|
||||
deprecated command, in MPD 0.18 and is in use by some clients like mpc.
|
||||
|
||||
- Proxy: Handle case where :confval:`proxy/port` is either missing from config
|
||||
or set to an empty string. (PR: :issue:`1371`)
|
||||
|
||||
|
||||
@ -426,3 +426,27 @@ def stop(context):
|
||||
Stops playing.
|
||||
"""
|
||||
context.core.playback.stop()
|
||||
|
||||
|
||||
@protocol.commands.add('volume', change=protocol.INT)
|
||||
def volume(context, change):
|
||||
"""
|
||||
*musicpd.org, playback section:*
|
||||
|
||||
``volume {CHANGE}``
|
||||
|
||||
Changes volume by amount ``CHANGE``.
|
||||
|
||||
Note: ``volume`` is deprecated, use ``setvol`` instead.
|
||||
"""
|
||||
if change < -100 or change > 100:
|
||||
raise exceptions.MpdArgError('Invalid volume value', command='volume')
|
||||
|
||||
old_volume = context.core.mixer.get_volume().get()
|
||||
if old_volume is None:
|
||||
raise exceptions.MpdSystemError('problems setting volume')
|
||||
|
||||
new_volume = min(max(0, old_volume + change), 100)
|
||||
success = context.core.mixer.set_volume(new_volume).get()
|
||||
if not success:
|
||||
raise exceptions.MpdSystemError('problems setting volume')
|
||||
|
||||
@ -453,6 +453,38 @@ class VolumeTest(protocol.BaseTestCase):
|
||||
self.assertEqual(50, self.core.mixer.get_volume().get())
|
||||
self.assertInResponse('OK')
|
||||
|
||||
def test_volume_plus(self):
|
||||
self.core.mixer.set_volume(50)
|
||||
|
||||
self.send_request('volume +20')
|
||||
|
||||
self.assertEqual(70, self.core.mixer.get_volume().get())
|
||||
self.assertInResponse('OK')
|
||||
|
||||
def test_volume_minus(self):
|
||||
self.core.mixer.set_volume(50)
|
||||
|
||||
self.send_request('volume -20')
|
||||
|
||||
self.assertEqual(30, self.core.mixer.get_volume().get())
|
||||
self.assertInResponse('OK')
|
||||
|
||||
def test_volume_less_than_minus_100(self):
|
||||
self.core.mixer.set_volume(50)
|
||||
|
||||
self.send_request('volume -110')
|
||||
|
||||
self.assertEqual(50, self.core.mixer.get_volume().get())
|
||||
self.assertInResponse('ACK [2@0] {volume} Invalid volume value')
|
||||
|
||||
def test_volume_more_than_plus_100(self):
|
||||
self.core.mixer.set_volume(50)
|
||||
|
||||
self.send_request('volume +110')
|
||||
|
||||
self.assertEqual(50, self.core.mixer.get_volume().get())
|
||||
self.assertInResponse('ACK [2@0] {volume} Invalid volume value')
|
||||
|
||||
|
||||
class VolumeWithNoMixerTest(protocol.BaseTestCase):
|
||||
enable_mixer = False
|
||||
@ -460,3 +492,7 @@ class VolumeWithNoMixerTest(protocol.BaseTestCase):
|
||||
def test_setvol_without_mixer_fails(self):
|
||||
self.send_request('setvol "100"')
|
||||
self.assertInResponse('ACK [52@0] {setvol} problems setting volume')
|
||||
|
||||
def test_volume_without_mixer_failes(self):
|
||||
self.send_request('volume +100')
|
||||
self.assertInResponse('ACK [52@0] {volume} problems setting volume')
|
||||
|
||||
Loading…
Reference in New Issue
Block a user