dotfiles/mail/.local/bin/mail-check

85 lines
1.7 KiB
Text
Raw Normal View History

#!/usr/bin/env sh
# runs mbsync, with pre-hooks and post-hooks
# by default, first runs imapfilter
# and after indexes with notmuch
#
# To run without invoking any hooks or retry attempts,
# run `checkmail raw`
# this will simply invoke a single isync run on all
# boxes with the correct config file set.
#
# for more advanced, per-account/channel hooks, see
# https://sourceforge.net/p/isync/feature-requests/8/
MBSYNC_MAX_TRIES=3
prehook() {
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
notmuch new --quiet 2>/dev/null
afew --tag --new
}
# fail the routine and optionally send a message why
fail() {
[ -n "$1" ] && echo "$1"
exit 1
}
checkmail() {
mbsync -c "$XDG_CONFIG_HOME/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."
}
# Routine start
# check
# skip any retries and pre/post hooks, just run mbsync
if [ "$1" = "raw" ]; then
checkmail
exit
fi
main() {
prehook
tries=0
while true; do
if checkmail; then
break
fi
tries=$((tries + 1))
if [ $tries -gt $MBSYNC_MAX_TRIES ]; then
fail "maximum retries reached without success."
fi
done
unset tries
posthook
}
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
}
main
notmuch_foldertags