aboutsummaryrefslogtreecommitdiffstats
path: root/mail-overview/mail-notify.sh
diff options
context:
space:
mode:
authorDanilo M. <danix@danix.xyz>2026-09-13 17:19:02 +0200
committerDanilo M. <danix@danix.xyz>2026-09-13 17:19:02 +0200
commit4ad2936cb5a4a6a44c46911ae7810bc161402dbb (patch)
tree48d0ac5435e3ca88f5e5466ebafafb698a10a709 /mail-overview/mail-notify.sh
parentd4490c5e696fd9a9f4bd694abfd9b2877351d717 (diff)
downloadquickshell-4ad2936cb5a4a6a44c46911ae7810bc161402dbb.tar.gz
quickshell-4ad2936cb5a4a6a44c46911ae7810bc161402dbb.zip
feat(mail-overview): parse accounts for the notifier
Same source the drawer parses, so adding an account in qtmaildir notifies with no edit here. Keys run to the closing bracket because real ones contain dots, and parsing walks lines because a folder named [Gmail]/Bozze ends a section body early.
Diffstat (limited to 'mail-overview/mail-notify.sh')
-rwxr-xr-xmail-overview/mail-notify.sh43
1 files changed, 43 insertions, 0 deletions
diff --git a/mail-overview/mail-notify.sh b/mail-overview/mail-notify.sh
index fbc27c5..1cadce4 100755
--- a/mail-overview/mail-notify.sh
+++ b/mail-overview/mail-notify.sh
@@ -37,6 +37,49 @@ SCOPE='tag:unread and tag:inbox'
# Three matches the drawer's own --limit=3.
ROWS=3
+# Accounts in file order, one "key<TAB>label" line each, read from stdin.
+#
+# Two things here are load-bearing, and both have already broken this
+# component once:
+#
+# The key runs to the closing bracket, NOT to the first dot. Real keys
+# contain dots, so splitting on the first one yields a notmuch tag matching
+# nothing and an account that silently never notifies.
+#
+# And this walks lines rather than matching a section body as "everything up
+# to the next [". Accounts have folders named like [Gmail]/Bozze, which ends
+# the body before its label and makes the account display its raw key.
+parse_accounts() {
+ local line key label
+ key=""
+ label=""
+
+ while IFS= read -r line || [[ -n "$line" ]]; do
+ if [[ "$line" =~ ^\[account\.([^]]+)\] ]]; then
+ [[ -n "$key" ]] && printf '%s\t%s\n' "$key" "${label:-$key}"
+ key="${BASH_REMATCH[1]}"
+ label=""
+ continue
+ fi
+ # Any other section ends the current account.
+ if [[ "$line" =~ ^\[ ]]; then
+ [[ -n "$key" ]] && printf '%s\t%s\n' "$key" "${label:-$key}"
+ key=""
+ label=""
+ continue
+ fi
+ [[ -n "$key" ]] || continue
+ if [[ "$line" =~ ^[[:space:]]*label[[:space:]]*=[[:space:]]*(.*)$ ]]; then
+ label="${BASH_REMATCH[1]}"
+ # Trailing whitespace only; a label may contain spaces.
+ label="${label%"${label##*[![:space:]]}"}"
+ fi
+ done
+
+ [[ -n "$key" ]] && printf '%s\t%s\n' "$key" "${label:-$key}"
+ return 0
+}
+
main() {
echo "not implemented"
}