diff options
Diffstat (limited to 'desktop/modules/mail/mail-open.sh')
| -rwxr-xr-x | desktop/modules/mail/mail-open.sh | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/desktop/modules/mail/mail-open.sh b/desktop/modules/mail/mail-open.sh new file mode 100755 index 0000000..90877bd --- /dev/null +++ b/desktop/modules/mail/mail-open.sh @@ -0,0 +1,46 @@ +#!/bin/bash +# +# Copyright (C) 2026 Danilo M. <danix@danix.xyz> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2 as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# Opens qtmaildir on an account, or on a thread's newest unread message. +# Shared by the drawer's mail page and mail-notify.sh, so both open mail the +# same way. +# +# mail-open.sh <account-key> [thread-id] +# +# A running qtmaildir takes the selectors over its socket and raises, so this +# never opens a second window. +# +# The message is looked up at click time rather than when the row or the +# notification was built: by then it may have been read, and an unread-only +# lookup that finds nothing falls back to the whole thread instead of a miss. +# Newest, because that is the message the row's date and the notification +# are about. + +set -u + +key="${1:?usage: mail-open.sh <account-key> [thread-id]}" +tid="${2:-}" +args=(--account "$key") + +# notmuch thread ids are hex; anything else never reaches a query. +if [[ "$tid" =~ ^[0-9a-f]+$ ]]; then + id="$(notmuch search --format=json --output=messages --sort=newest-first --limit=1 \ + "thread:$tid and tag:unread and tag:inbox" 2>/dev/null | jq -r '.[0] // empty' 2>/dev/null)" + if [[ -n "$id" ]]; then + args+=(--message "$id") + else + args+=(--thread "$tid") + fi +fi + +exec "$HOME/bin/qtmaildir" "${args[@]}" |
