diff --git a/src/qml/presenter/Slide.qml b/src/qml/presenter/Slide.qml index 1f39798..3751348 100644 --- a/src/qml/presenter/Slide.qml +++ b/src/qml/presenter/Slide.qml @@ -62,12 +62,13 @@ Item { Component.onCompleted: mpvLoadingTimer.start() onFileLoaded: { /* showPassiveNotification(videoSource + " has been loaded"); */ - if (itemType == "song") + if (itemType == "song") { mpv.setProperty("loop", "inf"); - else if (vidLoop) + } else if (vidLoop) { mpv.setProperty("loop", "inf"); - else + } else { mpv.setProperty("loop", "no"); + } /* showPassiveNotification(mpv.getProperty("loop")); */ mpv.setProperty("sid", "no"); @@ -88,6 +89,7 @@ Item { interval: 100 onTriggered: { /* showPassiveNotification("YIPPEEE!") */ + mpv.stop(); if (vidStartTime > 0 && vidStartTime < vidEndTime) { /* mpv.seek(vidStartTime); */ let start = "+" + vidStartTime; diff --git a/src/rust/ffmpeg.rs b/src/rust/ffmpeg.rs index bf46e77..6056167 100644 --- a/src/rust/ffmpeg.rs +++ b/src/rust/ffmpeg.rs @@ -6,7 +6,7 @@ use std::process::Command; use std::str; use tracing::debug; -pub fn bg_from_video(video: &Path) -> PathBuf { +pub async fn bg_from_video(video: &Path) -> PathBuf { let video = PathBuf::from(video); debug!(?video); let mut data_dir = dirs::data_local_dir().unwrap(); diff --git a/src/rust/slide_model.rs b/src/rust/slide_model.rs index 046ab77..b0d8111 100644 --- a/src/rust/slide_model.rs +++ b/src/rust/slide_model.rs @@ -318,25 +318,29 @@ impl slide_model::SlideModel { vector_roles .append(self.get_role(SlideRoles::VideoThumbnail)); - let model_index = - &self.index(index, 0, &QModelIndex::default()); + let thread = self.qt_thread(); + let model_index = &self.as_ref().index(index, 0, &QModelIndex::default()); if let Some(slide) = self.as_mut().rust_mut().slides.get_mut(index as usize) { if !slide.video_background.is_empty() { + let runtime = tokio::runtime::Runtime::new().unwrap(); let path = PathBuf::from(slide.video_background.to_string()); - let video = QString::from( - ffmpeg::bg_from_video(&path).to_str().unwrap(), - ) - .insert(0, &QString::from("file://")) - .to_owned(); - slide.video_thumbnail = video; - self.as_mut().data_changed( - model_index, - model_index, - &vector_roles, - ); + runtime.spawn(async move { + let video = ffmpeg::bg_from_video(&path).await; + let video = QString::from( + video.to_str().unwrap() + ).insert(0, &QString::from("file://")).to_owned(); + slide.video_thumbnail = video; + thread.queue(move |mut slide| + slide.as_mut().data_changed( + model_index, + model_index, + &vector_roles, + ) + ); + }); } } true