From 0f7115fe8b6876770ac3b3df224becc7657eec50 Mon Sep 17 00:00:00 2001 From: Sophie Herold Date: Fri, 4 Nov 2022 20:12:44 +0100 Subject: [PATCH] imageMetadata: Implement debug --- src/image_metadata.rs | 38 +++++++++++++++++++++++++++----------- src/widgets/image.rs | 12 ++++++------ 2 files changed, 33 insertions(+), 17 deletions(-) diff --git a/src/image_metadata.rs b/src/image_metadata.rs index aeae609..7e3b763 100644 --- a/src/image_metadata.rs +++ b/src/image_metadata.rs @@ -8,17 +8,19 @@ pub enum ImageMetadata { } impl ImageMetadata { - // TODO: error handling pub fn load(file: &gio::File) -> Self { - let file = std::fs::File::open(file.path().unwrap()).unwrap(); - let mut bufreader = std::io::BufReader::new(&file); - let exifreader = exif::Reader::new(); + if let Some(path) = file.path() { + if let Ok(file) = std::fs::File::open(path) { + let mut bufreader = std::io::BufReader::new(&file); + let exifreader = exif::Reader::new(); - if let Ok(exif) = exifreader.read_from_container(&mut bufreader) { - Self::Exif(exif) - } else { - Self::None + if let Ok(exif) = exifreader.read_from_container(&mut bufreader) { + return Self::Exif(exif); + } + } } + + Self::None } pub fn orientation(&self) -> Orientation { @@ -38,10 +40,24 @@ impl ImageMetadata { } } -// TODO: implement something (that does not fill the complete screen with binary data) impl std::fmt::Debug for ImageMetadata { - fn fmt(&self, _: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> { - Ok(()) + fn fmt(&self, fmt: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> { + match self { + Self::Exif(exif) => { + let list = exif.fields().into_iter().map(|f| { + let mut value = f.display_value().to_string(); + // Remove long values + if value.len() > 100 { + value = String::from("…"); + } + + (f.ifd_num.to_string(), f.tag.to_string(), value) + }); + fmt.write_str("Exif")?; + fmt.debug_list().entries(list).finish() + } + Self::None => fmt.write_str("None"), + } } } diff --git a/src/widgets/image.rs b/src/widgets/image.rs index 1490620..3efe767 100644 --- a/src/widgets/image.rs +++ b/src/widgets/image.rs @@ -192,12 +192,6 @@ glib::wrapper! { } impl LpImage { - pub fn file(&self) -> Option { - let imp = self.imp(); - - imp.file.borrow().clone() - } - pub fn set_texture_with_file(&self, texture: gdk::Texture, source_file: &gio::File) { let imp = self.imp(); @@ -216,6 +210,12 @@ impl LpImage { self.queue_draw(); } + pub fn file(&self) -> Option { + let imp = self.imp(); + + imp.file.borrow().clone() + } + pub fn texture(&self) -> Option { let imp = self.imp(); imp.texture.borrow().clone()