Skip to content

Commit

Permalink
Fix mod-host add/remove effects and connections. Mod-host: Improve ad…
Browse files Browse the repository at this point in the history
…d effect: parameters that your value is the default will not be sent for mod-host process (not sent tcp message)
  • Loading branch information
SrMouraSilva committed Mar 14, 2017
1 parent d526737 commit 4ff7698
Show file tree
Hide file tree
Showing 9 changed files with 108 additions and 33 deletions.
6 changes: 3 additions & 3 deletions pluginsmanager/banks_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@ def on_pedalboard_updated(self, pedalboard, update_type, **kwargs):
def on_effect_updated(self, effect, update_type, **kwargs):
for observer in self.observers:
if observer != self.scope:
observer.on_effect_updated(effect, update_type)
observer.on_effect_updated(effect, update_type, **kwargs)

def on_effect_status_toggled(self, effect):
for observer in self.observers:
Expand All @@ -137,7 +137,7 @@ def on_param_value_changed(self, param):
if observer != self.scope:
observer.on_param_value_changed(param)

def on_connection_updated(self, connection, update_type):
def on_connection_updated(self, connection, update_type, **kwargs):
for observer in self.observers:
if observer != self.scope:
observer.on_connection_updated(connection, update_type)
observer.on_connection_updated(connection, update_type, **kwargs)
34 changes: 20 additions & 14 deletions pluginsmanager/mod_host/mod_host.py
Original file line number Diff line number Diff line change
Expand Up @@ -119,16 +119,19 @@ def on_current_pedalboard_changed(self, pedalboard):
if self.pedalboard is not None:
self._remove_pedalboard(self.pedalboard)

for effect in pedalboard.effects:
self.on_effect_updated(effect, UpdateType.CREATED)
for connection in pedalboard.connections:
self.on_connection_updated(connection, UpdateType.CREATED)

self._pedalboard = pedalboard

# Changes are only updated if self._pedalboard = pedalboard
if pedalboard is not None:
for index, effect in enumerate(pedalboard.effects):
self.on_effect_updated(effect, UpdateType.CREATED, index=index, origin=pedalboard)

for index, connection in enumerate(pedalboard.connections):
self.on_connection_updated(connection, UpdateType.CREATED, index=index, origin=pedalboard)

def _remove_pedalboard(self, pedalboard):
for effect in pedalboard.effects:
self.on_effect_updated(effect, UpdateType.DELETED)
for index, effect in enumerate(pedalboard.effects):
self.on_effect_updated(effect, UpdateType.DELETED, index=index, origin=pedalboard)

def on_bank_updated(self, bank, update_type, **kwargs):
if self.pedalboard is not None \
Expand All @@ -142,8 +145,8 @@ def on_pedalboard_updated(self, pedalboard, update_type, **kwargs):

self.on_current_pedalboard_changed(pedalboard)

def on_effect_updated(self, effect, update_type, **kwargs):
if effect.pedalboard != self.pedalboard:
def on_effect_updated(self, effect, update_type, index, origin, **kwargs):
if origin != self.pedalboard:
return

if update_type == UpdateType.CREATED:
Expand All @@ -156,7 +159,8 @@ def on_effect_updated(self, effect, update_type, **kwargs):

def _load_params_of(self, effect):
for param in effect.params:
self.on_param_value_changed(param)
if param.value != param.default:
self._set_param_value(param)

def on_effect_status_toggled(self, effect):
if effect.pedalboard != self.pedalboard:
Expand All @@ -168,14 +172,16 @@ def on_param_value_changed(self, param):
if param.effect.pedalboard != self.pedalboard:
return

self.host.set_param_value(param)
self._set_param_value(param)

def on_connection_updated(self, connection, update_type):
if self.pedalboard is None \
or connection not in self.pedalboard.connections:
def on_connection_updated(self, connection, update_type, index, origin, **kwargs):
if origin != self.pedalboard:
return

if update_type == UpdateType.CREATED:
self.host.connect(connection)
elif update_type == UpdateType.DELETED:
self.host.disconnect(connection)

def _set_param_value(self, param):
self.host.set_param_value(param)
14 changes: 14 additions & 0 deletions pluginsmanager/model/param.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ class Param(metaclass=ABCMeta):
>>> param
<Lv2Param object as value=1.5 [0.4000000059604645 - 15.0] at 0x7fd587f77908>
>>> param.default
1.5
>>> param.value = 14
>>> symbol = param.symbol
Expand All @@ -38,6 +40,7 @@ class Param(metaclass=ABCMeta):
def __init__(self, effect, default):
self._effect = effect
self._value = default
self._default = default

self.observer = MagicMock()

Expand All @@ -48,6 +51,17 @@ def effect(self):
"""
return self._effect

@property
def default(self):
"""
Default parameter value.
Then a effect is instanced, the value initial for a parameter is
your default value.
:getter: Default parameter value.
"""
return self._default

@property
def value(self):
"""
Expand Down
4 changes: 2 additions & 2 deletions pluginsmanager/model/pedalboard.py
Original file line number Diff line number Diff line change
Expand Up @@ -88,10 +88,10 @@ def _effects_observer(self, update_type, effect, index):
effect.pedalboard = None
effect.observer = MagicMock()

self.observer.on_effect_updated(effect, update_type, **kwargs)
self.observer.on_effect_updated(effect, update_type, index=index, origin=self)

def _connections_observer(self, update_type, connection, index):
self.observer.on_connection_updated(connection, update_type)
self.observer.on_connection_updated(connection, update_type, index=index, origin=self)

@property
def json(self):
Expand Down
4 changes: 3 additions & 1 deletion pluginsmanager/model/updates_observer.py
Original file line number Diff line number Diff line change
Expand Up @@ -78,12 +78,14 @@ def on_param_value_changed(self, param):
pass

@abstractmethod
def on_connection_updated(self, connection, update_type):
def on_connection_updated(self, connection, update_type, **kwargs):
"""
Called when changes occurs in any :class:`pluginsmanager.model.connection.Connection` of Pedalboard
(adding, updating or removing connections)
:param pluginsmanager.model.connection.Connection connection: Connection changed
:param UpdateType update_type: Change type
:param int index: Connection index (or old index if update_type == UpdateType.DELETED)
:param Pedalboard origin: Pedalboard that the connection is (or has) contained
"""
pass
2 changes: 1 addition & 1 deletion pluginsmanager/observer/autosaver.py
Original file line number Diff line number Diff line change
Expand Up @@ -97,5 +97,5 @@ def on_effect_status_toggled(self, effect):
def on_param_value_changed(self, param):
self.save(param.effect.pedalboard.bank)

def on_connection_updated(self, connection, update_type):
def on_connection_updated(self, connection, update_type, **kwargs):
self.save(connection.output.effect.pedalboard.bank)
14 changes: 11 additions & 3 deletions test/banks_manager_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,31 +33,39 @@ def test_observers(self):
reverb2 = builder.build('http://calf.sourceforge.net/plugins/Reverb')

pedalboard.append(reverb)
observer.on_effect_updated.assert_called_with(reverb, UpdateType.CREATED)
observer.on_effect_updated.assert_called_with(reverb, UpdateType.CREATED, index=reverb.index, origin=pedalboard)
pedalboard.append(fuzz)
observer.on_effect_updated.assert_called_with(fuzz, UpdateType.CREATED)
observer.on_effect_updated.assert_called_with(fuzz, UpdateType.CREATED, index=fuzz.index, origin=pedalboard)
pedalboard.append(reverb2)
observer.on_effect_updated.assert_called_with(reverb2, UpdateType.CREATED)
observer.on_effect_updated.assert_called_with(reverb2, UpdateType.CREATED, index=reverb2.index, origin=pedalboard)

reverb.outputs[0].connect(fuzz.inputs[0])
observer.on_connection_updated.assert_called_with(
Connection(reverb.outputs[0], fuzz.inputs[0]),
UpdateType.CREATED,
index=len(pedalboard.connections)-1,
origin=pedalboard
)
reverb.outputs[1].connect(fuzz.inputs[0])
observer.on_connection_updated.assert_called_with(
Connection(reverb.outputs[1], fuzz.inputs[0]),
UpdateType.CREATED,
index=len(pedalboard.connections) - 1,
origin=pedalboard
)
fuzz.outputs[0].connect(reverb2.inputs[0])
observer.on_connection_updated.assert_called_with(
Connection(fuzz.outputs[0], reverb2.inputs[0]),
UpdateType.CREATED,
index=len(pedalboard.connections) - 1,
origin=pedalboard
)
reverb.outputs[0].connect(reverb2.inputs[0])
observer.on_connection_updated.assert_called_with(
Connection(reverb.outputs[0], reverb2.inputs[0]),
UpdateType.CREATED,
index=len(pedalboard.connections) - 1,
origin=pedalboard
)

fuzz.toggle()
Expand Down
28 changes: 24 additions & 4 deletions test/model/output_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,13 +34,23 @@ def test_connect(self):
self.assertEqual(1, len(pedalboard.connections))

new_connection = pedalboard.connections[0]
pedalboard.observer.on_connection_updated.assert_called_with(new_connection, UpdateType.CREATED)
pedalboard.observer.on_connection_updated.assert_called_with(
new_connection,
UpdateType.CREATED,
index=len(pedalboard.connections) - 1,
origin=pedalboard
)

reverb.outputs[1].connect(reverb2.inputs[1])
self.assertEqual(2, len(pedalboard.connections))

new_connection = pedalboard.connections[-1]
pedalboard.observer.on_connection_updated.assert_called_with(new_connection, UpdateType.CREATED)
pedalboard.observer.on_connection_updated.assert_called_with(
new_connection,
UpdateType.CREATED,
index=len(pedalboard.connections) - 1,
origin=pedalboard
)

def test_disconnect(self):
pedalboard = Pedalboard('Pedalboard name')
Expand All @@ -61,12 +71,22 @@ def test_disconnect(self):
disconnected = pedalboard.connections[-1]
reverb.outputs[1].disconnect(reverb2.inputs[0])
self.assertEqual(1, len(pedalboard.connections))
pedalboard.observer.on_connection_updated.assert_called_with(disconnected, UpdateType.DELETED)
pedalboard.observer.on_connection_updated.assert_called_with(
disconnected,
UpdateType.DELETED,
index=len(pedalboard.connections),
origin=pedalboard
)

disconnected = pedalboard.connections[-1]
reverb.outputs[0].disconnect(reverb2.inputs[0])
self.assertEqual(0, len(pedalboard.connections))
pedalboard.observer.on_connection_updated.assert_called_with(disconnected, UpdateType.DELETED)
pedalboard.observer.on_connection_updated.assert_called_with(
disconnected,
UpdateType.DELETED,
index=len(pedalboard.connections),
origin=pedalboard
)

def test_disconnect_connection_not_created(self):
pedalboard = Pedalboard('Pedalboard name')
Expand Down
35 changes: 30 additions & 5 deletions test/model/pedalboard_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -92,11 +92,21 @@ def test_add_connection_by_connections(self):

pedalboard.connections.append(connection1)
self.assertEqual(pedalboard.connections[0], connection1)
pedalboard.observer.on_connection_updated.assert_called_with(connection1, UpdateType.CREATED)
pedalboard.observer.on_connection_updated.assert_called_with(
connection1,
UpdateType.CREATED,
index=len(pedalboard.connections) - 1,
origin=pedalboard
)

pedalboard.connections.append(connection2)
self.assertEqual(pedalboard.connections[1], connection2)
pedalboard.observer.on_connection_updated.assert_called_with(connection2, UpdateType.CREATED)
pedalboard.observer.on_connection_updated.assert_called_with(
connection2,
UpdateType.CREATED,
index=len(pedalboard.connections) - 1,
origin=pedalboard
)

def test_update_connection(self):
pedalboard = Pedalboard('Pedalboard 1')
Expand All @@ -110,7 +120,12 @@ def test_update_connection(self):
pedalboard.connections[0] = connection2

self.assertEqual(pedalboard.connections[0], connection2)
pedalboard.observer.on_connection_updated.assert_called_with(connection2, UpdateType.UPDATED)
pedalboard.observer.on_connection_updated.assert_called_with(
connection2,
UpdateType.UPDATED,
index=len(pedalboard.connections) - 1,
origin=pedalboard
)

def test_delete_connection(self):
""" Other mode is by output.disconnect(input)"""
Expand All @@ -124,7 +139,12 @@ def test_delete_connection(self):
del pedalboard.connections[0]

self.assertEqual(len(pedalboard.connections), 0)
pedalboard.observer.on_connection_updated.assert_called_with(connection, UpdateType.DELETED)
pedalboard.observer.on_connection_updated.assert_called_with(
connection,
UpdateType.DELETED,
index=0,
origin=pedalboard
)

def test_delete_effect_remove_your_connections(self):
pedalboard = Pedalboard('Pedalboard name')
Expand Down Expand Up @@ -152,7 +172,12 @@ def test_delete_effect_remove_your_connections(self):

self.assertEqual(1, len(pedalboard.connections))
for connection in fuzz_connections:
pedalboard.observer.on_connection_updated.assert_any_call(connection, UpdateType.DELETED)
pedalboard.observer.on_connection_updated.assert_any_call(
connection,
UpdateType.DELETED,
index=0,
origin=pedalboard
)

def test_data(self):
pedalboard = Pedalboard('Bank 1')
Expand Down

0 comments on commit 4ff7698

Please sign in to comment.