Compare commits
10 Commits
f6d5d3755b
...
1bbebad01b
| Author | SHA1 | Date | |
|---|---|---|---|
| 1bbebad01b | |||
| 27edffd090 | |||
| 08212a9f78 | |||
| 877ec6c4b0 | |||
| 3ce92d6bdf | |||
| 1a28bb2021 | |||
| b86f72f75c | |||
| 1a8b98d420 | |||
| 383a7d800f | |||
| 453561140a |
33
Cargo.lock
generated
33
Cargo.lock
generated
@ -3020,9 +3020,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "letterbox-notmuch"
|
name = "letterbox-notmuch"
|
||||||
version = "0.17.3"
|
version = "0.17.9"
|
||||||
source = "sparse+https://git.z.xinu.tv/api/packages/wathiede/cargo/"
|
source = "sparse+https://git.z.xinu.tv/api/packages/wathiede/cargo/"
|
||||||
checksum = "660e35d98139603d764aba884faea20b6ebd43864afd8a70ee0864d161cb7089"
|
checksum = "aea61000b7ea6d2cca754dea71bafb54aa913a98f30f7b01836cce1414af5614"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"log",
|
"log",
|
||||||
"mailparse",
|
"mailparse",
|
||||||
@ -3034,7 +3034,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "letterbox-notmuch"
|
name = "letterbox-notmuch"
|
||||||
version = "0.17.5"
|
version = "0.17.10"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"itertools",
|
"itertools",
|
||||||
"log",
|
"log",
|
||||||
@ -3049,12 +3049,12 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "letterbox-procmail2notmuch"
|
name = "letterbox-procmail2notmuch"
|
||||||
version = "0.17.5"
|
version = "0.17.10"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"clap",
|
"clap",
|
||||||
"letterbox-notmuch 0.17.3",
|
"letterbox-notmuch 0.17.9",
|
||||||
"letterbox-shared 0.17.3",
|
"letterbox-shared 0.17.9",
|
||||||
"serde",
|
"serde",
|
||||||
"sqlx",
|
"sqlx",
|
||||||
"tokio 1.44.2",
|
"tokio 1.44.2",
|
||||||
@ -3062,7 +3062,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "letterbox-server"
|
name = "letterbox-server"
|
||||||
version = "0.17.5"
|
version = "0.17.10"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"ammonia",
|
"ammonia",
|
||||||
"anyhow",
|
"anyhow",
|
||||||
@ -3080,8 +3080,8 @@ dependencies = [
|
|||||||
"futures 0.3.31",
|
"futures 0.3.31",
|
||||||
"headers",
|
"headers",
|
||||||
"html-escape",
|
"html-escape",
|
||||||
"letterbox-notmuch 0.17.3",
|
"letterbox-notmuch 0.17.10",
|
||||||
"letterbox-shared 0.17.3",
|
"letterbox-shared 0.17.10",
|
||||||
"linkify",
|
"linkify",
|
||||||
"log",
|
"log",
|
||||||
"lol_html",
|
"lol_html",
|
||||||
@ -3106,12 +3106,12 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "letterbox-shared"
|
name = "letterbox-shared"
|
||||||
version = "0.17.3"
|
version = "0.17.9"
|
||||||
source = "sparse+https://git.z.xinu.tv/api/packages/wathiede/cargo/"
|
source = "sparse+https://git.z.xinu.tv/api/packages/wathiede/cargo/"
|
||||||
checksum = "e30cefa3eebb0b15b077527072a4a53dbde8dd6cb513b20e78f036a84c86329a"
|
checksum = "359b4c3ab6b8a91d9a66798b3ee87285f102b7820d38f1d5d3f4be4ea7480803"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"build-info",
|
"build-info",
|
||||||
"letterbox-notmuch 0.17.3",
|
"letterbox-notmuch 0.17.9",
|
||||||
"regex",
|
"regex",
|
||||||
"serde",
|
"serde",
|
||||||
"sqlx",
|
"sqlx",
|
||||||
@ -3121,10 +3121,10 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "letterbox-shared"
|
name = "letterbox-shared"
|
||||||
version = "0.17.5"
|
version = "0.17.10"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"build-info",
|
"build-info",
|
||||||
"letterbox-notmuch 0.17.3",
|
"letterbox-notmuch 0.17.10",
|
||||||
"regex",
|
"regex",
|
||||||
"serde",
|
"serde",
|
||||||
"sqlx",
|
"sqlx",
|
||||||
@ -3134,7 +3134,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "letterbox-web"
|
name = "letterbox-web"
|
||||||
version = "0.17.5"
|
version = "0.17.10"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"build-info",
|
"build-info",
|
||||||
"build-info-build",
|
"build-info-build",
|
||||||
@ -3146,8 +3146,7 @@ dependencies = [
|
|||||||
"graphql_client",
|
"graphql_client",
|
||||||
"human_format",
|
"human_format",
|
||||||
"itertools",
|
"itertools",
|
||||||
"letterbox-notmuch 0.17.3",
|
"letterbox-shared 0.17.9",
|
||||||
"letterbox-shared 0.17.3",
|
|
||||||
"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.5"
|
version = "0.17.10"
|
||||||
repository = "https://git.z.xinu.tv/wathiede/letterbox"
|
repository = "https://git.z.xinu.tv/wathiede/letterbox"
|
||||||
|
|
||||||
[profile.dev]
|
[profile.dev]
|
||||||
|
|||||||
@ -503,15 +503,28 @@ impl Notmuch {
|
|||||||
self.tags_for_query("*")
|
self.tags_for_query("*")
|
||||||
}
|
}
|
||||||
|
|
||||||
#[instrument(skip_all, fields(tag=tag,search_term=search_term))]
|
|
||||||
pub fn tag_add(&self, tag: &str, search_term: &str) -> Result<(), NotmuchError> {
|
pub fn tag_add(&self, tag: &str, search_term: &str) -> Result<(), NotmuchError> {
|
||||||
self.run_notmuch(["tag", &format!("+{tag}"), search_term])?;
|
self.tags_add(tag, &[search_term])
|
||||||
|
}
|
||||||
|
|
||||||
|
#[instrument(skip_all, fields(tag=tag,search_term=?search_term))]
|
||||||
|
pub fn tags_add(&self, tag: &str, search_term: &[&str]) -> Result<(), NotmuchError> {
|
||||||
|
let tag = format!("+{tag}");
|
||||||
|
let mut args = vec!["tag", &tag];
|
||||||
|
args.extend(search_term);
|
||||||
|
self.run_notmuch(&args)?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
#[instrument(skip_all, fields(tag=tag,search_term=search_term))]
|
|
||||||
pub fn tag_remove(&self, tag: &str, search_term: &str) -> Result<(), NotmuchError> {
|
pub fn tag_remove(&self, tag: &str, search_term: &str) -> Result<(), NotmuchError> {
|
||||||
self.run_notmuch(["tag", &format!("-{tag}"), search_term])?;
|
self.tags_remove(tag, &[search_term])
|
||||||
|
}
|
||||||
|
#[instrument(skip_all, fields(tag=tag,search_term=?search_term))]
|
||||||
|
pub fn tags_remove(&self, tag: &str, search_term: &[&str]) -> Result<(), NotmuchError> {
|
||||||
|
let tag = format!("-{tag}");
|
||||||
|
let mut args = vec!["tag", &tag];
|
||||||
|
args.extend(search_term);
|
||||||
|
self.run_notmuch(&args)?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -13,8 +13,8 @@ version.workspace = true
|
|||||||
[dependencies]
|
[dependencies]
|
||||||
anyhow = "1.0.98"
|
anyhow = "1.0.98"
|
||||||
clap = { version = "4.5.37", features = ["derive", "env"] }
|
clap = { version = "4.5.37", features = ["derive", "env"] }
|
||||||
letterbox-notmuch = { version = "0.17.2", registry = "xinu" }
|
letterbox-notmuch = { version = "0.17.9", registry = "xinu" }
|
||||||
letterbox-shared = { version = "0.17.2", registry = "xinu" }
|
letterbox-shared = { version = "0.17.9", registry = "xinu" }
|
||||||
serde = { version = "1.0.219", features = ["derive"] }
|
serde = { version = "1.0.219", features = ["derive"] }
|
||||||
sqlx = { version = "0.8.5", features = ["postgres", "runtime-tokio"] }
|
sqlx = { version = "0.8.5", features = ["postgres", "runtime-tokio"] }
|
||||||
tokio = { version = "1.44.2", features = ["rt", "macros", "rt-multi-thread"] }
|
tokio = { version = "1.44.2", features = ["rt", "macros", "rt-multi-thread"] }
|
||||||
|
|||||||
@ -27,8 +27,8 @@ css-inline = "0.14.4"
|
|||||||
futures = "0.3.31"
|
futures = "0.3.31"
|
||||||
headers = "0.4.0"
|
headers = "0.4.0"
|
||||||
html-escape = "0.2.13"
|
html-escape = "0.2.13"
|
||||||
letterbox-notmuch = { version = "0.17.2", registry = "xinu" }
|
letterbox-notmuch = { path = "../notmuch", version = "0.17.10", registry = "xinu" }
|
||||||
letterbox-shared = { version = "0.17.2", registry = "xinu" }
|
letterbox-shared = { path = "../shared", version = "0.17.10", registry = "xinu" }
|
||||||
linkify = "0.10.0"
|
linkify = "0.10.0"
|
||||||
log = "0.4.27"
|
log = "0.4.27"
|
||||||
lol_html = "2.3.0"
|
lol_html = "2.3.0"
|
||||||
|
|||||||
@ -982,6 +982,8 @@ pub async fn label_unprocessed(
|
|||||||
} else {
|
} else {
|
||||||
&ids[..]
|
&ids[..]
|
||||||
};
|
};
|
||||||
|
let mut add_mutations = HashMap::new();
|
||||||
|
let mut rm_mutations = HashMap::new();
|
||||||
for id in ids {
|
for id in ids {
|
||||||
let id = format!("id:{id}");
|
let id = format!("id:{id}");
|
||||||
let files = nm.files(&id)?;
|
let files = nm.files(&id)?;
|
||||||
@ -1001,20 +1003,63 @@ pub async fn label_unprocessed(
|
|||||||
.get_first_value("subject")
|
.get_first_value("subject")
|
||||||
.expect("no subject header")
|
.expect("no subject header")
|
||||||
);
|
);
|
||||||
} else {
|
}
|
||||||
for t in &add_tags {
|
for t in &add_tags {
|
||||||
nm.tag_add(t, &id)?;
|
//nm.tag_add(t, &id)?;
|
||||||
|
add_mutations
|
||||||
|
.entry(t.to_string())
|
||||||
|
.or_insert_with(|| Vec::new())
|
||||||
|
.push(id.clone());
|
||||||
}
|
}
|
||||||
if add_tags.contains("spam") || add_tags.contains("Spam") {
|
if add_tags.contains("spam") || add_tags.contains("Spam") {
|
||||||
nm.tag_remove("unread", &id)?;
|
//nm.tag_remove("unread", &id)?;
|
||||||
|
let t = "unread".to_string();
|
||||||
|
rm_mutations
|
||||||
|
.entry(t)
|
||||||
|
.or_insert_with(|| Vec::new())
|
||||||
|
.push(id.clone());
|
||||||
}
|
}
|
||||||
if !add_tags.contains("inbox") {
|
if !add_tags.contains("inbox") {
|
||||||
nm.tag_remove("inbox", &id)?;
|
//nm.tag_remove("inbox", &id)?;
|
||||||
|
let t = "inbox".to_string();
|
||||||
|
rm_mutations
|
||||||
|
.entry(t)
|
||||||
|
.or_insert_with(|| Vec::new())
|
||||||
|
.push(id.clone());
|
||||||
}
|
}
|
||||||
nm.tag_remove("unprocessed", &id)?;
|
//nm.tag_remove("unprocessed", &id)?;
|
||||||
|
let t = "unprocessed".to_string();
|
||||||
|
rm_mutations
|
||||||
|
.entry(t)
|
||||||
|
.or_insert_with(|| Vec::new())
|
||||||
|
.push(id.clone());
|
||||||
|
} else {
|
||||||
|
if add_tags.is_empty() {
|
||||||
|
let t = "Grey".to_string();
|
||||||
|
add_mutations
|
||||||
|
.entry(t)
|
||||||
|
.or_insert_with(|| Vec::new())
|
||||||
|
.push(id.clone());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
println!("Adding {} distinct labels", add_mutations.len());
|
||||||
|
for (tag, ids) in add_mutations.iter() {
|
||||||
|
println!(" {tag}: {}", ids.len());
|
||||||
|
if !dryrun {
|
||||||
|
let ids: Vec<_> = ids.iter().map(|s| s.as_str()).collect();
|
||||||
|
nm.tags_add(tag, &ids)?;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
println!("Removing {} distinct labels", rm_mutations.len());
|
||||||
|
for (tag, ids) in rm_mutations.iter() {
|
||||||
|
println!(" {tag}: {}", ids.len());
|
||||||
|
if !dryrun {
|
||||||
|
let ids: Vec<_> = ids.iter().map(|s| s.as_str()).collect();
|
||||||
|
nm.tags_remove(tag, &ids)?;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
fn find_tags<'a, 'b>(rules: &'a [Rule], headers: &'b [MailHeader]) -> (bool, HashSet<&'a str>) {
|
fn find_tags<'a, 'b>(rules: &'a [Rule], headers: &'b [MailHeader]) -> (bool, HashSet<&'a str>) {
|
||||||
|
|||||||
@ -12,7 +12,7 @@ version.workspace = true
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
build-info = "0.0.40"
|
build-info = "0.0.40"
|
||||||
letterbox-notmuch = { version = "0.17.2", registry = "xinu" }
|
letterbox-notmuch = { path = "../notmuch", version = "0.17.10", registry = "xinu" }
|
||||||
regex = "1.11.1"
|
regex = "1.11.1"
|
||||||
serde = { version = "1.0.219", features = ["derive"] }
|
serde = { version = "1.0.219", features = ["derive"] }
|
||||||
sqlx = "0.8.5"
|
sqlx = "0.8.5"
|
||||||
|
|||||||
@ -33,8 +33,7 @@ wasm-bindgen = "=0.2.100"
|
|||||||
uuid = { version = "1.16.0", features = [
|
uuid = { version = "1.16.0", features = [
|
||||||
"js",
|
"js",
|
||||||
] } # direct dep to set js feature, prevents Rng issues
|
] } # direct dep to set js feature, prevents Rng issues
|
||||||
letterbox-shared = { version = "0.17.2", registry = "xinu" }
|
letterbox-shared = { version = "0.17.9", registry = "xinu" }
|
||||||
letterbox-notmuch = { version = "0.17.2", registry = "xinu" }
|
|
||||||
seed_hooks = { version = "0.4.1", registry = "xinu" }
|
seed_hooks = { version = "0.4.1", registry = "xinu" }
|
||||||
strum_macros = "0.27.1"
|
strum_macros = "0.27.1"
|
||||||
gloo-console = "0.3.0"
|
gloo-console = "0.3.0"
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user