better structur so presenter tasks get back to the runtime
Some checks are pending
/ test (push) Waiting to run

This commit is contained in:
Chris Cochrun 2025-08-18 05:35:42 -05:00
parent 1847a35f1e
commit 206f5b16a5
2 changed files with 70 additions and 36 deletions

View file

@ -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();