From b7ca3fc2b6b05d3aafd44dd0b8e40a4707213ff5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Isma=C3=ABl=20Bouya?= Date: Mon, 25 Jul 2016 17:43:47 +0200 Subject: Cleanup actions and subscribe to music events for loading --- helpers/music_file.py | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) (limited to 'helpers/music_file.py') diff --git a/helpers/music_file.py b/helpers/music_file.py index ccf60ce..aeba1b9 100644 --- a/helpers/music_file.py +++ b/helpers/music_file.py @@ -32,7 +32,8 @@ class MusicFile: { 'trigger': 'load', 'source': 'initial', - 'dest': 'loading' + 'dest': 'loading', + 'after': 'poll_loaded' }, { 'trigger': 'fail', @@ -68,7 +69,8 @@ class MusicFile: 'trigger': 'stopped', 'source': '*', 'dest': 'loaded', - 'before': 'trigger_stopped_events' + 'before': 'trigger_stopped_events', + 'conditions': ['is_in_use'] } ] @@ -77,6 +79,7 @@ class MusicFile: transitions=self.TRANSITIONS, initial='initial', ignore_invalid_triggers=True) + self.loaded_callbacks = [] self.mapping = mapping self.filename = filename self.name = name or filename @@ -230,6 +233,21 @@ class MusicFile: self.wait_event.clear() self.wait_event.wait() + # Let other subscribe for an event when they are ready + def subscribe_loaded(self, callback): + with file_lock: + if self.is_loaded(allow_substates=True): + callback(True) + elif self.is_failed(): + callback(False) + else: + self.loaded_callbacks.append(callback) + + def poll_loaded(self): + for callback in self.loaded_callbacks: + callback(self.is_loaded()) + self.loaded_callbacks = [] + # Callbacks def finished_callback(self): self.stopped() -- cgit v1.2.3 From e55b29bb38b845c7b9e65a1fbca0198882658e14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Isma=C3=ABl=20Bouya?= Date: Mon, 25 Jul 2016 23:50:51 +0200 Subject: Use machine for key handling --- helpers/music_file.py | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) (limited to 'helpers/music_file.py') diff --git a/helpers/music_file.py b/helpers/music_file.py index aeba1b9..a972bc5 100644 --- a/helpers/music_file.py +++ b/helpers/music_file.py @@ -48,7 +48,10 @@ class MusicFile: { 'trigger': 'start_playing', 'source': 'loaded', - 'dest': 'loaded_playing' + 'dest': 'loaded_playing', + # if a child has no transitions, then it is bubbled to the parent, + # and we don't want that. Not useful in that machine precisely. + 'conditions': ['is_loaded'] }, { 'trigger': 'pause', @@ -235,13 +238,14 @@ class MusicFile: # Let other subscribe for an event when they are ready def subscribe_loaded(self, callback): - with file_lock: - if self.is_loaded(allow_substates=True): - callback(True) - elif self.is_failed(): - callback(False) - else: - self.loaded_callbacks.append(callback) + # FIXME: should lock to be sure we have no race, but it makes the + # initialization screen not showing until everything is loaded + if self.is_loaded(allow_substates=True): + callback(True) + elif self.is_failed(): + callback(False) + else: + self.loaded_callbacks.append(callback) def poll_loaded(self): for callback in self.loaded_callbacks: -- cgit v1.2.3