X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=helpers%2Fmusic_file.py;h=aeba1b9912fd9d2aa74da3fddd8683fc9e21fb12;hb=b7ca3fc2b6b05d3aafd44dd0b8e40a4707213ff5;hp=ccf60ce5eb8874f5b68dc81d48a89b9e86fd8626;hpb=db905e0706ab9a1f92102e86f677c66371be4621;p=perso%2FImmae%2FProjets%2FPython%2FMusicSampler.git 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()