diff --git a/src/pyj/read_book/read_audio_ebook.pyj b/src/pyj/read_book/read_audio_ebook.pyj index 9bc85b55bd..9ff9a53e7a 100644 --- a/src/pyj/read_book/read_audio_ebook.pyj +++ b/src/pyj/read_book/read_audio_ebook.pyj @@ -147,7 +147,7 @@ class ReadAudioEbook: self.play() ) return - spine_name, par = find_next_audio_in_spine(self.view.currently_showing.name, self.view.book.manifest) + spine_name, par = find_next_audio_in_spine(self.view.currently_showing.spine_index, self.view.book.manifest) if spine_name: self.view.show_name(spine_name, initial_position={'type': 'smil_id', 'anchor': par.anchor}) else: @@ -188,7 +188,18 @@ class ReadAudioEbook: ) def start_playback(self): - self.send_message('play') + cn = self.view.currently_showing.name + if self.view.book.manifest.files[cn]?.smil_map: + self.send_message('play') + else: + spine_name, par = find_next_audio_in_spine(self.view.currently_showing.spine_index, self.view.book.manifest) + if not spine_name: + spine_name, par = find_next_audio_in_spine(-1, self.view.book.manifest) + if spine_name: + self.view.show_name(spine_name, initial_position={'type': 'smil_id', 'anchor': par.anchor}) + else: + self.hide() + error_dialog(_('No audio'), _('No audio found in this book')) @property def container(self): diff --git a/src/pyj/read_book/smil.pyj b/src/pyj/read_book/smil.pyj index ad1f2d6fb7..bda0816fb2 100644 --- a/src/pyj/read_book/smil.pyj +++ b/src/pyj/read_book/smil.pyj @@ -81,10 +81,9 @@ def first_par(smil_map): return None -def find_next_audio_in_spine(current_name, book_manifest): +def find_next_audio_in_spine(spine_idx, book_manifest): spine = book_manifest.spine file_map = book_manifest.files - spine_idx = spine.indexOf(current_name) for i in range(spine_idx + 1, spine.length): q = spine[i]