fix: weird placeholder images
This commit is contained in:
parent
62a7933de0
commit
e66e7e938e
1
TODO.md
1
TODO.md
@ -1,4 +1,3 @@
|
|||||||
- [Login] Proper key storage
|
|
||||||
- [NDB] Handle PRE's
|
- [NDB] Handle PRE's
|
||||||
- [UX] Render non-ascii chars with better font
|
- [UX] Render non-ascii chars with better font
|
||||||
- [egui-video] Handle mobile DPI for video player
|
- [egui-video] Handle mobile DPI for video player
|
@ -3,7 +3,7 @@ use crate::services::ffmpeg_loader::FfmpegLoader;
|
|||||||
use crate::widgets::PlaceholderRect;
|
use crate::widgets::PlaceholderRect;
|
||||||
use anyhow::{anyhow, bail};
|
use anyhow::{anyhow, bail};
|
||||||
use egui::load::SizedTexture;
|
use egui::load::SizedTexture;
|
||||||
use egui::{Context, Id, Image, ImageSource, TextureHandle, Ui, Vec2};
|
use egui::{vec2, Context, Id, Image, ImageSource, TextureHandle, Ui, Vec2};
|
||||||
use egui_video::ffmpeg_rs_raw::Transcoder;
|
use egui_video::ffmpeg_rs_raw::Transcoder;
|
||||||
use ehttp::Response;
|
use ehttp::Response;
|
||||||
use enostr::EventClientMessage;
|
use enostr::EventClientMessage;
|
||||||
@ -195,24 +195,24 @@ pub fn image_from_cache<'a>(
|
|||||||
ui: &Ui,
|
ui: &Ui,
|
||||||
url: &str,
|
url: &str,
|
||||||
size: Option<Vec2>,
|
size: Option<Vec2>,
|
||||||
) -> Image<'a> {
|
) -> Option<Image<'a>> {
|
||||||
|
if url.len() == 0 {
|
||||||
|
return None;
|
||||||
|
}
|
||||||
let cache_key = if let Some(s) = size {
|
let cache_key = if let Some(s) = size {
|
||||||
format!("{}:{}", url, s)
|
format!("{}:{}", url, s)
|
||||||
} else {
|
} else {
|
||||||
url.to_string()
|
url.to_string()
|
||||||
};
|
};
|
||||||
if url.len() == 0 {
|
|
||||||
return Image::from_bytes(cache_key, LOGO_BYTES);
|
|
||||||
}
|
|
||||||
if let Some(promise) = img_cache.map().get(&cache_key) {
|
if let Some(promise) = img_cache.map().get(&cache_key) {
|
||||||
match promise.poll() {
|
match promise.poll() {
|
||||||
Poll::Ready(Ok(t)) => Image::new(SizedTexture::from_handle(t)),
|
Poll::Ready(Ok(t)) => Some(Image::new(SizedTexture::from_handle(t))),
|
||||||
_ => Image::from_bytes(url.to_string(), LOGO_BYTES),
|
_ => None,
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
let fetch = fetch_img(img_cache, ui.ctx(), url, size);
|
let fetch = fetch_img(img_cache, ui.ctx(), url, size);
|
||||||
img_cache.map_mut().insert(cache_key.clone(), fetch);
|
img_cache.map_mut().insert(cache_key.clone(), fetch);
|
||||||
Image::from_bytes(cache_key, LOGO_BYTES)
|
None
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -229,7 +229,11 @@ fn fetch_img(
|
|||||||
Promise::spawn_thread("load_from_disk", move || {
|
Promise::spawn_thread("load_from_disk", move || {
|
||||||
info!("Loading image from disk: {}", dst_path.display());
|
info!("Loading image from disk: {}", dst_path.display());
|
||||||
match FfmpegLoader::new().load_image(dst_path, size) {
|
match FfmpegLoader::new().load_image(dst_path, size) {
|
||||||
Ok(img) => Ok(ctx.load_texture(&name, img, Default::default())),
|
Ok(img) => {
|
||||||
|
ctx.request_repaint();
|
||||||
|
ctx.forget_image(&name);
|
||||||
|
Ok(ctx.load_texture(&name, img, Default::default()))
|
||||||
|
}
|
||||||
Err(e) => Err(notedeck::Error::Generic(e.to_string())),
|
Err(e) => Err(notedeck::Error::Generic(e.to_string())),
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@ -248,6 +252,7 @@ fn fetch_img(
|
|||||||
match FfmpegLoader::new().load_image(dst_path, size) {
|
match FfmpegLoader::new().load_image(dst_path, size) {
|
||||||
Ok(img) => {
|
Ok(img) => {
|
||||||
ctx.request_repaint();
|
ctx.request_repaint();
|
||||||
|
ctx.forget_image(&name);
|
||||||
Ok(ctx.load_texture(&name, img, Default::default()))
|
Ok(ctx.load_texture(&name, img, Default::default()))
|
||||||
}
|
}
|
||||||
Err(e) => Err(notedeck::Error::Generic(e.to_string())),
|
Err(e) => Err(notedeck::Error::Generic(e.to_string())),
|
||||||
|
@ -35,14 +35,16 @@ impl NostrWidget for ProfilePage {
|
|||||||
ui.spacing_mut().item_spacing.y = 8.0;
|
ui.spacing_mut().item_spacing.y = 8.0;
|
||||||
|
|
||||||
if let Some(banner) = profile.map(|p| p.banner()).flatten() {
|
if let Some(banner) = profile.map(|p| p.banner()).flatten() {
|
||||||
image_from_cache(
|
if let Some(img) = image_from_cache(
|
||||||
&mut services.ctx.img_cache,
|
&mut services.ctx.img_cache,
|
||||||
ui,
|
ui,
|
||||||
banner,
|
banner,
|
||||||
Some(vec2(ui.available_width(), 360.0)),
|
Some(vec2(ui.available_width(), 360.0)),
|
||||||
)
|
) {
|
||||||
.rounding(ROUNDING_DEFAULT)
|
img.rounding(ROUNDING_DEFAULT).ui(ui);
|
||||||
.ui(ui);
|
} else {
|
||||||
|
PlaceholderRect.ui(ui);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
ui.add(PlaceholderRect);
|
ui.add(PlaceholderRect);
|
||||||
}
|
}
|
||||||
|
@ -54,8 +54,11 @@ impl Avatar {
|
|||||||
if !ui.is_rect_visible(ui.cursor()) {
|
if !ui.is_rect_visible(ui.cursor()) {
|
||||||
return Self::placeholder(ui, size_v);
|
return Self::placeholder(ui, size_v);
|
||||||
}
|
}
|
||||||
match &self.image {
|
match self
|
||||||
Some(img) => image_from_cache(img_cache, ui, img, Some(size))
|
.image
|
||||||
|
.and_then(|i| image_from_cache(img_cache, ui, &i, Some(size)))
|
||||||
|
{
|
||||||
|
Some(img) => img
|
||||||
.rounding(Rounding::same(size_v))
|
.rounding(Rounding::same(size_v))
|
||||||
.sense(Sense::click())
|
.sense(Sense::click())
|
||||||
.ui(ui),
|
.ui(ui),
|
||||||
|
@ -28,7 +28,7 @@ impl Header {
|
|||||||
Layout::left_to_right(Align::Center),
|
Layout::left_to_right(Align::Center),
|
||||||
|ui| {
|
|ui| {
|
||||||
ui.style_mut().spacing.item_spacing.x = 16.;
|
ui.style_mut().spacing.item_spacing.x = 16.;
|
||||||
if Image::from_bytes("logo.svg", logo_bytes)
|
if Image::from_bytes("header_logo.svg", logo_bytes)
|
||||||
.max_height(24.)
|
.max_height(24.)
|
||||||
.sense(Sense::click())
|
.sense(Sense::click())
|
||||||
.ui(ui)
|
.ui(ui)
|
||||||
|
@ -33,10 +33,12 @@ impl<'a> StreamEvent<'a> {
|
|||||||
let (response, painter) = ui.allocate_painter(Vec2::new(w, h), Sense::click());
|
let (response, painter) = ui.allocate_painter(Vec2::new(w, h), Sense::click());
|
||||||
|
|
||||||
let cover = if ui.is_rect_visible(response.rect) {
|
let cover = if ui.is_rect_visible(response.rect) {
|
||||||
self.event.image().map(|p| {
|
self.event
|
||||||
image_from_cache(services.ctx.img_cache, ui, p, Some(Vec2::new(w, h)))
|
.image()
|
||||||
.rounding(ROUNDING_DEFAULT)
|
.and_then(|p| {
|
||||||
})
|
image_from_cache(services.ctx.img_cache, ui, p, Some(Vec2::new(w, h)))
|
||||||
|
})
|
||||||
|
.map(|i| i.rounding(ROUNDING_DEFAULT))
|
||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user