From 0a3a1746cb1f9e364ce01a604d8ab6269ba58606 Mon Sep 17 00:00:00 2001 From: Aner Zakobar Date: Thu, 8 Oct 2026 13:21:32 +0300 Subject: [PATCH] New mail notifications --- azos-core | 2 +- features/mail/default.nix | 21 +++++++++++++++++++-- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/azos-core b/azos-core index 45f3e20..51e8d56 160000 --- a/azos-core +++ b/azos-core @@ -1 +1 @@ -Subproject commit 45f3e2052268c19f9d1bb3ee9a195c77628d449a +Subproject commit 51e8d56f0cdd676c25c5b9ccb04654ac80da021f diff --git a/features/mail/default.nix b/features/mail/default.nix index 60068f6..5c26c75 100644 --- a/features/mail/default.nix +++ b/features/mail/default.nix @@ -31,9 +31,26 @@ # only queries the card reader (no pinentry involved either way), so it's # safe to use as a silent presence check: skip the sync entirely when the # card isn't there, instead of letting mbsync hit that prompt. + # + # New mail is detected by counting files under every account's Maildir + # "new" subdirectory before and after the sync -- that's where messages + # the server hasn't marked seen land, across all three accounts at once, + # with no need to touch mu's index. A rise in that count means mail + # actually arrived, so only then does it post a desktop notification via + # notify-send -- intentionally separate from mu4e's own "mbsync -a" (its + # mu4e-get-mail-command), which doesn't go through this script at all. mbsyncSafe = pkgs.writeShellScript "mbsync-safe" '' - if ${pkgs.gnupg}/bin/gpg --card-status >/dev/null 2>&1; then - exec ${pkgs.isync}/bin/mbsync -a + if ! ${pkgs.gnupg}/bin/gpg --card-status >/dev/null 2>&1; then + exit 0 + fi + before=$(find "$HOME/Maildir" -path '*/new/*' -type f 2>/dev/null | wc -l) + ${pkgs.isync}/bin/mbsync -a + after=$(find "$HOME/Maildir" -path '*/new/*' -type f 2>/dev/null | wc -l) + new=$((after - before)) + if [ "$new" -gt 0 ]; then + label="new message" + [ "$new" -ne 1 ] && label="new messages" + ${pkgs.libnotify}/bin/notify-send "Mail" "$new $label" fi ''; in {