Compare commits

...

23 Commits

Author SHA1 Message Date
0cf3e3ce05 chore: Release
Some checks failed
Continuous integration / Check (push) Successful in 1m15s
Continuous integration / Trunk (push) Successful in 1m25s
Continuous integration / Test Suite (push) Successful in 2m54s
Continuous integration / Rustfmt (push) Failing after 1m7s
Continuous integration / build (push) Successful in 3m12s
Continuous integration / Disallow unused dependencies (push) Successful in 3m16s
2026-02-01 15:27:54 -08:00
d10a34e32e web: allow currently unused RemoveTag for symmetry 2026-02-01 15:27:25 -08:00
f311e517a9 chore: Release 2026-02-01 15:26:22 -08:00
aacee2f537 chore: Release 2026-02-01 15:25:23 -08:00
e2bec7760b web: don't return to search page when marking spam in catchup 2026-02-01 15:24:35 -08:00
a4ef7e48a6 web: add mark as spam button to catchup mode 2026-02-01 15:10:58 -08:00
1aa6f22461 chore: Release
Some checks failed
Continuous integration / Check (push) Successful in 1m24s
Continuous integration / Test Suite (push) Successful in 1m36s
Continuous integration / Trunk (push) Successful in 1m27s
Continuous integration / Rustfmt (push) Failing after 1m34s
Continuous integration / build (push) Successful in 2m35s
Continuous integration / Disallow unused dependencies (push) Successful in 5m43s
2026-02-01 09:05:58 -08:00
2f5026c75b server: disable lzma in zip to work around crc api error 2026-02-01 09:05:29 -08:00
dcb90ca2c8 Merge pull request 'chore(deps): update rust crate clap to v4.5.56' (#244) from renovate/all-minor-patch into master
Some checks failed
Continuous integration / Check (push) Failing after 1m4s
Continuous integration / Test Suite (push) Failing after 1m16s
Continuous integration / Trunk (push) Successful in 1m2s
Continuous integration / Rustfmt (push) Failing after 48s
Continuous integration / build (push) Failing after 1m16s
Continuous integration / Disallow unused dependencies (push) Failing after 4m56s
2026-01-29 08:46:27 -08:00
772548f10d chore(deps): update rust crate clap to v4.5.56
Some checks failed
Continuous integration / Test Suite (push) Failing after 1m27s
Continuous integration / Check (push) Failing after 1m52s
Continuous integration / Trunk (push) Successful in 1m4s
Continuous integration / Rustfmt (push) Failing after 1m34s
Continuous integration / build (push) Failing after 1m19s
Continuous integration / Disallow unused dependencies (push) Failing after 4m56s
2026-01-29 16:46:23 +00:00
c62e925016 Merge pull request 'chore(deps): update rust crate html2text to v0.16.7' (#243) from renovate/all-minor-patch into master
Some checks failed
Continuous integration / Test Suite (push) Failing after 1m12s
Continuous integration / Check (push) Failing after 1m51s
Continuous integration / Trunk (push) Successful in 1m26s
Continuous integration / Rustfmt (push) Failing after 1m34s
Continuous integration / Disallow unused dependencies (push) Failing after 28s
Continuous integration / build (push) Failing after 1m46s
2026-01-28 23:16:42 -08:00
4570a6ea1c chore(deps): update rust crate html2text to v0.16.7
Some checks failed
Continuous integration / Test Suite (push) Failing after 1m23s
Continuous integration / Check (push) Failing after 2m1s
Continuous integration / Rustfmt (push) Failing after 1m35s
Continuous integration / build (push) Failing after 28s
Continuous integration / Disallow unused dependencies (push) Failing after 4m59s
Continuous integration / Trunk (push) Successful in 8m1s
2026-01-29 07:16:38 +00:00
ae06df21a0 Merge pull request 'chore(deps): update rust crate askama to v0.15.4' (#242) from renovate/all-minor-patch into master
Some checks failed
Continuous integration / Check (push) Failing after 1m0s
Continuous integration / Test Suite (push) Failing after 1m21s
Continuous integration / Rustfmt (push) Failing after 1m27s
Continuous integration / build (push) Failing after 1m21s
Continuous integration / Disallow unused dependencies (push) Failing after 2m29s
Continuous integration / Trunk (push) Successful in 21m4s
2026-01-28 15:02:43 -08:00
02d43feb79 chore(deps): update rust crate askama to v0.15.4 2026-01-28 23:02:41 +00:00
0e6508498a Merge pull request 'chore(deps): update rust crate askama to v0.15.3' (#241) from renovate/all-minor-patch into master
Some checks failed
Continuous integration / Check (push) Failing after 1m3s
Continuous integration / Test Suite (push) Failing after 1m12s
Continuous integration / Trunk (push) Successful in 1m14s
Continuous integration / Rustfmt (push) Failing after 42s
Continuous integration / build (push) Failing after 1m15s
Continuous integration / Disallow unused dependencies (push) Failing after 2m19s
2026-01-27 16:16:38 -08:00
a94bd8a341 chore(deps): update rust crate askama to v0.15.3
Some checks failed
Continuous integration / Check (push) Failing after 1m57s
Continuous integration / Test Suite (push) Failing after 1m9s
Continuous integration / Rustfmt (push) Failing after 1m11s
Continuous integration / build (push) Failing after 1m30s
Continuous integration / Disallow unused dependencies (push) Failing after 2m51s
Continuous integration / Trunk (push) Successful in 21m26s
2026-01-28 00:16:35 +00:00
788baf9e86 Merge pull request 'chore(deps): update rust crate clap to v4.5.55' (#240) from renovate/all-minor-patch into master
Some checks failed
Continuous integration / Check (push) Failing after 1m1s
Continuous integration / Test Suite (push) Failing after 1m21s
Continuous integration / Trunk (push) Successful in 59s
Continuous integration / Rustfmt (push) Failing after 42s
Continuous integration / build (push) Failing after 1m18s
Continuous integration / Disallow unused dependencies (push) Failing after 4m53s
2026-01-27 12:46:31 -08:00
fdf910b1a1 chore(deps): update rust crate clap to v4.5.55
Some checks failed
Continuous integration / Test Suite (push) Failing after 1m15s
Continuous integration / Check (push) Failing after 1m55s
Continuous integration / Trunk (push) Successful in 1m0s
Continuous integration / Rustfmt (push) Failing after 1m35s
Continuous integration / build (push) Failing after 1m16s
Continuous integration / Disallow unused dependencies (push) Failing after 4m56s
2026-01-27 20:46:28 +00:00
714c94e40b Merge pull request 'chore(deps): update rust crate askama to v0.15.2' (#239) from renovate/all-minor-patch into master
Some checks failed
Continuous integration / Check (push) Failing after 1m16s
Continuous integration / Test Suite (push) Failing after 1m18s
Continuous integration / Trunk (push) Successful in 1m9s
Continuous integration / Rustfmt (push) Failing after 1m33s
Continuous integration / build (push) Failing after 1m44s
Continuous integration / Disallow unused dependencies (push) Failing after 4m58s
2026-01-27 07:46:48 -08:00
667893b6a3 chore(deps): update rust crate askama to v0.15.2
Some checks failed
Continuous integration / Test Suite (push) Failing after 1m55s
Continuous integration / Check (push) Failing after 4m53s
Continuous integration / Rustfmt (push) Failing after 1m35s
Continuous integration / build (push) Failing after 2m4s
Continuous integration / Trunk (push) Successful in 7m48s
Continuous integration / Disallow unused dependencies (push) Failing after 4m57s
2026-01-27 15:46:42 +00:00
687b050410 Merge pull request 'chore(deps): lock file maintenance' (#238) from renovate/lock-file-maintenance into master
Some checks failed
Continuous integration / Check (push) Failing after 1m31s
Continuous integration / Test Suite (push) Failing after 1m20s
Continuous integration / Trunk (push) Successful in 7m44s
Continuous integration / Rustfmt (push) Failing after 52s
Continuous integration / build (push) Failing after 1m21s
Continuous integration / Disallow unused dependencies (push) Failing after 2m25s
2026-01-25 19:31:55 -08:00
48bad8cbb0 chore(deps): lock file maintenance
Some checks failed
Continuous integration / Check (push) Failing after 58s
Continuous integration / Test Suite (push) Failing after 1m12s
Continuous integration / Rustfmt (push) Failing after 43s
Continuous integration / build (push) Failing after 3m37s
Continuous integration / Disallow unused dependencies (push) Failing after 2m51s
Continuous integration / Trunk (push) Successful in 21m3s
2026-01-26 03:31:53 +00:00
d156fe8282 Merge pull request 'chore(deps): lock file maintenance' (#237) from renovate/lock-file-maintenance into master
Some checks failed
Continuous integration / Check (push) Failing after 2m5s
Continuous integration / Test Suite (push) Failing after 3m28s
Continuous integration / Rustfmt (push) Failing after 46s
Continuous integration / build (push) Failing after 1m2s
Continuous integration / Disallow unused dependencies (push) Failing after 2m14s
Continuous integration / Trunk (push) Successful in 21m12s
2026-01-25 16:02:05 -08:00
5 changed files with 118 additions and 118 deletions

170
Cargo.lock generated
View File

@@ -170,9 +170,9 @@ checksum = "71938f30533e4d95a6d17aa530939da3842c2ab6f4f84b9dae68447e4129f74a"
[[package]]
name = "askama"
version = "0.15.1"
version = "0.15.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bb7125972258312e79827b60c9eb93938334100245081cf701a2dee981b17427"
checksum = "08e1676b346cadfec169374f949d7490fd80a24193d37d2afce0c047cf695e57"
dependencies = [
"askama_macros",
"itoa 1.0.17",
@@ -183,9 +183,9 @@ dependencies = [
[[package]]
name = "askama_derive"
version = "0.15.1"
version = "0.15.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8ba5e7259a1580c61571e3116ebaaa01e3c001b2132b17c4cc5c70780ca3e994"
checksum = "7661ff56517787343f376f75db037426facd7c8d3049cef8911f1e75016f3a37"
dependencies = [
"askama_parser",
"basic-toml",
@@ -200,18 +200,18 @@ dependencies = [
[[package]]
name = "askama_macros"
version = "0.15.1"
version = "0.15.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "236ce20b77cb13506eaf5024899f4af6e12e8825f390bd943c4c37fd8f322e46"
checksum = "713ee4dbfd1eb719c2dab859465b01fa1d21cb566684614a713a6b7a99a4e47b"
dependencies = [
"askama_derive",
]
[[package]]
name = "askama_parser"
version = "0.15.1"
version = "0.15.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f3c63392767bb2df6aa65a6e1e3b80fd89bb7af6d58359b924c0695620f1512e"
checksum = "1d62d674238a526418b30c0def480d5beadb9d8964e7f38d635b03bf639c704c"
dependencies = [
"rustc-hash",
"serde",
@@ -931,9 +931,9 @@ dependencies = [
[[package]]
name = "clap"
version = "4.5.54"
version = "4.5.56"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c6e6ff9dcd79cff5cd969a17a545d79e84ab086e444102a591e288a8aa3ce394"
checksum = "a75ca66430e33a14957acc24c5077b503e7d374151b2b4b3a10c83b4ceb4be0e"
dependencies = [
"clap_builder",
"clap_derive",
@@ -941,9 +941,9 @@ dependencies = [
[[package]]
name = "clap_builder"
version = "4.5.54"
version = "4.5.56"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fa42cf4d2b7a41bc8f663a7cab4031ebafa1bf3875705bfaf8466dc60ab52c00"
checksum = "793207c7fa6300a0608d1080b858e5fdbe713cdc1c8db9fb17777d8a13e63df0"
dependencies = [
"anstream",
"anstyle",
@@ -953,9 +953,9 @@ dependencies = [
[[package]]
name = "clap_derive"
version = "4.5.49"
version = "4.5.55"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2a0b5487afeab2deb2ff4e03a807ad1a03ac532ff5a2cee5d86884440c7f7671"
checksum = "a92793da1a46a5f2a02a6f4c46c6496b28c43638adea8306fcb0caa1634f24e5"
dependencies = [
"heck",
"proc-macro2",
@@ -1135,30 +1135,15 @@ dependencies = [
"libc",
]
[[package]]
name = "crc"
version = "2.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "49fc9a695bca7f35f5f4c15cddc84415f66a74ea78eef08e90c5024f2b540e23"
dependencies = [
"crc-catalog 1.1.1",
]
[[package]]
name = "crc"
version = "3.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5eb8a2a1cd12ab0d987a5d5e825195d372001a4094a0376319d5a0ad71c1ba0d"
dependencies = [
"crc-catalog 2.4.0",
"crc-catalog",
]
[[package]]
name = "crc-catalog"
version = "1.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ccaeedb56da03b09f598226e25e80088cb4cd25f316e6e4df7d695f0feeb1403"
[[package]]
name = "crc-catalog"
version = "2.4.0"
@@ -1740,7 +1725,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
dependencies = [
"libc",
"windows-sys 0.61.2",
"windows-sys 0.52.0",
]
[[package]]
@@ -2522,11 +2507,11 @@ dependencies = [
[[package]]
name = "html2text"
version = "0.16.6"
version = "0.16.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9ea4ba4c0f993633569337a4fadfbd4f27448c81adb1af0c2407065f52809662"
checksum = "12d23156ea4dbe6b37ad48fab2da56ff27b0f6192fb5db210c44eb07bfe6e787"
dependencies = [
"html5ever 0.37.1",
"html5ever 0.38.0",
"tendril 0.5.0",
"thiserror 2.0.18",
"unicode-width",
@@ -2553,16 +2538,6 @@ dependencies = [
"markup5ever 0.36.1",
]
[[package]]
name = "html5ever"
version = "0.37.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5935f02fdc02823ff15fec27c2b3d7ca19d629e996f7a0ae4d7d500e62e54c76"
dependencies = [
"log",
"markup5ever 0.37.1",
]
[[package]]
name = "html5ever"
version = "0.38.0"
@@ -3191,6 +3166,20 @@ dependencies = [
[[package]]
name = "letterbox-notmuch"
version = "0.17.61"
source = "sparse+https://git.z.xinu.tv/api/packages/wathiede/cargo/"
checksum = "28f7db11bd5e63d2e4e3e870e5ca224e2a7acee4eb722aafb9b430f9b24d7dc6"
dependencies = [
"log",
"mailparse",
"serde",
"serde_json",
"thiserror 2.0.18",
"tracing",
]
[[package]]
name = "letterbox-notmuch"
version = "0.17.65"
dependencies = [
"itertools",
"log",
@@ -3203,28 +3192,14 @@ dependencies = [
"tracing",
]
[[package]]
name = "letterbox-notmuch"
version = "0.17.61"
source = "sparse+https://git.z.xinu.tv/api/packages/wathiede/cargo/"
checksum = "28f7db11bd5e63d2e4e3e870e5ca224e2a7acee4eb722aafb9b430f9b24d7dc6"
dependencies = [
"log",
"mailparse",
"serde",
"serde_json",
"thiserror 2.0.18",
"tracing",
]
[[package]]
name = "letterbox-procmail2notmuch"
version = "0.17.61"
version = "0.17.65"
dependencies = [
"anyhow",
"clap",
"letterbox-notmuch 0.17.61 (sparse+https://git.z.xinu.tv/api/packages/wathiede/cargo/)",
"letterbox-shared 0.17.61 (sparse+https://git.z.xinu.tv/api/packages/wathiede/cargo/)",
"letterbox-notmuch 0.17.61",
"letterbox-shared 0.17.61",
"serde",
"sqlx",
"tokio 1.49.0",
@@ -3232,7 +3207,7 @@ dependencies = [
[[package]]
name = "letterbox-server"
version = "0.17.61"
version = "0.17.65"
dependencies = [
"ammonia",
"anyhow",
@@ -3255,8 +3230,8 @@ dependencies = [
"html-escape",
"html2text",
"ical",
"letterbox-notmuch 0.17.61",
"letterbox-shared 0.17.61",
"letterbox-notmuch 0.17.65",
"letterbox-shared 0.17.65",
"linkify",
"lol_html",
"mailparse",
@@ -3283,6 +3258,8 @@ dependencies = [
[[package]]
name = "letterbox-shared"
version = "0.17.61"
source = "sparse+https://git.z.xinu.tv/api/packages/wathiede/cargo/"
checksum = "ca342be12e54e0a54aa3df86b2bda6e3ff014c75a00f6fb3cd087a80fa5e46df"
dependencies = [
"build-info",
"letterbox-notmuch 0.17.61",
@@ -3295,12 +3272,10 @@ dependencies = [
[[package]]
name = "letterbox-shared"
version = "0.17.61"
source = "sparse+https://git.z.xinu.tv/api/packages/wathiede/cargo/"
checksum = "ca342be12e54e0a54aa3df86b2bda6e3ff014c75a00f6fb3cd087a80fa5e46df"
version = "0.17.65"
dependencies = [
"build-info",
"letterbox-notmuch 0.17.61 (sparse+https://git.z.xinu.tv/api/packages/wathiede/cargo/)",
"letterbox-notmuch 0.17.65",
"regex",
"serde",
"sqlx",
@@ -3310,7 +3285,7 @@ dependencies = [
[[package]]
name = "letterbox-web"
version = "0.17.61"
version = "0.17.65"
dependencies = [
"build-info",
"build-info-build",
@@ -3322,7 +3297,7 @@ dependencies = [
"graphql_client",
"human_format",
"itertools",
"letterbox-shared 0.17.61",
"letterbox-shared 0.17.65",
"log",
"seed",
"seed_hooks",
@@ -3499,16 +3474,6 @@ version = "0.11.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "08ab2867e3eeeca90e844d1940eab391c9dc5228783db2ed999acbc0a9ed375a"
[[package]]
name = "lzma-rust2"
version = "0.15.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7fa48f5024824ecd3e8282cc948bd46fbd095aed5a98939de0594601a59b4e2b"
dependencies = [
"crc 2.1.0",
"sha2 0.10.9",
]
[[package]]
name = "mac"
version = "0.1.1"
@@ -3554,17 +3519,6 @@ dependencies = [
"web_atoms 0.2.3",
]
[[package]]
name = "markup5ever"
version = "0.37.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7cfb33ea12d5d83b1ba9a55ae7d05faec4f2189d47b79c04d4cea6bbe9f5b083"
dependencies = [
"log",
"tendril 0.5.0",
"web_atoms 0.2.3",
]
[[package]]
name = "markup5ever"
version = "0.38.0"
@@ -3869,7 +3823,7 @@ version = "0.50.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5"
dependencies = [
"windows-sys 0.61.2",
"windows-sys 0.59.0",
]
[[package]]
@@ -4498,12 +4452,6 @@ version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
[[package]]
name = "ppmd-rust"
version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "efca4c95a19a79d1c98f791f10aebd5c1363b473244630bb7dbde1dc98455a24"
[[package]]
name = "ppv-lite86"
version = "0.2.21"
@@ -4698,7 +4646,7 @@ dependencies = [
"once_cell",
"socket2 0.6.2",
"tracing",
"windows-sys 0.60.2",
"windows-sys 0.52.0",
]
[[package]]
@@ -5258,7 +5206,7 @@ dependencies = [
"errno",
"libc",
"linux-raw-sys",
"windows-sys 0.61.2",
"windows-sys 0.52.0",
]
[[package]]
@@ -5317,7 +5265,7 @@ dependencies = [
"security-framework 3.5.1",
"security-framework-sys",
"webpki-root-certs",
"windows-sys 0.61.2",
"windows-sys 0.52.0",
]
[[package]]
@@ -5829,7 +5777,7 @@ dependencies = [
"base64 0.22.1",
"bytes 1.11.0",
"chrono",
"crc 3.4.0",
"crc",
"crossbeam-queue 0.3.12",
"either",
"event-listener",
@@ -5905,7 +5853,7 @@ dependencies = [
"byteorder",
"bytes 1.11.0",
"chrono",
"crc 3.4.0",
"crc",
"digest 0.10.7",
"dotenvy",
"either",
@@ -5947,7 +5895,7 @@ dependencies = [
"bitflags 2.10.0",
"byteorder",
"chrono",
"crc 3.4.0",
"crc",
"dotenvy",
"etcetera",
"futures-channel",
@@ -6344,7 +6292,7 @@ dependencies = [
"getrandom 0.3.4",
"once_cell",
"rustix",
"windows-sys 0.61.2",
"windows-sys 0.52.0",
]
[[package]]
@@ -7476,7 +7424,7 @@ version = "0.1.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22"
dependencies = [
"windows-sys 0.61.2",
"windows-sys 0.48.0",
]
[[package]]
@@ -7944,18 +7892,18 @@ dependencies = [
[[package]]
name = "zerocopy"
version = "0.8.33"
version = "0.8.34"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "668f5168d10b9ee831de31933dc111a459c97ec93225beb307aed970d1372dfd"
checksum = "71ddd76bcebeed25db614f82bf31a9f4222d3fbba300e6fb6c00afa26cbd4d9d"
dependencies = [
"zerocopy-derive",
]
[[package]]
name = "zerocopy-derive"
version = "0.8.33"
version = "0.8.34"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2c7962b26b0a8685668b671ee4b54d007a67d4eaf05fda79ac0ecf41e32270f1"
checksum = "d8187381b52e32220d50b255276aa16a084ec0a9017a0ca2152a1f55c539758d"
dependencies = [
"proc-macro2",
"quote",
@@ -8052,10 +8000,8 @@ dependencies = [
"getrandom 0.3.4",
"hmac 0.12.1",
"indexmap 2.13.0",
"lzma-rust2",
"memchr",
"pbkdf2",
"ppmd-rust",
"sha1",
"time 0.3.46",
"typed-path",

View File

@@ -8,7 +8,7 @@ authors = ["Bill Thiede <git@xinu.tv>"]
edition = "2021"
license = "UNLICENSED"
publish = ["xinu"]
version = "0.17.61"
version = "0.17.65"
repository = "https://git.z.xinu.tv/wathiede/letterbox"
[profile.dev]

View File

@@ -56,7 +56,7 @@ urlencoding = "2.1.3"
#xtracing = { git = "http://git-private.h.xinu.tv/wathiede/xtracing.git" }
#xtracing = { path = "../../xtracing" }
xtracing = { version = "0.3.2", registry = "xinu" }
zip = "7.0.0"
zip = { version = "7.0.0", default-features = false, features = ["aes-crypto", "bzip2", "deflate64", "deflate", "time", "zstd"] }
[build-dependencies]

View File

@@ -224,6 +224,24 @@ pub fn update(msg: Msg, model: &mut Model, orders: &mut impl Orders<Msg>) {
});
}
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 {
let res: Result<
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 {
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
});
}
@@ -505,7 +540,7 @@ pub fn update(msg: Msg, model: &mut Model, orders: &mut impl Orders<Msg>) {
.join(" ");
orders
.skip()
.perform_cmd(async move { Msg::AddTag(threads, tag) });
.perform_cmd(async move { Msg::AddTagAndGoToSearch(threads, tag) });
}
}
Msg::SelectionRemoveTag(tag) => {
@@ -520,7 +555,7 @@ pub fn update(msg: Msg, model: &mut Model, orders: &mut impl Orders<Msg>) {
.join(" ");
orders
.skip()
.perform_cmd(async move { Msg::RemoveTag(threads, tag) });
.perform_cmd(async move { Msg::RemoveTagAndGoToSearch(threads, tag) });
}
}
Msg::SelectionMarkAsRead => {
@@ -692,6 +727,13 @@ pub fn update(msg: Msg, model: &mut Model, orders: &mut impl Orders<Msg>) {
};
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 => {
orders.send_msg(Msg::ScrollToTop);
let Some(catchup) = &mut model.catchup else {
@@ -852,7 +894,10 @@ pub enum Msg {
SetUnread(String, bool),
AddTag(String, String),
AddTagAndGoToSearch(String, String),
#[allow(dead_code)]
RemoveTag(String, String),
RemoveTagAndGoToSearch(String, String),
Snooze(String, DateTime<Utc>),
FrontPageRequest {
@@ -902,6 +947,7 @@ pub enum Msg {
CatchupStart,
CatchupKeepUnread,
CatchupMarkAsRead,
CatchupMarkAsSpam,
CatchupNext,
CatchupExit,

View File

@@ -268,6 +268,14 @@ fn catchup_view(
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![
tw_classes::button_with_color("bg-green-800", "hover:bg-green-700"),
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![
C![&tw_classes::TAG_X],
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))
]
]
})