web & server: add support for email photos

This commit is contained in:
2025-01-14 12:05:03 -08:00
parent f27f0deb38
commit 5a997e61da
7 changed files with 255 additions and 45 deletions

View File

@@ -375,7 +375,21 @@ fn has_unread(tags: &[String]) -> bool {
tags.contains(&String::from("unread"))
}
fn render_avatar(_avatar: Option<String>, from: &str, big: bool) -> Node<Msg> {
fn render_avatar(photo_url: Option<String>, from: &str, big: bool) -> Node<Msg> {
let size = if big {
C!["w-16", "h-16", "text-4xl"]
} else {
C!["w-8", "h-8", "text-l"]
};
if let Some(photo_url) = photo_url {
return div![
size,
img![attrs! {
At::Src => photo_url,
}]
];
}
let initials: String = from
.to_lowercase()
.trim()
@@ -386,11 +400,7 @@ fn render_avatar(_avatar: Option<String>, from: &str, big: bool) -> Node<Msg> {
.take(2)
.collect();
let from_color = compute_color(from);
let size = if big {
C!["w-16", "h-16", "text-4xl"]
} else {
C!["w-8", "h-8", "text-l"]
};
div![
C![
"[text-shadow:_0_1px_0_rgb(0_0_0_/_40%)]",
@@ -416,22 +426,22 @@ fn copy_text_widget(text: &str) -> Node<Msg> {
]
}
fn render_open_header(msg: &ShowThreadQueryThreadOnEmailThreadMessages) -> Node<Msg> {
let (from, from_detail) = match &msg.from {
let (from, from_detail, photo_url) = match &msg.from {
Some(ShowThreadQueryThreadOnEmailThreadMessagesFrom {
name: Some(name),
addr,
}) => (name.to_string(), addr.clone()),
photo_url,
}) => (name.to_string(), addr.clone(), photo_url.clone()),
Some(ShowThreadQueryThreadOnEmailThreadMessagesFrom {
addr: Some(addr), ..
}) => (addr.to_string(), None),
_ => (String::from("UNKNOWN"), None),
addr: Some(addr),
photo_url,
..
}) => (addr.to_string(), None, photo_url.clone()),
_ => (String::from("UNKNOWN"), None, None),
};
// TODO(wathiede): get this from server
let avatar: Option<String> = None;
//let avatar: Option<String> = Some(String::from("https://bulma.io/images/placeholders/64x64.png"));
let id = msg.id.clone();
let is_unread = has_unread(&msg.tags);
let avatar = render_avatar(avatar, &from, true);
let avatar = render_avatar(photo_url, &from, true);
let unknown = "UNKNOWN".to_string();
div![
C!["flex", "p-4"],
@@ -513,22 +523,22 @@ fn render_open_header(msg: &ShowThreadQueryThreadOnEmailThreadMessages) -> Node<
}
fn render_closed_header(msg: &ShowThreadQueryThreadOnEmailThreadMessages) -> Node<Msg> {
let (from, from_detail) = match &msg.from {
let (from, from_detail, photo_url) = match &msg.from {
Some(ShowThreadQueryThreadOnEmailThreadMessagesFrom {
name: Some(name),
addr,
}) => (name.to_string(), addr.clone()),
photo_url,
}) => (name.to_string(), addr.clone(), photo_url.clone()),
Some(ShowThreadQueryThreadOnEmailThreadMessagesFrom {
addr: Some(addr), ..
}) => (addr.to_string(), None),
_ => (String::from("UNKNOWN"), None),
addr: Some(addr),
photo_url,
..
}) => (addr.to_string(), None, photo_url.clone()),
_ => (String::from("UNKNOWN"), None, None),
};
// TODO(wathiede): get this from server
let avatar: Option<String> = None;
//let avatar: Option<String> = Some(String::from("https://bulma.io/images/placeholders/64x64.png"));
let id = msg.id.clone();
let is_unread = has_unread(&msg.tags);
let avatar = render_avatar(avatar, &from, false);
let avatar = render_avatar(photo_url, &from, false);
let unknown = "UNKNOWN".to_string();
div![
C!["flex", "p-4"],