diff --git a/mail/.local/bin/mail-check b/mail/.local/bin/mail-check index e5cb3a8..36a2d48 100755 --- a/mail/.local/bin/mail-check +++ b/mail/.local/bin/mail-check @@ -20,71 +20,81 @@ PASSWORD_FILE="$HOME/.local/share/pass/misc/aerc-gmail-app-password.gpg" prehook() { - if [ -n "$MBSYNC_PRE" ]; then - eval "$MBSYNC_PRE" - return 0 - fi - imapfilter -c "${XDG_CONFIG_HOME:-/home/marty/.config}/imapfilter/config.lua" + if [ -n "$MBSYNC_PRE" ]; then + eval "$MBSYNC_PRE" + return 0 + fi + imapfilter -c "${XDG_CONFIG_HOME:-/home/marty/.config}/imapfilter/config.lua" } posthook() { - if [ -n "$MBSYNC_POST" ]; then - eval "$MBSYNC_POST" - return 0 - fi + if [ -n "$MBSYNC_POST" ]; then + eval "$MBSYNC_POST" + return 0 + fi - notmuch new 2>/dev/null - afew --tag --new - afew --move-mail --new - afew --tag --new - notmuch_foldertags - countnew + notmuch new 2>/dev/null + afew --tag --new + afew --move-mail --new + afew --tag --new + notmuch_foldertags + countnew } # use notmuch to index incoming mail and set the # correct number of mails if new ones arrived for notifications countnew() { - num=$(notmuch count tag:unread and tag:inbox) - HASMAIL="${num:-0}" + num=$(notmuch count tag:unread and tag:inbox) + HASMAIL="${num:-0}" } # fail the routine and optionally send a message why fail() { - [ -n "$1" ] && echo "$1" - exit 1 + [ -n "$1" ] && echo "$1" + exit 1 } checkmail() { - mbsync -c "${XDG_CONFIG_HOME:-$HOME/.config}/isync/mbsyncrc" -a + mbsync -c "${XDG_CONFIG_HOME:-$HOME/.config}/isync/mbsyncrc" -a } checkonline() { - # Ping 1.1.1.1 to confirm that we are on the internet - ping -c 1 "1.1.1.1" >/dev/null 2>/dev/null || fail "checkmail can not access the internet." + # Ping 1.1.1.1 to confirm that we are on the internet + ping -c 1 "1.1.1.1" >/dev/null 2>/dev/null || fail "checkmail can not access the internet." } # warn user that he has to enter his password in a moment # to stop catching him offguard or entering something by accident checkwarnuser() { - agt=$(gpg2 --decrypt --no-tty --quiet --no-verbose --for-your-eyes-only --pinentry-mode cancel "$PASSWORD_FILE" 2>&1) - if echo "$agt" | grep -qE 'No secret key'; then - notify "Mail: Password phrase needed!" - sleep 2.5 - fi + agt=$(gpg2 --decrypt --no-tty --quiet --no-verbose --for-your-eyes-only --pinentry-mode cancel "$PASSWORD_FILE" 2>&1) + if echo "$agt" | grep -qE 'No secret key'; then + notify "Mail" "Password phrase needed!" + sleep 2.5 + fi +} + +enablegpgagent() { + ## get password from user + agt=$(gpg2 --decrypt --no-tty --quiet --no-verbose --for-your-eyes-only --pinentry-mode ask "$PASSWORD_FILE" 2>&1) + ## exit program after first failed attempt + if echo "$agt" | grep -qE 'decryption failed'; then + notify "Mail" "Process aborted." + exit 1 + fi } # send out a notification on new mail, to libnotify and stdout notifymail() { - [ "${MBSYNC_NOTIFY:-1}" -eq 0 ] && return + [ "${MBSYNC_NOTIFY:-1}" -eq 0 ] && return - if [ "${HASMAIL:-0}" -gt 0 ]; then - notify "($HASMAIL) new mail" - fi + if [ "${HASMAIL:-0}" -gt 0 ]; then + notify "Mail" "New Mail ($HASMAIL)" + fi } notify() { - command -v notify-send >/dev/null && notify-send "$@" - echo "$@" + command -v notify-send >/dev/null && notify-send "$@" + echo "$@" } # Routine start @@ -93,38 +103,40 @@ notify() { # skip any retries and pre/post hooks, just run mbsync if [ "$1" = "raw" ]; then - checkmail - exit + checkmail + exit fi main() { - checkwarnuser + checkwarnuser - prehook + enablegpgagent - tries=0 - while true; do - if checkmail; then - break - fi + prehook - tries=$((tries + 1)) - if [ $tries -gt "${MBSYNC_MAX_TRIES:-3}" ]; then - fail "maximum retries reached without success." - fi - done - unset tries + tries=0 + while true; do + if checkmail; then + break + fi - posthook + tries=$((tries + 1)) + if [ $tries -gt "${MBSYNC_MAX_TRIES:-3}" ]; then + fail "maximum retries reached without success." + fi + done + unset tries - notifymail + posthook + + notifymail } notmuch_foldertags() { - notmuch tag +dump -inbox -deleted -- folder:Dump and not folder:Inbox - notmuch tag +archived -inbox -deleted -- folder:Archive and not folder:Inbox - notmuch tag +deleted -inbox -archived -- folder:Trash and not folder:Inbox - notmuch tag -inbox -- not folder:Inbox + notmuch tag +dump -inbox -deleted -- folder:Dump and not folder:Inbox + notmuch tag +archived -inbox -deleted -- folder:Archive and not folder:Inbox + notmuch tag +deleted -inbox -archived -- folder:Trash and not folder:Inbox + notmuch tag -inbox -- not folder:Inbox } main