]> git.immae.eu Git - perso/Immae/Projets/Python/MusicSampler.git/blobdiff - music_sampler/mapping.py
Make 'interrupt_wait' able to interrupt all waits
[perso/Immae/Projets/Python/MusicSampler.git] / music_sampler / mapping.py
index 50b68a9d903df95b0236cf76b4c39245628e9403..a04c2f6ec550021dacc65ec891a4d4e7a5f6f731 100644 (file)
@@ -197,17 +197,30 @@ class Mapping(RelativeLayout):
             music.set_gain_with_effect(db_gain, fade=fade)
 
     # Wait handler methods
-    def add_wait_id(self, wait_id, action_or_wait):
-        self.wait_ids[wait_id] = action_or_wait
-
-    def interrupt_wait(self, wait_id):
-        if wait_id in self.wait_ids:
-            action_or_wait = self.wait_ids[wait_id]
-            del(self.wait_ids[wait_id])
-            if isinstance(action_or_wait, Action):
-                action_or_wait.interrupt()
-            else:
-                action_or_wait.set()
+    def add_wait(self, action_or_wait, wait_id=None):
+        if wait_id is not None:
+            self.wait_ids[wait_id] = [action_or_wait]
+        else:
+            if None not in self.wait_ids:
+                self.wait_ids[None] = []
+            self.wait_ids[None].append(action_or_wait)
+
+    def interrupt_wait(self, wait_id=None):
+        if wait_id is None:
+            ids_to_interrupt = list(self.wait_ids.keys())
+        elif wait_id in self.wait_ids:
+            ids_to_interrupt = [wait_id]
+        else:
+            ids_to_interrupt = []
+
+        for _wait_id in ids_to_interrupt:
+            action_or_waits = self.wait_ids[_wait_id]
+            del(self.wait_ids[_wait_id])
+            for action_or_wait in action_or_waits:
+                if isinstance(action_or_wait, Action):
+                    action_or_wait.interrupt()
+                else:
+                    action_or_wait.set()
 
     # Methods to control running keys
     def start_running(self, key, start_time):