notedeck

One damus client to rule them all
git clone git://jb55.com/notedeck
Log | Files | Refs | README | LICENSE

commit a0415bada0b0610e77314a658003722c44068d1c
parent e83782b16027c42a37324f0c9d8d760834eb8498
Author: kernelkind <kernelkind@gmail.com>
Date:   Sat, 22 Nov 2025 20:49:13 -0700

feat(img-parsing): new parse_img_response

Signed-off-by: kernelkind <kernelkind@gmail.com>

Diffstat:
Mcrates/notedeck/src/media/images.rs | 29+++++++++++++++++++++++++++++
1 file changed, 29 insertions(+), 0 deletions(-)

diff --git a/crates/notedeck/src/media/images.rs b/crates/notedeck/src/media/images.rs @@ -1,4 +1,5 @@ use crate::media::load_texture_checked; +use crate::media::network::HyperHttpResponse; use crate::{AnimationOld, ImageFrame, MediaCache, MediaCacheType, TextureFrame, TexturedImage}; use egui::{pos2, Color32, ColorImage, Context, Rect, Sense, SizeHint}; use image::codecs::gif::GifDecoder; @@ -211,6 +212,34 @@ fn parse_img_response_old( } } +#[profiling::function] +pub fn parse_img_response( + response: HyperHttpResponse, + imgtyp: ImageType, +) -> Result<ColorImage, crate::Error> { + let content_type = response.content_type.unwrap_or_default(); + let size_hint = match imgtyp { + ImageType::Profile(size) => SizeHint::Size(size, size), + ImageType::Content(Some((w, h))) => SizeHint::Size(w, h), + ImageType::Content(None) => SizeHint::default(), + }; + + if content_type.starts_with("image/svg") { + profiling::scope!("load_svg"); + + let mut color_image = + egui_extras::image::load_svg_bytes_with_size(&response.bytes, Some(size_hint))?; + round_image(&mut color_image); + Ok(color_image) + } else if content_type.starts_with("image/") { + profiling::scope!("load_from_memory"); + let dyn_image = image::load_from_memory(&response.bytes)?; + Ok(process_image(imgtyp, dyn_image)) + } else { + Err(format!("Expected image, found content-type {content_type:?}").into()) + } +} + fn fetch_img_from_disk( ctx: &egui::Context, url: &str,