Fix volume response when capping volume
This commit is contained in:
parent
029192876c
commit
0269686453
@ -32,6 +32,12 @@ v0.7.0 (in development)
|
||||
- Fix crash on mismatching quotation in ``list`` MPD queries. (Fixes:
|
||||
:issue:`137`)
|
||||
|
||||
- Volume is now reported to be the same as the volume was set to, also when
|
||||
internal rounding have been done due to
|
||||
:attr:`mopidy.settings.MIXER_MAX_VOLUME` has been set to cap the volume. This
|
||||
should make it possible to manage capped volume from clients that only
|
||||
increase volume with one step at a time, like ncmpcpp does.
|
||||
|
||||
|
||||
v0.6.1 (2011-12-28)
|
||||
===================
|
||||
|
||||
@ -21,19 +21,32 @@ class BaseMixer(object):
|
||||
Integer in range [0, 100]. :class:`None` if unknown. Values below 0 is
|
||||
equal to 0. Values above 100 is equal to 100.
|
||||
"""
|
||||
if not hasattr(self, '_user_volume'):
|
||||
self._user_volume = 0
|
||||
volume = self.get_volume()
|
||||
if volume is None:
|
||||
return None
|
||||
return int(volume / self.amplification_factor)
|
||||
elif not self.amplification_factor < 1:
|
||||
return volume
|
||||
else:
|
||||
user_volume = int(volume / self.amplification_factor)
|
||||
if (user_volume - 1) <= self._user_volume <= (user_volume + 1):
|
||||
return self._user_volume
|
||||
else:
|
||||
return user_volume
|
||||
|
||||
@volume.setter
|
||||
def volume(self, volume):
|
||||
volume = int(int(volume) * self.amplification_factor)
|
||||
if not hasattr(self, '_user_volume'):
|
||||
self._user_volume = 0
|
||||
volume = int(volume)
|
||||
if volume < 0:
|
||||
volume = 0
|
||||
elif volume > 100:
|
||||
volume = 100
|
||||
self.set_volume(volume)
|
||||
self._user_volume = volume
|
||||
real_volume = int(volume * self.amplification_factor)
|
||||
self.set_volume(real_volume)
|
||||
self._trigger_volume_changed()
|
||||
|
||||
def get_volume(self):
|
||||
|
||||
@ -4,7 +4,7 @@ from tests import unittest
|
||||
from tests.mixers.base_test import BaseMixerTest
|
||||
|
||||
|
||||
class DenonMixerTest(BaseMixerTest, unittest.TestCase):
|
||||
class DummyMixerTest(BaseMixerTest, unittest.TestCase):
|
||||
mixer_class = DummyMixer
|
||||
|
||||
def test_set_volume_is_capped(self):
|
||||
@ -16,3 +16,8 @@ class DenonMixerTest(BaseMixerTest, unittest.TestCase):
|
||||
self.mixer.amplification_factor = 0.5
|
||||
self.mixer._volume = 50
|
||||
self.assertEquals(self.mixer.volume, 100)
|
||||
|
||||
def test_get_volume_get_the_same_number_as_was_set(self):
|
||||
self.mixer.amplification_factor = 0.5
|
||||
self.mixer.volume = 13
|
||||
self.assertEquals(self.mixer.volume, 13)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user