From def9de0dc02066a7fdaa97562f4acf5d231a35e7 Mon Sep 17 00:00:00 2001 From: kernelkind Date: Tue, 29 Apr 2025 11:13:48 -0400 Subject: [PATCH] images: make promise payload optional to take easily Signed-off-by: kernelkind --- crates/notedeck/src/imgcache.rs | 2 +- crates/notedeck_ui/src/images.rs | 23 ++++++++++++++--------- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/crates/notedeck/src/imgcache.rs b/crates/notedeck/src/imgcache.rs index a4d9c6c..144d457 100644 --- a/crates/notedeck/src/imgcache.rs +++ b/crates/notedeck/src/imgcache.rs @@ -17,7 +17,7 @@ use std::path::{self}; use std::path::{Path, PathBuf}; use tracing::warn; -pub type MediaCacheValue = Promise>; +pub type MediaCacheValue = Promise>>; pub type MediaCacheMap = HashMap; #[derive(Default)] diff --git a/crates/notedeck_ui/src/images.rs b/crates/notedeck_ui/src/images.rs index a76c59e..a4ed961 100644 --- a/crates/notedeck_ui/src/images.rs +++ b/crates/notedeck_ui/src/images.rs @@ -178,14 +178,14 @@ fn fetch_img_from_disk( url: &str, path: &path::Path, cache_type: MediaCacheType, -) -> Promise> { +) -> Promise>> { let ctx = ctx.clone(); let url = url.to_owned(); let path = path.to_owned(); - Promise::spawn_async( - async move { async_fetch_img_from_disk(ctx, url, &path, cache_type).await }, - ) + Promise::spawn_async(async move { + Some(async_fetch_img_from_disk(ctx, url, &path, cache_type).await) + }) } async fn async_fetch_img_from_disk( @@ -361,7 +361,7 @@ pub fn fetch_img( url: &str, imgtyp: ImageType, cache_type: MediaCacheType, -) -> Promise> { +) -> Promise>> { let key = MediaCache::key(url); let path = img_cache_path.join(key); @@ -380,7 +380,7 @@ fn fetch_img_from_net( url: &str, imgtyp: ImageType, cache_type: MediaCacheType, -) -> Promise> { +) -> Promise>> { let (sender, promise) = Promise::new(); let request = ehttp::Request::get(url); let ctx = ctx.clone(); @@ -417,7 +417,7 @@ fn fetch_img_from_net( } }); - sender.send(handle); // send the results back to the UI thread. + sender.send(Some(handle)); // send the results back to the UI thread. ctx.request_repaint(); }); @@ -476,7 +476,7 @@ fn render_media_cache( .show(ui, |ui| { match cache.map_mut().get_mut(url).and_then(|p| p.ready_mut()) { None => show_waiting(ui), - Some(Err(err)) => { + Some(Some(Err(err))) => { let err = err.to_string(); let no_pfp = crate::images::fetch_img( &cache.cache_dir, @@ -488,7 +488,12 @@ fn render_media_cache( cache.map_mut().insert(url.to_owned(), no_pfp); show_error(ui, err) } - Some(Ok(renderable_media)) => show_success(ui, url, renderable_media, gif_states), + Some(Some(Ok(renderable_media))) => { + show_success(ui, url, renderable_media, gif_states) + } + Some(None) => { + tracing::error!("Promise already taken"); + } } }) .response