From bc916ba8f900e51e782df6a84fb5f1ae489099c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Laignel?= Date: Sat, 28 Mar 2020 16:14:32 +0100 Subject: [PATCH] Inifinite loop splitting a chapterless media --- ui/src/split_controller.rs | 67 +++++++++++++++++++++----------------- 1 file changed, 37 insertions(+), 30 deletions(-) diff --git a/ui/src/split_controller.rs b/ui/src/split_controller.rs index 9177697..53a40b6 100644 --- a/ui/src/split_controller.rs +++ b/ui/src/split_controller.rs @@ -276,50 +276,57 @@ impl MediaProcessor for SplitControllerImpl { fn next(&mut self) -> Result { let chapter = match self.toc_visitor.as_mut() { - Some(toc_visitor) => match toc_visitor.next_chapter() { - Some(chapter) => { - self.idx += 1; - chapter - } - None => { - self.split_file_info = None; - return Ok(ProcessingState::AllComplete(gettext( - "Media split succesfully", - ))); - } - }, + Some(toc_visitor) => toc_visitor.next_chapter().map(|chapter| { + self.idx += 1; + chapter + }), None => { // No chapter defined => build a fake chapter corresponding to the whole file - self.idx += 1; + if self.idx == 0 { + self.idx += 1; - let src_info = self.src_info.as_ref().unwrap().read().unwrap(); - let mut toc_entry = gst::TocEntry::new(gst::TocEntryType::Chapter, &"".to_owned()); - toc_entry - .get_mut() - .unwrap() - .set_start_stop_times(0, src_info.duration.as_i64()); - - let mut tag_list = gst::TagList::new(); - tag_list.get_mut().unwrap().add::( - &src_info.path.file_stem().unwrap().to_str().unwrap(), - gst::TagMergeMode::Replace, - ); - toc_entry.get_mut().unwrap().set_tags(tag_list); - - toc_entry + let src_info = self.src_info.as_ref().unwrap().read().unwrap(); + let mut toc_entry = + gst::TocEntry::new(gst::TocEntryType::Chapter, &"".to_owned()); + toc_entry + .get_mut() + .unwrap() + .set_start_stop_times(0, src_info.duration.as_i64()); + + let mut tag_list = gst::TagList::new(); + tag_list.get_mut().unwrap().add::( + &src_info.path.file_stem().unwrap().to_str().unwrap(), + gst::TagMergeMode::Replace, + ); + toc_entry.get_mut().unwrap().set_tags(tag_list); + + Some(toc_entry) + } else { + None + } } }; + if chapter.is_none() { + self.split_file_info = None; + + return Ok(ProcessingState::AllComplete(gettext( + "Media split succesfully", + ))); + } + + let chapter = chapter.as_ref().unwrap(); + self.current_chapter = Some( self.src_info .as_ref() .unwrap() .read() .unwrap() - .get_chapter_with_track_tags(&chapter, self.idx), + .get_chapter_with_track_tags(chapter, self.idx), ); - let split_path = self.get_split_path(&chapter); + let split_path = self.get_split_path(chapter); self.current_path = Some(Rc::clone(&split_path)); Ok(ProcessingState::WouldOutputTo(split_path))