trying to use async instead of dedicated thread
This commit is contained in:
parent
47f089e360
commit
dd7c5dd00a
16
src/main.rs
16
src/main.rs
|
@ -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(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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");
|
||||||
|
// });
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue