summaryrefslogtreecommitdiff
path: root/bin/mailsync
diff options
context:
space:
mode:
Diffstat (limited to 'bin/mailsync')
-rwxr-xr-xbin/mailsync31
1 files changed, 25 insertions, 6 deletions
diff --git a/bin/mailsync b/bin/mailsync
index 3a681f0..7bca2d0 100755
--- a/bin/mailsync
+++ b/bin/mailsync
@@ -58,7 +58,7 @@ syncandnotify() {
case "$1" in
imap) mbsync -q "$2" ;;
pop) mpop -q "$2" ;;
- esac
+ esac || return 1
new=$(find\
"$HOME/.local/share/mail/$2/"[Ii][Nn][Bb][Oo][Xx]/new/ \
"$HOME/.local/share/mail/$2/"[Ii][Nn][Bb][Oo][Xx]/cur/ \
@@ -74,7 +74,7 @@ syncandnotify() {
[ -z "$MAILSYNC_MUTE" ] &&
for file in $new; do
# Extract and decode subject and sender from mail.
- subject=$(awk '/^Subject: / && ++n == 1,/^.*: / && ++i == 2' "$file" | head -n-1 |
+ subject=$(awk '/^Subject: / && ++n == 1,/^.*: / && ++i == 2' "$file" | sed '$d' |
perl -CS -MEncode -ne 'print decode("MIME-Header", $_)' |
sed 's/^Subject: //' | tr -d '\n\t')
from="$(sed -n "/^From:/ s|From: *|| p" "$file" |
@@ -100,15 +100,34 @@ else
done || echo "error $arg"; done)"
fi
+pids= # PIDs of backgrounded subshells
+count=0 # number of accounts in $tosync
+failed=0 # number of failed sync attempts
for account in $tosync; do
+ count=$((count+1))
case $account in
- Channel*) syncandnotify imap "${account##* }" & ;;
- account*) syncandnotify pop "${account##* }" & ;;
- error*) echo "ERROR: Account ${account##* } not found." ;;
+ Channel*)
+ syncandnotify imap "${account##* }" &
+ pids="$pids $!"
+ ;;
+ account*)
+ syncandnotify pop "${account##* }" &
+ pids="$pids $!"
+ ;;
+ error*)
+ echo "ERROR: Account ${account##* } not found."
+ failed=$((failed+1))
+ ;;
esac
done
-wait
+IFS=' '
+for pid in $pids; do
+ wait $pid || failed=$((failed+1))
+done
+
+# Abort if no account sync succeeded
+[ "$count" -gt "$failed" ] || exit 1
notmuch new --quiet