diff options
Diffstat (limited to 'offlineimap/postsynchook.sh')
-rwxr-xr-x | offlineimap/postsynchook.sh | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/offlineimap/postsynchook.sh b/offlineimap/postsynchook.sh new file mode 100755 index 0000000..7262a50 --- /dev/null +++ b/offlineimap/postsynchook.sh @@ -0,0 +1,46 @@ +#!/usr/bin/env bash + +clean () { + sed "s/^\[/\\\[/g" | sed "s/\"/'/g" | sed 's/\!/❕/g' +} + +get_sender () { + grep -o '^From: \(.*\)$' $1 | sed "s/^From: //g" | clean +} + +get_subject () { + grep -o '^Subject: \(.*\)$' $1 | sed "s/^Subject: //g" | perl -pe 'use MIME::Words(decode_mimewords); $_=decode_mimewords($_);' | clean +} + +notify () { + account=$1 + previous_messages=/tmp/offlineimap-$account-messages + maildir="$HOME/.mail/$account/inbox/new" + + if [ ! -e $previous_messages ]; then + touch $previous_messages + fi + + for file in $maildir/*; do + if [ ! -f $file ]; then + continue + fi + + filename=$(basename $file) + if grep -Fxq $filename $previous_messages; then + : echo "seen" + else + echo $filename >> $previous_messages + sender="`get_sender $file`" + subject=`get_subject $file` + message="New message for $account" + + if [ -e /usr/local/bin/terminal-notifier ]; then + terminal-notifier -title $subject -subtitle $sender -message $message -sender 'org.gnu.Emacs' -activate 'org.gnu.Emacs' + fi + fi + done +} + +mu index +notify $1 |