From dd7c5dd00a0bdfa07e3bfc8edb78f8020ea560cf Mon Sep 17 00:00:00 2001 From: Chris Cochrun Date: Thu, 12 Dec 2024 09:29:03 -0600 Subject: [PATCH] trying to use async instead of dedicated thread --- src/main.rs | 16 +++++++++-- src/ui/presenter.rs | 68 +++++++++++++++++++++------------------------ 2 files changed, 46 insertions(+), 38 deletions(-) diff --git a/src/main.rs b/src/main.rs index ad5a072..3ee2877 100644 --- a/src/main.rs +++ b/src/main.rs @@ -101,6 +101,7 @@ enum Message { WindowOpened(window::Id, Option), WindowClosed(window::Id), Quit, + None, } impl cosmic::Application for App { @@ -359,14 +360,24 @@ impl cosmic::Application for App { ) -> cosmic::Task> { match message { Message::Present(message) => { - let _ = self.presenter.update(message); + debug!(?message); + let task = self.presenter.update(message); + debug!("Past"); if self.presentation_open { if let Some(video) = &mut self.presenter.video { video.set_muted(false); } } // self.core.nav_bar_toggle(); - Task::none() + task.then(|x| { + debug!(?x); + Task::none() + }) + // task.map(|x| { + // debug!(?x); + // cosmic::app::Message::App(Message::None) + // }) + // Task::batch([task]) } Message::File(file) => { self.file = file; @@ -440,6 +451,7 @@ impl cosmic::Application for App { Message::Quit => cosmic::iced::exit(), Message::DndEnter(service_item) => todo!(), Message::DndDrop(service_item) => todo!(), + Message::None => Task::none(), } } diff --git a/src/ui/presenter.rs b/src/ui/presenter.rs index 4d295ba..54c98cc 100644 --- a/src/ui/presenter.rs +++ b/src/ui/presenter.rs @@ -1,10 +1,5 @@ use std::{ - fs::File, - io::BufReader, - path::{Path, PathBuf}, - sync::Arc, - thread, - time::Duration, + fs::File, io::BufReader, path::PathBuf, sync::Arc, time::Duration, }; use cosmic::{ @@ -26,18 +21,11 @@ use cosmic::{ Task, }; use iced_video_player::{Position, Video, VideoPlayer}; -use miette::{Context, IntoDiagnostic, Result}; -use rodio::{ - source::{self, SineWave, Source}, - Decoder, OutputStream, Sink, -}; -use tracing::{debug, error, info}; +use rodio::{Decoder, OutputStream, Sink}; +use tracing::{debug, error}; use crate::{ - core::{ - service_items::{ServiceItem, ServiceItemModel}, - slide::Slide, - }, + core::{service_items::ServiceItemModel, slide::Slide}, BackgroundKind, }; @@ -66,6 +54,7 @@ pub(crate) enum Message { VideoPos(f32), VideoFrame, HoveredSlide(i32), + None, } impl Presenter { @@ -239,17 +228,23 @@ impl Presenter { Message::StartAudio => { if let Some(audio) = &mut self.audio { let audio = audio.clone(); - start_audio( - Arc::clone(&self.sink.1), - audio.clone(), - ); + debug!("hi"); + Task::perform( + start_audio(Arc::clone(&self.sink.1), audio), + |_| { + debug!("inside task"); + cosmic::app::Message::App(Message::None) + }, + ) + } else { + Task::none() } - Task::none() } Message::EndAudio => { self.sink.1.stop(); Task::none() } + Message::None => Task::none(), } } @@ -464,19 +459,20 @@ impl Presenter { } } -fn start_audio(sink: Arc, audio: PathBuf) { - thread::spawn(move || { - let file = BufReader::new(File::open(audio).unwrap()); - debug!(?file); - let source = Decoder::new(file).unwrap(); - let empty = sink.empty(); - let paused = sink.is_paused(); - debug!(empty, paused); - sink.append(source); - let empty = sink.empty(); - let paused = sink.is_paused(); - debug!(empty, paused); - sink.sleep_until_end(); - debug!(empty, paused, "Finished running"); - }); +async fn start_audio(sink: Arc, audio: PathBuf) { + // thread::spawn(move || { + let file = BufReader::new(File::open(audio).unwrap()); + debug!(?file); + let source = Decoder::new(file).unwrap(); + let empty = sink.empty(); + let paused = sink.is_paused(); + debug!(empty, paused); + sink.append(source); + let empty = sink.empty(); + let paused = sink.is_paused(); + debug!(empty, paused); + // sink.sleep_until_end(); + tokio::time::sleep(Duration::from_secs(10)); + debug!(empty, paused, "Finished running"); + // }); }