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>),
WindowClosed(window::Id),
Quit,
None,
}
impl cosmic::Application for App {
@ -359,14 +360,24 @@ impl cosmic::Application for App {
) -> cosmic::Task<cosmic::app::Message<Message>> {
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(),
}
}

View file

@ -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<Sink>, 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<Sink>, 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");
// });
}