Compare commits

...

2 commits

Author SHA1 Message Date
3c1c76d41c presentations don't need to create the slide at all if not in range
Some checks are pending
/ test (push) Waiting to run
2025-10-20 15:02:00 -05:00
001650a656 presentations can show only the slides in their index ranges
This means that we only generate slides for these indexes.
2025-10-20 14:59:37 -05:00

View file

@ -186,6 +186,15 @@ impl ServiceTrait for Presentation {
fn to_slides(&self) -> Result<Vec<Slide>> {
debug!(?self);
let PresKind::Pdf {
starting_index,
ending_index,
} = self.kind
else {
return Err(miette::miette!(
"This is not a pdf presentation"
));
};
let background = Background::try_from(self.path.clone())
.into_diagnostic()?;
debug!(?background);
@ -195,7 +204,14 @@ impl ServiceTrait for Presentation {
let pages = document.pages().into_diagnostic()?;
debug!(?pages);
let pages: Vec<Handle> = pages
.filter_map(|page| {
.enumerate()
.filter_map(|(index, page)| {
if (index as i32) < starting_index {
return None;
} else if (index as i32) > ending_index {
return None;
};
let Some(page) = page.ok() else {
return None;
};
@ -218,7 +234,7 @@ impl ServiceTrait for Presentation {
.collect();
let mut slides: Vec<Slide> = vec![];
for (index, page) in pages.into_iter().enumerate() {
for (index, page) in pages.into_iter() {
let slide = SlideBuilder::new()
.background(
Background::try_from(self.path.clone())
@ -307,7 +323,7 @@ impl Model<Presentation> {
let _ = self.add_item(Presentation {
id: presentation.id,
title: presentation.title,
path: presentation.path.into(),
path: presentation.path.clone().into(),
kind: if presentation.html {
PresKind::Html
} else {
@ -324,7 +340,28 @@ impl Model<Presentation> {
ending_index: ending_index as i32,
}
} else {
PresKind::Generic
let path =
PathBuf::from(presentation.path);
if let Ok(document) =
Document::open(path.as_path())
{
if let Ok(count) =
document.page_count()
{
let ending_index = count - 1;
PresKind::Pdf {
starting_index: 0,
ending_index,
}
} else {
PresKind::Pdf {
starting_index: 0,
ending_index: 0,
}
}
} else {
PresKind::Generic
}
}
},
});
@ -485,7 +522,13 @@ mod test {
#[test]
pub fn test_pres() {
let pres = Presentation::new();
assert_eq!(pres.get_kind(), &PresKind::Pdf)
assert_eq!(
pres.get_kind(),
&PresKind::Pdf {
starting_index: 0,
ending_index: 0,
}
)
}
#[tokio::test]