better structur so presenter tasks get back to the runtime
Some checks are pending
/ test (push) Waiting to run
Some checks are pending
/ test (push) Waiting to run
This commit is contained in:
parent
1847a35f1e
commit
206f5b16a5
2 changed files with 70 additions and 36 deletions
35
src/main.rs
35
src/main.rs
|
@ -570,6 +570,7 @@ impl cosmic::Application for App {
|
|||
}
|
||||
match self.presenter.update(message) {
|
||||
presenter::Action::Task(task) => task.map(|m| {
|
||||
debug!("Should run future");
|
||||
cosmic::Action::App(Message::Present(m))
|
||||
}),
|
||||
presenter::Action::None => Task::none(),
|
||||
|
@ -616,6 +617,7 @@ impl cosmic::Application for App {
|
|||
presenter::Action::PrevSlide => {
|
||||
let slide_index = self.current_item.1;
|
||||
let item_index = self.current_item.0;
|
||||
let mut tasks = vec![];
|
||||
if let Some(item) =
|
||||
self.service.get(item_index)
|
||||
{
|
||||
|
@ -623,14 +625,24 @@ impl cosmic::Application for App {
|
|||
let slide = item.slides
|
||||
[slide_index - 1]
|
||||
.clone();
|
||||
self.presenter.update(
|
||||
let action = self.presenter.update(
|
||||
presenter::Message::SlideChange(
|
||||
slide,
|
||||
),
|
||||
);
|
||||
match action {
|
||||
presenter::Action::Task(task) => {
|
||||
tasks.push(task.map(|m| {
|
||||
cosmic::Action::App(
|
||||
Message::Present(m),
|
||||
)
|
||||
}))
|
||||
}
|
||||
_ => todo!(),
|
||||
}
|
||||
self.current_item =
|
||||
(item_index, slide_index - 1);
|
||||
Task::none()
|
||||
Task::batch(tasks)
|
||||
} else if slide_index == 0
|
||||
&& item_index == 0
|
||||
{
|
||||
|
@ -653,9 +665,24 @@ impl cosmic::Application for App {
|
|||
if let Some(item) =
|
||||
self.service.get(item_index - 1)
|
||||
{
|
||||
self.presenter.update(presenter::Message::SlideChange(item.slides[previous_item_slides_length - 1].clone()));
|
||||
let action = self.presenter.update(presenter::Message::SlideChange(item.slides[previous_item_slides_length - 1].clone()));
|
||||
match action {
|
||||
presenter::Action::Task(
|
||||
task,
|
||||
) => {
|
||||
tasks
|
||||
.push(task.map(|m| {
|
||||
cosmic::Action::App(
|
||||
Message::Present(
|
||||
m,
|
||||
),
|
||||
)
|
||||
}))
|
||||
}
|
||||
_ => todo!(),
|
||||
}
|
||||
}
|
||||
Task::none()
|
||||
Task::batch(tasks)
|
||||
}
|
||||
} else {
|
||||
Task::none()
|
||||
|
|
|
@ -232,44 +232,45 @@ impl Presenter {
|
|||
let mut tasks = vec![];
|
||||
tasks.push(scroll_to(self.scroll_id.clone(), offset));
|
||||
|
||||
if let Some(audio) = &mut self.current_slide.audio() {
|
||||
let audio = audio.to_str().unwrap().to_string();
|
||||
let audio = if let Some(audio) =
|
||||
audio.strip_prefix(r"file://")
|
||||
if let Some(mut new_audio) =
|
||||
self.current_slide.audio()
|
||||
{
|
||||
if let Some(stripped_audio) = new_audio
|
||||
.to_str()
|
||||
.unwrap()
|
||||
.to_string()
|
||||
.strip_prefix(r"file://")
|
||||
{
|
||||
audio
|
||||
} else {
|
||||
audio.as_str()
|
||||
};
|
||||
let audio = PathBuf::from(audio);
|
||||
debug!("{:?}", audio);
|
||||
if audio.exists() {
|
||||
new_audio = PathBuf::from(stripped_audio);
|
||||
}
|
||||
debug!("{:?}", new_audio);
|
||||
if new_audio.exists() {
|
||||
let old_audio = self.audio.clone();
|
||||
match old_audio {
|
||||
Some(current_audio)
|
||||
if current_audio != audio =>
|
||||
if current_audio != *new_audio =>
|
||||
{
|
||||
self.audio = Some(audio.clone());
|
||||
self.audio = Some(new_audio.clone());
|
||||
debug!(
|
||||
?audio,
|
||||
?new_audio,
|
||||
?current_audio,
|
||||
"starting audio"
|
||||
"audio needs to change"
|
||||
);
|
||||
tasks.push(self.start_audio());
|
||||
}
|
||||
Some(current_audio) => {
|
||||
debug!(
|
||||
?audio,
|
||||
?new_audio,
|
||||
?current_audio,
|
||||
"could not find audio"
|
||||
"Same audio shouldn't change"
|
||||
);
|
||||
}
|
||||
None => {
|
||||
debug!(
|
||||
?audio,
|
||||
"could not find audio"
|
||||
?new_audio,
|
||||
"could not find audio, need to change"
|
||||
);
|
||||
self.audio = Some(audio.clone());
|
||||
self.audio = Some(new_audio.clone());
|
||||
tasks.push(self.start_audio());
|
||||
}
|
||||
};
|
||||
|
@ -281,6 +282,8 @@ impl Presenter {
|
|||
self.audio = None;
|
||||
self.update(Message::EndAudio);
|
||||
}
|
||||
let task_count = tasks.len();
|
||||
debug!(?task_count);
|
||||
return Action::Task(Task::batch(tasks));
|
||||
}
|
||||
Message::ChangeFont(s) => {
|
||||
|
@ -391,18 +394,6 @@ impl Presenter {
|
|||
Action::None
|
||||
}
|
||||
|
||||
fn start_audio(&mut self) -> Task<Message> {
|
||||
if let Some(audio) = &mut self.audio {
|
||||
let audio = audio.clone();
|
||||
Task::perform(
|
||||
start_audio(Arc::clone(&self.sink.1), audio),
|
||||
|_| Message::None,
|
||||
)
|
||||
} else {
|
||||
Task::none()
|
||||
}
|
||||
}
|
||||
|
||||
pub fn view(&self) -> Element<Message> {
|
||||
slide_view(
|
||||
self.current_slide.clone(),
|
||||
|
@ -540,10 +531,26 @@ impl Presenter {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn start_audio(&mut self) -> Task<Message> {
|
||||
if let Some(audio) = &mut self.audio {
|
||||
debug!(?audio, "This is where audio should be changing");
|
||||
let audio = audio.clone();
|
||||
Task::perform(
|
||||
start_audio(Arc::clone(&self.sink.1), audio),
|
||||
|_| Message::None,
|
||||
)
|
||||
} else {
|
||||
debug!(?self.audio, "Apparently this doesn't exist");
|
||||
Task::none()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// This needs to be async so that rodio's audio will work
|
||||
#[allow(clippy::unused_async)]
|
||||
async fn start_audio(sink: Arc<Sink>, audio: PathBuf) {
|
||||
debug!(?audio);
|
||||
let file = BufReader::new(File::open(audio).unwrap());
|
||||
debug!(?file);
|
||||
let source = Decoder::new(file).unwrap();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue