Compare commits
6 Commits
letterbox-
...
letterbox-
| Author | SHA1 | Date | |
|---|---|---|---|
| 0cf3e3ce05 | |||
| d10a34e32e | |||
| f311e517a9 | |||
| aacee2f537 | |||
| e2bec7760b | |||
| a4ef7e48a6 |
18
Cargo.lock
generated
18
Cargo.lock
generated
@@ -3179,7 +3179,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "letterbox-notmuch"
|
name = "letterbox-notmuch"
|
||||||
version = "0.17.62"
|
version = "0.17.65"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"itertools",
|
"itertools",
|
||||||
"log",
|
"log",
|
||||||
@@ -3194,7 +3194,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "letterbox-procmail2notmuch"
|
name = "letterbox-procmail2notmuch"
|
||||||
version = "0.17.62"
|
version = "0.17.65"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"clap",
|
"clap",
|
||||||
@@ -3207,7 +3207,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "letterbox-server"
|
name = "letterbox-server"
|
||||||
version = "0.17.62"
|
version = "0.17.65"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"ammonia",
|
"ammonia",
|
||||||
"anyhow",
|
"anyhow",
|
||||||
@@ -3230,8 +3230,8 @@ dependencies = [
|
|||||||
"html-escape",
|
"html-escape",
|
||||||
"html2text",
|
"html2text",
|
||||||
"ical",
|
"ical",
|
||||||
"letterbox-notmuch 0.17.62",
|
"letterbox-notmuch 0.17.65",
|
||||||
"letterbox-shared 0.17.62",
|
"letterbox-shared 0.17.65",
|
||||||
"linkify",
|
"linkify",
|
||||||
"lol_html",
|
"lol_html",
|
||||||
"mailparse",
|
"mailparse",
|
||||||
@@ -3272,10 +3272,10 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "letterbox-shared"
|
name = "letterbox-shared"
|
||||||
version = "0.17.62"
|
version = "0.17.65"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"build-info",
|
"build-info",
|
||||||
"letterbox-notmuch 0.17.62",
|
"letterbox-notmuch 0.17.65",
|
||||||
"regex",
|
"regex",
|
||||||
"serde",
|
"serde",
|
||||||
"sqlx",
|
"sqlx",
|
||||||
@@ -3285,7 +3285,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "letterbox-web"
|
name = "letterbox-web"
|
||||||
version = "0.17.62"
|
version = "0.17.65"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"build-info",
|
"build-info",
|
||||||
"build-info-build",
|
"build-info-build",
|
||||||
@@ -3297,7 +3297,7 @@ dependencies = [
|
|||||||
"graphql_client",
|
"graphql_client",
|
||||||
"human_format",
|
"human_format",
|
||||||
"itertools",
|
"itertools",
|
||||||
"letterbox-shared 0.17.62",
|
"letterbox-shared 0.17.65",
|
||||||
"log",
|
"log",
|
||||||
"seed",
|
"seed",
|
||||||
"seed_hooks",
|
"seed_hooks",
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ authors = ["Bill Thiede <git@xinu.tv>"]
|
|||||||
edition = "2021"
|
edition = "2021"
|
||||||
license = "UNLICENSED"
|
license = "UNLICENSED"
|
||||||
publish = ["xinu"]
|
publish = ["xinu"]
|
||||||
version = "0.17.62"
|
version = "0.17.65"
|
||||||
repository = "https://git.z.xinu.tv/wathiede/letterbox"
|
repository = "https://git.z.xinu.tv/wathiede/letterbox"
|
||||||
|
|
||||||
[profile.dev]
|
[profile.dev]
|
||||||
|
|||||||
@@ -224,6 +224,24 @@ pub fn update(msg: Msg, model: &mut Model, orders: &mut impl Orders<Msg>) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
Msg::AddTag(query, tag) => {
|
Msg::AddTag(query, tag) => {
|
||||||
|
orders.skip().perform_cmd(async move {
|
||||||
|
let res: Result<
|
||||||
|
graphql_client::Response<graphql::add_tag_mutation::ResponseData>,
|
||||||
|
gloo_net::Error,
|
||||||
|
> = send_graphql(graphql::AddTagMutation::build_query(
|
||||||
|
graphql::add_tag_mutation::Variables {
|
||||||
|
query: query.clone(),
|
||||||
|
tag: tag.clone(),
|
||||||
|
},
|
||||||
|
))
|
||||||
|
.await;
|
||||||
|
if let Err(e) = res {
|
||||||
|
error!("Failed to add tag {tag} to {query}: {e}");
|
||||||
|
}
|
||||||
|
Msg::Refresh
|
||||||
|
});
|
||||||
|
}
|
||||||
|
Msg::AddTagAndGoToSearch(query, tag) => {
|
||||||
orders.skip().perform_cmd(async move {
|
orders.skip().perform_cmd(async move {
|
||||||
let res: Result<
|
let res: Result<
|
||||||
graphql_client::Response<graphql::add_tag_mutation::ResponseData>,
|
graphql_client::Response<graphql::add_tag_mutation::ResponseData>,
|
||||||
@@ -256,7 +274,24 @@ pub fn update(msg: Msg, model: &mut Model, orders: &mut impl Orders<Msg>) {
|
|||||||
if let Err(e) = res {
|
if let Err(e) = res {
|
||||||
error!("Failed to remove tag {tag} to {query}: {e}");
|
error!("Failed to remove tag {tag} to {query}: {e}");
|
||||||
}
|
}
|
||||||
// TODO: reconsider this behavior
|
Msg::Refresh
|
||||||
|
});
|
||||||
|
}
|
||||||
|
Msg::RemoveTagAndGoToSearch(query, tag) => {
|
||||||
|
orders.skip().perform_cmd(async move {
|
||||||
|
let res: Result<
|
||||||
|
graphql_client::Response<graphql::remove_tag_mutation::ResponseData>,
|
||||||
|
gloo_net::Error,
|
||||||
|
> = send_graphql(graphql::RemoveTagMutation::build_query(
|
||||||
|
graphql::remove_tag_mutation::Variables {
|
||||||
|
query: query.clone(),
|
||||||
|
tag: tag.clone(),
|
||||||
|
},
|
||||||
|
))
|
||||||
|
.await;
|
||||||
|
if let Err(e) = res {
|
||||||
|
error!("Failed to remove tag {tag} to {query}: {e}");
|
||||||
|
}
|
||||||
Msg::GoToSearchResults
|
Msg::GoToSearchResults
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -505,7 +540,7 @@ pub fn update(msg: Msg, model: &mut Model, orders: &mut impl Orders<Msg>) {
|
|||||||
.join(" ");
|
.join(" ");
|
||||||
orders
|
orders
|
||||||
.skip()
|
.skip()
|
||||||
.perform_cmd(async move { Msg::AddTag(threads, tag) });
|
.perform_cmd(async move { Msg::AddTagAndGoToSearch(threads, tag) });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Msg::SelectionRemoveTag(tag) => {
|
Msg::SelectionRemoveTag(tag) => {
|
||||||
@@ -520,7 +555,7 @@ pub fn update(msg: Msg, model: &mut Model, orders: &mut impl Orders<Msg>) {
|
|||||||
.join(" ");
|
.join(" ");
|
||||||
orders
|
orders
|
||||||
.skip()
|
.skip()
|
||||||
.perform_cmd(async move { Msg::RemoveTag(threads, tag) });
|
.perform_cmd(async move { Msg::RemoveTagAndGoToSearch(threads, tag) });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Msg::SelectionMarkAsRead => {
|
Msg::SelectionMarkAsRead => {
|
||||||
@@ -692,6 +727,13 @@ pub fn update(msg: Msg, model: &mut Model, orders: &mut impl Orders<Msg>) {
|
|||||||
};
|
};
|
||||||
orders.send_msg(Msg::CatchupNext);
|
orders.send_msg(Msg::CatchupNext);
|
||||||
}
|
}
|
||||||
|
Msg::CatchupMarkAsSpam => {
|
||||||
|
if let Some(thread_id) = current_thread_id(&model.context) {
|
||||||
|
orders.send_msg(Msg::AddTag(thread_id.clone(), "Spam".to_string()));
|
||||||
|
orders.send_msg(Msg::SetUnread(thread_id, false));
|
||||||
|
};
|
||||||
|
orders.send_msg(Msg::CatchupNext);
|
||||||
|
}
|
||||||
Msg::CatchupNext => {
|
Msg::CatchupNext => {
|
||||||
orders.send_msg(Msg::ScrollToTop);
|
orders.send_msg(Msg::ScrollToTop);
|
||||||
let Some(catchup) = &mut model.catchup else {
|
let Some(catchup) = &mut model.catchup else {
|
||||||
@@ -852,7 +894,10 @@ pub enum Msg {
|
|||||||
|
|
||||||
SetUnread(String, bool),
|
SetUnread(String, bool),
|
||||||
AddTag(String, String),
|
AddTag(String, String),
|
||||||
|
AddTagAndGoToSearch(String, String),
|
||||||
|
#[allow(dead_code)]
|
||||||
RemoveTag(String, String),
|
RemoveTag(String, String),
|
||||||
|
RemoveTagAndGoToSearch(String, String),
|
||||||
Snooze(String, DateTime<Utc>),
|
Snooze(String, DateTime<Utc>),
|
||||||
|
|
||||||
FrontPageRequest {
|
FrontPageRequest {
|
||||||
@@ -902,6 +947,7 @@ pub enum Msg {
|
|||||||
CatchupStart,
|
CatchupStart,
|
||||||
CatchupKeepUnread,
|
CatchupKeepUnread,
|
||||||
CatchupMarkAsRead,
|
CatchupMarkAsRead,
|
||||||
|
CatchupMarkAsSpam,
|
||||||
CatchupNext,
|
CatchupNext,
|
||||||
CatchupExit,
|
CatchupExit,
|
||||||
|
|
||||||
|
|||||||
@@ -268,6 +268,14 @@ fn catchup_view(
|
|||||||
Msg::GoToSearchResults
|
Msg::GoToSearchResults
|
||||||
]))
|
]))
|
||||||
],
|
],
|
||||||
|
button![
|
||||||
|
tw_classes::button(),
|
||||||
|
C!["text-red-500"],
|
||||||
|
attrs! {At::Title => "Mark as spam"},
|
||||||
|
span![i![C!["far", "fa-hand"]]],
|
||||||
|
span![C!["pl-2"], "Spam"],
|
||||||
|
ev(Ev::Click, |_| Msg::CatchupMarkAsSpam)
|
||||||
|
],
|
||||||
button![
|
button![
|
||||||
tw_classes::button_with_color("bg-green-800", "hover:bg-green-700"),
|
tw_classes::button_with_color("bg-green-800", "hover:bg-green-700"),
|
||||||
span![i![C!["far", "fa-envelope-open"]]],
|
span![i![C!["far", "fa-envelope-open"]]],
|
||||||
@@ -450,7 +458,7 @@ fn removable_tags_chiclet<'a>(thread_id: &'a str, tags: &'a [String]) -> Node<Ms
|
|||||||
a![
|
a![
|
||||||
C![&tw_classes::TAG_X],
|
C![&tw_classes::TAG_X],
|
||||||
span![i![C!["fa-solid", "fa-xmark"]]],
|
span![i![C!["fa-solid", "fa-xmark"]]],
|
||||||
ev(Ev::Click, move |_| Msg::RemoveTag(thread_id, rm_tag))
|
ev(Ev::Click, move |_| Msg::RemoveTagAndGoToSearch(thread_id, rm_tag))
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user