reverted async attempt to thread based

This commit is contained in:
Chris Cochrun 2024-12-12 13:35:33 -06:00
parent c08030394e
commit 9aa1a46937
2 changed files with 71 additions and 38 deletions

View file

@ -1,5 +1,6 @@
use clap::{command, Parser}; use clap::{command, Parser};
use core::service_items::{ServiceItem, ServiceItemModel}; use core::service_items::{ServiceItem, ServiceItemModel};
use cosmic::app::context_drawer::ContextDrawer;
use cosmic::app::{Core, Settings, Task}; use cosmic::app::{Core, Settings, Task};
use cosmic::iced::keyboard::Key; use cosmic::iced::keyboard::Key;
use cosmic::iced::window::{Mode, Position}; use cosmic::iced::window::{Mode, Position};
@ -11,7 +12,8 @@ use cosmic::prelude::*;
use cosmic::widget::aspect_ratio::aspect_ratio_container; use cosmic::widget::aspect_ratio::aspect_ratio_container;
use cosmic::widget::tooltip::Position as TPosition; use cosmic::widget::tooltip::Position as TPosition;
use cosmic::widget::{ use cosmic::widget::{
button, image, nav_bar, text, tooltip, Responsive, Space, button, context_drawer, image, nav_bar, text, tooltip,
Responsive, Space,
}; };
use cosmic::widget::{icon, slider}; use cosmic::widget::{icon, slider};
use cosmic::{executor, Application, ApplicationExt, Element}; use cosmic::{executor, Application, ApplicationExt, Element};
@ -354,6 +356,22 @@ impl cosmic::Application for App {
}) })
} }
fn context_drawer(
&self,
) -> Option<
cosmic::app::context_drawer::ContextDrawer<Self::Message>,
> {
Some(ContextDrawer {
title: Some("Context".into()),
header_actions: vec![],
header: Some("hi".into()),
content: "Sup".into(),
footer: Some("foot".into()),
on_close: Message::None,
});
None
}
fn update( fn update(
&mut self, &mut self,
message: Message, message: Message,
@ -373,10 +391,11 @@ impl cosmic::Application for App {
// debug!(?x); // debug!(?x);
// Task::none() // Task::none()
// }) // })
task.map(|x| { let task = task.map(|x| {
debug!(?x); debug!(?x);
cosmic::app::Message::App(Message::None) cosmic::app::Message::None
}) });
task
// Task::batch([task]) // Task::batch([task])
} }
Message::File(file) => { Message::File(file) => {

View file

@ -1,4 +1,6 @@
use std::{fs::File, io::BufReader, path::PathBuf, sync::Arc}; use std::{
fs::File, io::BufReader, path::PathBuf, sync::Arc, thread,
};
use cosmic::{ use cosmic::{
dialog::ashpd::url::Url, dialog::ashpd::url::Url,
@ -8,13 +10,15 @@ use cosmic::{
Vector, Vector,
}, },
iced_widget::{ iced_widget::{
scrollable::{Direction, Scrollbar}, scrollable::{
scroll_by, AbsoluteOffset, Direction, Scrollbar,
},
stack, stack,
}, },
prelude::*, prelude::*,
widget::{ widget::{
container, image, mouse_area, responsive, scrollable, text, container, image, mouse_area, responsive, scrollable, text,
Container, Responsive, Row, Space, Container, Id, Responsive, Row, Space,
}, },
Task, Task,
}; };
@ -38,6 +42,7 @@ pub(crate) struct Presenter {
pub audio: Option<PathBuf>, pub audio: Option<PathBuf>,
sink: (OutputStream, Arc<Sink>), sink: (OutputStream, Arc<Sink>),
hovered_slide: i32, hovered_slide: i32,
scroll_id: Id,
} }
#[derive(Debug, Clone, PartialEq)] #[derive(Debug, Clone, PartialEq)]
@ -101,6 +106,7 @@ impl Presenter {
Arc::new(Sink::try_new(&stream_handle).unwrap()), Arc::new(Sink::try_new(&stream_handle).unwrap()),
) )
}, },
scroll_id: Id::unique(),
} }
} }
@ -133,6 +139,7 @@ impl Presenter {
} }
Message::SlideChange(id) => { Message::SlideChange(id) => {
debug!(id, "slide changed"); debug!(id, "slide changed");
let right = self.current_slide_index < id;
self.current_slide_index = id; self.current_slide_index = id;
if let Some(slide) = self.slides.get(id as usize) { if let Some(slide) = self.slides.get(id as usize) {
self.current_slide = slide.clone(); self.current_slide = slide.clone();
@ -140,6 +147,20 @@ impl Presenter {
if let Some(video) = &mut self.video { if let Some(video) = &mut self.video {
let _ = video.restart_stream(); let _ = video.restart_stream();
} }
let offset = AbsoluteOffset {
x: {
if right {
200.0
} else {
-200.0
}
},
y: 0.0,
};
let op: Task<Message> =
scroll_by(self.scroll_id.clone(), offset);
self.reset_video(); self.reset_video();
if let Some(audio) = &mut self.current_slide.audio() { if let Some(audio) = &mut self.current_slide.audio() {
let audio = audio.to_str().unwrap().to_string(); let audio = audio.to_str().unwrap().to_string();
@ -172,7 +193,7 @@ impl Presenter {
let _ = self.update(Message::EndAudio); let _ = self.update(Message::EndAudio);
} }
} }
Task::none() op.map(|x| cosmic::app::Message::App(x))
} }
Message::EndVideo => { Message::EndVideo => {
// if self.current_slide.video_loop() { // if self.current_slide.video_loop() {
@ -227,17 +248,9 @@ impl Presenter {
if let Some(audio) = &mut self.audio { if let Some(audio) = &mut self.audio {
let audio = audio.clone(); let audio = audio.clone();
debug!("hi"); debug!("hi");
let task = Task::perform( start_audio(Arc::clone(&self.sink.1), audio);
start_audio(Arc::clone(&self.sink.1), audio),
|_| {
debug!("inside task");
cosmic::app::Message::App(Message::None)
},
);
task.chain(Task::none())
} else {
Task::none()
} }
Task::none()
} }
Message::EndAudio => { Message::EndAudio => {
self.sink.1.stop(); self.sink.1.stop();
@ -321,7 +334,8 @@ impl Presenter {
scrollable(Row::from_vec(items).spacing(10).padding(15)) scrollable(Row::from_vec(items).spacing(10).padding(15))
.direction(Direction::Horizontal(Scrollbar::new())) .direction(Direction::Horizontal(Scrollbar::new()))
.height(Length::Fill) .height(Length::Fill)
.width(Length::Fill); .width(Length::Fill)
.id(self.scroll_id.clone());
row.into() row.into()
} }
@ -458,23 +472,23 @@ impl Presenter {
} }
} }
async fn start_audio(sink: Arc<Sink>, audio: PathBuf) { 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();
// tokio::time::sleep(Duration::from_secs(10)); // tokio::time::sleep(Duration::from_secs(10));
let stream = cosmic::iced::time::every( // let stream = cosmic::iced::time::every(
cosmic::iced::time::Duration::from_secs(1), // cosmic::iced::time::Duration::from_secs(1),
); // );
debug!(empty, paused, "Finished running"); debug!(empty, paused, "Finished running");
// }); });
} }