1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
#!/usr/bin/env bash
# Sync one mbsync channel and index new messages with notmuch.
set -uo pipefail
MBSYNCRC="${MBSYNCRC:-$HOME/.config/mbsync/.mbsyncrc}"
TITLE="[ SYNCING MAIL]"
DIALOGRC=$(mktemp)
MBSYNC_LOG=$(mktemp)
NOTMUCH_LOG=$(mktemp)
export DIALOGRC
trap 'rm -f "$DIALOGRC" "$MBSYNC_LOG" "$NOTMUCH_LOG"' EXIT
if [[ $# -ne 1 ]]; then
echo "Usage: $0 <mbsync-channel>"
echo
echo "Example:"
echo " $0 arpitchakladar-gmail_com-quick"
echo " $0 arpitchakladar-gmail_com-full"
exit 2
fi
CHANNEL="$1"
cat <<'EOF' >"$DIALOGRC"
use_shadow = ON
use_colors = ON
screen_color = (WHITE,BLACK,OFF)
dialog_color = (WHITE,BLACK,ON)
title_color = (YELLOW,BLACK,ON)
gauge_color = (GREEN,BLACK,ON)
border_color = (CYAN,BLACK,ON)
border2_color = (BLUE,BLACK,ON)
shadow_color = (BLACK,BLACK,ON)
button_active_color = (MAGENTA,BLACK,ON)
button_key_active_color = (MAGENTA,BLACK,ON)
button_label_active_color = (MAGENTA,BLACK,ON)
button_inactive_color = (CYAN,BLACK,OFF)
button_key_inactive_color = (CYAN,BLACK,OFF)
button_label_inactive_color = (CYAN,BLACK,OFF)
EOF
(
printf "XXX\n0\nSyncing: %s...\nXXX\n" "$CHANNEL"
mbsync -c "$MBSYNCRC" "$CHANNEL" >"$MBSYNC_LOG" 2>&1 &
PID=$!
# Keep the gauge alive while mbsync runs.
while kill -0 "$PID" 2>/dev/null; do
printf "XXX\n50\nSyncing: %s...\nXXX\n" "$CHANNEL"
sleep 0.5
done
wait "$PID"
MBSYNC_STATUS=$?
if ((MBSYNC_STATUS != 0)); then
printf "XXX\n100\nSync failed: %s\nXXX\n" "$CHANNEL"
exit "$MBSYNC_STATUS"
fi
printf "XXX\n90\nIndexing new mail with notmuch...\nXXX\n"
notmuch new --quiet >"$NOTMUCH_LOG" 2>&1
NOTMUCH_STATUS=$?
printf "XXX\n100\nDone.\nXXX\n"
if ((NOTMUCH_STATUS != 0)); then
exit "$NOTMUCH_STATUS"
fi
) | dialog --title "$TITLE" --gauge "Initializing..." 8 80 0
STATUS=${PIPESTATUS[0]}
MBSYNC_OUT=$(
tr '\n' ' ' <"$MBSYNC_LOG" |
sed 's/ */ /g'
)
NOTMUCH_OUT=$(
tr '\n' ' ' <"$NOTMUCH_LOG" |
sed 's/ */ /g'
)
if ((STATUS == 0)); then
dialog \
--title "$TITLE" \
--msgbox "Done!\n\nChannel: $CHANNEL\n\nmbsync: ${MBSYNC_OUT:-OK}\n\nnotmuch: ${NOTMUCH_OUT:-OK}" \
12 80
else
dialog \
--title "$TITLE" \
--msgbox "Sync failed!\n\nChannel: $CHANNEL\n\nmbsync: ${MBSYNC_OUT:-no output}\n\nnotmuch: ${NOTMUCH_OUT:-not run}" \
12 80
fi
clear
exit "$STATUS"
|