Compare commits
No commits in common. "88f8a9d53725460fe49cd81ce6053447b6e9f62e" and "031b8ce80e102cb6a466fe5634d7f55201c2894b" have entirely different histories.
88f8a9d537
...
031b8ce80e
10
Cargo.lock
generated
10
Cargo.lock
generated
@ -2469,7 +2469,7 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
|
||||
|
||||
[[package]]
|
||||
name = "letterbox"
|
||||
version = "0.0.51"
|
||||
version = "0.0.50"
|
||||
dependencies = [
|
||||
"build-info",
|
||||
"build-info-build",
|
||||
@ -2988,7 +2988,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "notmuch"
|
||||
version = "0.0.51"
|
||||
version = "0.0.50"
|
||||
dependencies = [
|
||||
"itertools 0.10.5",
|
||||
"log",
|
||||
@ -3625,7 +3625,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "procmail2notmuch"
|
||||
version = "0.0.51"
|
||||
version = "0.0.50"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
]
|
||||
@ -4547,7 +4547,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "server"
|
||||
version = "0.0.51"
|
||||
version = "0.0.50"
|
||||
dependencies = [
|
||||
"ammonia",
|
||||
"anyhow",
|
||||
@ -4646,7 +4646,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "shared"
|
||||
version = "0.0.51"
|
||||
version = "0.0.50"
|
||||
dependencies = [
|
||||
"build-info",
|
||||
"notmuch",
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "notmuch"
|
||||
version = "0.0.51"
|
||||
version = "0.0.50"
|
||||
edition = "2021"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "procmail2notmuch"
|
||||
version = "0.0.51"
|
||||
version = "0.0.50"
|
||||
edition = "2021"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "server"
|
||||
version = "0.0.51"
|
||||
version = "0.0.50"
|
||||
edition = "2021"
|
||||
default-run = "server"
|
||||
|
||||
|
||||
@ -424,6 +424,7 @@ impl QueryRoot {
|
||||
.field("body")
|
||||
.field("contentTree")
|
||||
.exists();
|
||||
// TODO: look at thread_id and conditionally load newsreader
|
||||
if newsreader::is_newsreader_thread(&thread_id) {
|
||||
Ok(newsreader::thread(config, pool, thread_id).await?)
|
||||
} else {
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "shared"
|
||||
version = "0.0.51"
|
||||
version = "0.0.50"
|
||||
edition = "2021"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
[package]
|
||||
version = "0.0.51"
|
||||
version = "0.0.50"
|
||||
name = "letterbox"
|
||||
repository = "https://github.com/seed-rs/seed-quickstart"
|
||||
authors = ["Bill Thiede <git@xinu.tv>"]
|
||||
|
||||
@ -375,7 +375,7 @@ 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(avatar: Option<String>, from: &str, big: bool) -> Node<Msg> {
|
||||
let initials: String = from
|
||||
.to_lowercase()
|
||||
.trim()
|
||||
@ -404,6 +404,60 @@ fn render_avatar(_avatar: Option<String>, from: &str, big: bool) -> Node<Msg> {
|
||||
span![initials]
|
||||
]
|
||||
}
|
||||
fn render_svg_avatar(avatar: Option<String>, from: &str) -> Node<Msg> {
|
||||
let initials: String = from
|
||||
.to_lowercase()
|
||||
.trim()
|
||||
.split(" ")
|
||||
.map(|word| word.chars().next().unwrap())
|
||||
.filter(|c| c.is_alphanumeric())
|
||||
// Limit to 2 characters because more characters don't fit in the box
|
||||
.take(2)
|
||||
.collect();
|
||||
if let Some(src) = avatar {
|
||||
img![attrs! {At::Src=>src}]
|
||||
} else {
|
||||
let w = 64;
|
||||
let h = 64;
|
||||
let from_color = compute_color(from);
|
||||
svg![
|
||||
attrs! {
|
||||
At::Width=>w,
|
||||
At::Height=>h,
|
||||
At::ViewBox=>format!("0 0 {w} {h}")
|
||||
},
|
||||
style! {
|
||||
St::Display => "block",
|
||||
St::FontFamily => "Poppins",
|
||||
St::FontSize => pt(28),
|
||||
},
|
||||
g![
|
||||
rect![attrs! {
|
||||
At::Fill=>from_color,
|
||||
At::Stroke=>"black",
|
||||
At::StrokeWidth=>"1",
|
||||
|
||||
// Round corners
|
||||
//At::Rx => px(10),
|
||||
At::X => 0,
|
||||
At::Y => 0,
|
||||
At::Width => h,
|
||||
At::Height => h,
|
||||
}],
|
||||
text![
|
||||
attrs! {
|
||||
At::Fill => "white",
|
||||
At::X => percent(50),
|
||||
At::Y => percent(50),
|
||||
At::DominantBaseline => "middle",
|
||||
At::TextAnchor => "middle"
|
||||
},
|
||||
initials
|
||||
]
|
||||
]
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
fn copy_text_widget(text: &str) -> Node<Msg> {
|
||||
let text = text.to_string();
|
||||
@ -550,7 +604,7 @@ fn render_closed_header(msg: &ShowThreadQueryThreadOnEmailThreadMessages) -> Nod
|
||||
C!["font-semibold"],
|
||||
"CC: "
|
||||
],
|
||||
msg.cc.iter().map(|cc| {
|
||||
msg.cc.iter().enumerate().map(|(i, cc)| {
|
||||
let ShowThreadQueryThreadOnEmailThreadMessagesCc { name, addr } = cc;
|
||||
span![
|
||||
name.as_ref().unwrap_or_else(|| addr.as_ref().unwrap_or(&unknown))
|
||||
@ -977,6 +1031,7 @@ fn news_post(
|
||||
show_icon_text: bool,
|
||||
content_el: &ElRef<HtmlElement>,
|
||||
) -> Node<Msg> {
|
||||
// TODO(wathiede): show per-message subject if it changes significantly from top-level subject
|
||||
let subject = &post.title;
|
||||
set_title(subject);
|
||||
let read_thread_id = post.thread_id.clone();
|
||||
@ -1034,16 +1089,17 @@ fn render_news_post_header(post: &ShowThreadQueryThreadOnNewsPost) -> Node<Msg>
|
||||
//let avatar: Option<String> = Some(String::from("https://bulma.io/images/placeholders/64x64.png"));
|
||||
let id = post.thread_id.clone();
|
||||
let is_unread = !post.is_read;
|
||||
let avatar = render_avatar(avatar, &from, true);
|
||||
div![
|
||||
C!["flex", "p-4"],
|
||||
div![avatar],
|
||||
let img = render_avatar(avatar, &from, true);
|
||||
article![
|
||||
C!["media"],
|
||||
figure![C!["media-left"], p![C!["image", "is-64x64"], img]],
|
||||
div![
|
||||
C!["px-4", "mr-auto"],
|
||||
C!["media-content"],
|
||||
div![
|
||||
span![C!["font-semibold", "text-sm"], from,],
|
||||
div![
|
||||
C!["text-xs"],
|
||||
C!["content"],
|
||||
p![
|
||||
strong![from],
|
||||
br![],
|
||||
small![a![
|
||||
attrs! {
|
||||
At::Href => post.url,
|
||||
@ -1051,28 +1107,32 @@ fn render_news_post_header(post: &ShowThreadQueryThreadOnNewsPost) -> Node<Msg>
|
||||
},
|
||||
"Source ",
|
||||
i![C!["fas", "fa-up-right-from-square"]],
|
||||
]]
|
||||
]
|
||||
]
|
||||
]],
|
||||
table![tr![td![
|
||||
attrs! {At::ColSpan=>2},
|
||||
span![C!["header"], human_age(post.timestamp)]
|
||||
]]],
|
||||
],
|
||||
],
|
||||
],
|
||||
span![
|
||||
C!["text-right"],
|
||||
div![C!["text-xs", "text-nowrap"], human_age(post.timestamp)],
|
||||
i![C![
|
||||
"mx-4"
|
||||
"read-status",
|
||||
"far",
|
||||
if is_unread {
|
||||
"fa-envelope"
|
||||
} else {
|
||||
"fa-envelope-open"
|
||||
},
|
||||
]]
|
||||
],
|
||||
ev(Ev::Click, move |e| {
|
||||
e.stop_propagation();
|
||||
Msg::SetUnread(id, !is_unread)
|
||||
})
|
||||
div![
|
||||
C!["media-right"],
|
||||
span![
|
||||
C!["read-status"],
|
||||
i![C![
|
||||
"far",
|
||||
if is_unread {
|
||||
"fa-envelope"
|
||||
} else {
|
||||
"fa-envelope-open"
|
||||
},
|
||||
]]
|
||||
],
|
||||
ev(Ev::Click, move |e| {
|
||||
e.stop_propagation();
|
||||
Msg::SetUnread(id, !is_unread)
|
||||
})
|
||||
]
|
||||
]
|
||||
}
|
||||
fn reading_progress(ratio: f64) -> Node<Msg> {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user