#!/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
MBSYNC_PRE="imapfilter"
MBSYNC_POST="notmuch new"

success="false"
tries=0

# 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

$MBSYNC_PRE
while true; do
  if checkmail; then
    success="true"
  fi

  if [ $success = "true" ] || [ $tries -gt $MBSYNC_MAX_TRIES ]; then
    fail "Maximum retries reached unsuccessfully."
  fi
  tries=$((tries + 1))
done
$MBSYNC_POST