From 7d8b2e29b29c5625bd30132b0ea4828f0a58813f Mon Sep 17 00:00:00 2001 From: Ulyssa Date: Fri, 16 Aug 2024 23:56:53 -0700 Subject: [PATCH] Include room name in desktop notifications --- Cargo.lock | 218 +++---------------------------------------- Cargo.toml | 17 +++- src/config.rs | 14 ++- src/notifications.rs | 18 +++- 4 files changed, 54 insertions(+), 213 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7aa16fc..65aa3a7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -460,30 +460,6 @@ version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" -[[package]] -name = "bincode" -version = "1.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" -dependencies = [ - "serde", -] - -[[package]] -name = "bit-set" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" -dependencies = [ - "bit-vec", -] - -[[package]] -name = "bit-vec" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" - [[package]] name = "bit_field" version = "0.10.2" @@ -724,7 +700,6 @@ dependencies = [ "anstyle", "clap_lex", "strsim", - "terminal_size", ] [[package]] @@ -785,19 +760,15 @@ version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d0436149c9f6a1935b13306206c739b1ba84fa81f551b5eb87fc2ca7a13700af" dependencies = [ - "clap", "derive_builder", "emojis", "entities", "memchr", "once_cell", "regex", - "shell-words", "slug", - "syntect", "typed-arena", "unicode_categories", - "xdg", ] [[package]] @@ -1522,16 +1493,6 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a" -[[package]] -name = "fancy-regex" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b95f7c0680e4142284cf8b22c14a476e87d61b004a3a0861872b32ef7ead40a2" -dependencies = [ - "bit-set", - "regex", -] - [[package]] name = "fancy_constructor" version = "1.2.2" @@ -1894,7 +1855,7 @@ dependencies = [ "futures-sink", "futures-util", "http", - "indexmap 2.2.6", + "indexmap", "slab", "tokio", "tokio-util", @@ -1911,12 +1872,6 @@ dependencies = [ "crunchy", ] -[[package]] -name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" - [[package]] name = "hashbrown" version = "0.14.3" @@ -1933,7 +1888,7 @@ version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7" dependencies = [ - "hashbrown 0.14.3", + "hashbrown", ] [[package]] @@ -2262,16 +2217,6 @@ dependencies = [ "web-sys", ] -[[package]] -name = "indexmap" -version = "1.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" -dependencies = [ - "autocfg", - "hashbrown 0.12.3", -] - [[package]] name = "indexmap" version = "2.2.6" @@ -2279,7 +2224,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" dependencies = [ "equivalent", - "hashbrown 0.14.3", + "hashbrown", "serde", ] @@ -2500,21 +2445,6 @@ dependencies = [ "vcpkg", ] -[[package]] -name = "line-wrap" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f30344350a2a51da54c1d53be93fade8a237e545dbcc4bdbe635413f2117cab9" -dependencies = [ - "safemem", -] - -[[package]] -name = "linked-hash-map" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" - [[package]] name = "linux-raw-sys" version = "0.3.8" @@ -2549,7 +2479,7 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3262e75e648fce39813cb56ac41f3c3e3f65217ebf3844d818d1f9398cfb0dc" dependencies = [ - "hashbrown 0.14.3", + "hashbrown", ] [[package]] @@ -2707,7 +2637,7 @@ dependencies = [ "http", "hyper", "imbl", - "indexmap 2.2.6", + "indexmap", "matrix-sdk-base", "matrix-sdk-common", "matrix-sdk-indexeddb", @@ -3167,28 +3097,6 @@ version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" -[[package]] -name = "onig" -version = "6.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c4b31c8722ad9171c6d77d3557db078cab2bd50afcc9d09c8b315c59df8ca4f" -dependencies = [ - "bitflags 1.3.2", - "libc", - "once_cell", - "onig_sys", -] - -[[package]] -name = "onig_sys" -version = "69.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b829e3d7e9cc74c7e315ee8edb185bf4190da5acde74afd7fc59c35b1f086e7" -dependencies = [ - "cc", - "pkg-config", -] - [[package]] name = "opaque-debug" version = "0.3.1" @@ -3364,7 +3272,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" dependencies = [ "fixedbitset", - "indexmap 2.2.6", + "indexmap", ] [[package]] @@ -3479,20 +3387,6 @@ version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "db23d408679286588f4d4644f965003d056e3dd5abcaaa938116871d7ce2fee7" -[[package]] -name = "plist" -version = "1.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a4a0cfc5fb21a09dc6af4bf834cf10d4a32fccd9e2ea468c4b1751a097487aa" -dependencies = [ - "base64", - "indexmap 1.9.3", - "line-wrap", - "quick-xml 0.30.0", - "serde", - "time", -] - [[package]] name = "png" version = "0.17.13" @@ -4015,7 +3909,7 @@ dependencies = [ "form_urlencoded", "getrandom", "http", - "indexmap 2.2.6", + "indexmap", "js-sys", "js_int", "konst", @@ -4041,7 +3935,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d20a52770e5a9fb30b7a1c14ba8b3dcf76dadc01674e58e40094f78e6bd5e3f1" dependencies = [ "as_variant", - "indexmap 2.2.6", + "indexmap", "js_int", "js_option", "percent-encoding", @@ -4195,21 +4089,6 @@ version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" -[[package]] -name = "safemem" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072" - -[[package]] -name = "same-file" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" -dependencies = [ - "winapi-util", -] - [[package]] name = "schannel" version = "0.1.23" @@ -4317,7 +4196,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8de514ef58196f1fc96dcaef80fe6170a1ce6215df9687a93fe8300e773fefc5" dependencies = [ "form_urlencoded", - "indexmap 2.2.6", + "indexmap", "itoa", "ryu", "serde", @@ -4397,12 +4276,6 @@ dependencies = [ "lazy_static 1.4.0", ] -[[package]] -name = "shell-words" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde" - [[package]] name = "signal-hook" version = "0.3.17" @@ -4650,29 +4523,6 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" -[[package]] -name = "syntect" -version = "5.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "874dcfa363995604333cf947ae9f751ca3af4522c60886774c4963943b4746b1" -dependencies = [ - "bincode", - "bitflags 1.3.2", - "fancy-regex", - "flate2", - "fnv", - "once_cell", - "onig", - "plist", - "regex-syntax", - "serde", - "serde_derive", - "serde_json", - "thiserror", - "walkdir", - "yaml-rust", -] - [[package]] name = "system-configuration" version = "0.5.1" @@ -4733,16 +4583,6 @@ dependencies = [ "utf-8", ] -[[package]] -name = "terminal_size" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e6bf6f19e9f8ed8d4048dc22981458ebcf406d67e94cd422e5ecd73d63b3237" -dependencies = [ - "rustix 0.37.27", - "windows-sys 0.48.0", -] - [[package]] name = "textwrap" version = "0.16.1" @@ -4944,7 +4784,7 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 2.2.6", + "indexmap", "toml_datetime", "winnow 0.5.40", ] @@ -4955,7 +4795,7 @@ version = "0.20.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81" dependencies = [ - "indexmap 2.2.6", + "indexmap", "toml_datetime", "winnow 0.5.40", ] @@ -4966,7 +4806,7 @@ version = "0.22.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e40bb779c5187258fd7aad0eb68cb8706a0a81fa712fbea808ab43c4b8374c4" dependencies = [ - "indexmap 2.2.6", + "indexmap", "serde", "serde_spanned", "toml_datetime", @@ -5312,16 +5152,6 @@ version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f3c4517f54858c779bbcbf228f4fca63d121bf85fbecb2dc578cdf4a39395690" -[[package]] -name = "walkdir" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" -dependencies = [ - "same-file", - "winapi-util", -] - [[package]] name = "want" version = "0.3.1" @@ -5555,15 +5385,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" -[[package]] -name = "winapi-util" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" -dependencies = [ - "winapi", -] - [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" @@ -5882,12 +5703,6 @@ dependencies = [ "spki", ] -[[package]] -name = "xdg" -version = "2.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "213b7324336b53d2414b2db8537e56544d981803139155afa84f76eeebb7a546" - [[package]] name = "xdg-home" version = "1.1.0" @@ -5909,15 +5724,6 @@ dependencies = [ "markup5ever", ] -[[package]] -name = "yaml-rust" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85" -dependencies = [ - "linked-hash-map", -] - [[package]] name = "yansi" version = "0.5.1" diff --git a/Cargo.toml b/Cargo.toml index c199a0b..a4dce2f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,8 +15,9 @@ rust-version = "1.70" build = "build.rs" [features] -default = ["bundled"] +default = ["bundled", "desktop"] bundled = ["matrix-sdk/bundled-sqlite", "rustls-tls"] +desktop = ["dep:notify-rust", "modalkit/clipboard"] native-tls = ["matrix-sdk/native-tls"] rustls-tls = ["matrix-sdk/rustls-tls"] @@ -30,7 +31,6 @@ anyhow = "1.0" bitflags = "^2.3" chrono = "0.4" clap = {version = "~4.3", features = ["derive"]} -comrak = {version = "0.22.0", features = ["shortcodes"]} css-color-parser = "0.1.2" dirs = "4.0.0" emojis = "0.5" @@ -43,7 +43,6 @@ markup5ever_rcdom = "0.2.0" mime = "^0.3.16" mime_guess = "^2.0.4" nom = "7.0.0" -notify-rust = { version = "4.10.0", default-features = false, features = ["zbus", "serde"] } open = "3.2.0" rand = "0.8.5" ratatui = "0.26" @@ -65,8 +64,20 @@ url = {version = "^2.2.2", features = ["serde"]} edit = "0.1.4" humansize = "2.0.0" +[dependencies.comrak] +version = "0.22.0" +default-features = false +features = ["shortcodes"] + +[dependencies.notify-rust] +version = "4.10.0" +default-features = false +features = ["zbus", "serde"] +optional = true + [dependencies.modalkit] version = "0.0.20" +default-features = false #git = "https://github.com/ulyssa/modalkit" #rev = "24f3ec11c7f634005a27b26878d0fbbdcc08f272" diff --git a/src/config.rs b/src/config.rs index f5c5dff..584ac9c 100644 --- a/src/config.rs +++ b/src/config.rs @@ -398,16 +398,26 @@ pub enum UserDisplayStyle { DisplayName, } -#[derive(Clone, Copy, Debug, Default, Deserialize, Eq, PartialEq)] +#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq)] #[serde(rename_all = "lowercase")] pub enum NotifyVia { /// Deliver notifications via terminal bell. Bell, /// Deliver notifications via desktop mechanism. - #[default] + #[cfg(feature = "desktop")] Desktop, } +impl Default for NotifyVia { + fn default() -> Self { + #[cfg(not(feature = "desktop"))] + return NotifyVia::Bell; + + #[cfg(feature = "desktop")] + return NotifyVia::Desktop; + } +} + #[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq)] pub struct Notifications { #[serde(default)] diff --git a/src/notifications.rs b/src/notifications.rs index 48878d7..f6cf3e3 100644 --- a/src/notifications.rs +++ b/src/notifications.rs @@ -18,6 +18,11 @@ use crate::{ config::{ApplicationSettings, NotifyVia}, }; +const IAMB_XDG_NAME: &str = match option_env!("IAMB_XDG_NAME") { + None => "iamb", + Some(iamb) => iamb, +}; + pub async fn register_notifications( client: &Client, settings: &ApplicationSettings, @@ -59,6 +64,7 @@ pub async fn register_notifications( } match notify_via { + #[cfg(feature = "desktop")] NotifyVia::Desktop => send_notification_desktop(summary, body), NotifyVia::Bell => send_notification_bell(&store).await, } @@ -77,11 +83,13 @@ async fn send_notification_bell(store: &AsyncProgramStore) { locked.application.ring_bell = true; } +#[cfg(feature = "desktop")] fn send_notification_desktop(summary: String, body: Option) { let mut desktop_notification = notify_rust::Notification::new(); desktop_notification .summary(&summary) - .appname("iamb") + .appname(IAMB_XDG_NAME) + .icon(IAMB_XDG_NAME) .action("default", "default"); if let Some(body) = body { @@ -164,6 +172,12 @@ pub async fn parse_notification( .and_then(|m| m.display_name()) .unwrap_or_else(|| sender_id.localpart()); + let summary = if let Ok(room_name) = room.display_name().await { + format!("{sender_name} in {room_name}") + } else { + sender_name.to_string() + }; + let body = if show_body { event_notification_body( &event, @@ -175,7 +189,7 @@ pub async fn parse_notification( None }; - return Ok((sender_name.to_string(), body, server_ts)); + return Ok((summary, body, server_ts)); } pub fn event_notification_body(