From 8aa13dd2e7a2320f3aaa2f9e369137dc5808ce90 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Tue, 24 Oct 2023 12:37:11 +0530 Subject: [PATCH] When starting smil audio jump to the first available audio element in the spine after the current item in case the current item has no smil elements --- src/pyj/read_book/read_audio_ebook.pyj | 15 +++++++++++++-- src/pyj/read_book/smil.pyj | 3 +-- 2 files changed, 14 insertions(+), 4 deletions(-) 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]