trying to use async instead of dedicated thread

This commit is contained in:
Chris Cochrun 2024-12-12 09:29:03 -06:00
parent 47f089e360
commit dd7c5dd00a
2 changed files with 46 additions and 38 deletions

View file

@ -101,6 +101,7 @@ enum Message {
WindowOpened(window::Id, Option<Point>), WindowOpened(window::Id, Option<Point>),
WindowClosed(window::Id), WindowClosed(window::Id),
Quit, Quit,
None,
} }
impl cosmic::Application for App { impl cosmic::Application for App {
@ -359,14 +360,24 @@ impl cosmic::Application for App {
) -> cosmic::Task<cosmic::app::Message<Message>> { ) -> cosmic::Task<cosmic::app::Message<Message>> {
match message { match message {
Message::Present(message) => { Message::Present(message) => {
let _ = self.presenter.update(message); debug!(?message);
let task = self.presenter.update(message);
debug!("Past");
if self.presentation_open { if self.presentation_open {
if let Some(video) = &mut self.presenter.video { if let Some(video) = &mut self.presenter.video {
video.set_muted(false); video.set_muted(false);
} }
} }
// self.core.nav_bar_toggle(); // 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) => { Message::File(file) => {
self.file = file; self.file = file;
@ -440,6 +451,7 @@ impl cosmic::Application for App {
Message::Quit => cosmic::iced::exit(), Message::Quit => cosmic::iced::exit(),
Message::DndEnter(service_item) => todo!(), Message::DndEnter(service_item) => todo!(),
Message::DndDrop(service_item) => todo!(), Message::DndDrop(service_item) => todo!(),
Message::None => Task::none(),
} }
} }

View file

@ -1,10 +1,5 @@
use std::{ use std::{
fs::File, fs::File, io::BufReader, path::PathBuf, sync::Arc, time::Duration,
io::BufReader,
path::{Path, PathBuf},
sync::Arc,
thread,
time::Duration,
}; };
use cosmic::{ use cosmic::{
@ -26,18 +21,11 @@ use cosmic::{
Task, Task,
}; };
use iced_video_player::{Position, Video, VideoPlayer}; use iced_video_player::{Position, Video, VideoPlayer};
use miette::{Context, IntoDiagnostic, Result}; use rodio::{Decoder, OutputStream, Sink};
use rodio::{ use tracing::{debug, error};
source::{self, SineWave, Source},
Decoder, OutputStream, Sink,
};
use tracing::{debug, error, info};
use crate::{ use crate::{
core::{ core::{service_items::ServiceItemModel, slide::Slide},
service_items::{ServiceItem, ServiceItemModel},
slide::Slide,
},
BackgroundKind, BackgroundKind,
}; };
@ -66,6 +54,7 @@ pub(crate) enum Message {
VideoPos(f32), VideoPos(f32),
VideoFrame, VideoFrame,
HoveredSlide(i32), HoveredSlide(i32),
None,
} }
impl Presenter { impl Presenter {
@ -239,17 +228,23 @@ impl Presenter {
Message::StartAudio => { Message::StartAudio => {
if let Some(audio) = &mut self.audio { if let Some(audio) = &mut self.audio {
let audio = audio.clone(); let audio = audio.clone();
start_audio( debug!("hi");
Arc::clone(&self.sink.1), Task::perform(
audio.clone(), start_audio(Arc::clone(&self.sink.1), audio),
); |_| {
debug!("inside task");
cosmic::app::Message::App(Message::None)
},
)
} else {
Task::none()
} }
Task::none()
} }
Message::EndAudio => { Message::EndAudio => {
self.sink.1.stop(); self.sink.1.stop();
Task::none() Task::none()
} }
Message::None => Task::none(),
} }
} }
@ -464,19 +459,20 @@ impl Presenter {
} }
} }
fn start_audio(sink: Arc<Sink>, audio: PathBuf) { async fn start_audio(sink: Arc<Sink>, audio: PathBuf) {
thread::spawn(move || { // thread::spawn(move || {
let file = BufReader::new(File::open(audio).unwrap()); let file = BufReader::new(File::open(audio).unwrap());
debug!(?file); debug!(?file);
let source = Decoder::new(file).unwrap(); let source = Decoder::new(file).unwrap();
let empty = sink.empty(); let empty = sink.empty();
let paused = sink.is_paused(); let paused = sink.is_paused();
debug!(empty, paused); debug!(empty, paused);
sink.append(source); sink.append(source);
let empty = sink.empty(); let empty = sink.empty();
let paused = sink.is_paused(); let paused = sink.is_paused();
debug!(empty, paused); debug!(empty, paused);
sink.sleep_until_end(); // sink.sleep_until_end();
debug!(empty, paused, "Finished running"); tokio::time::sleep(Duration::from_secs(10));
}); debug!(empty, paused, "Finished running");
// });
} }