]> git.rmz.io Git - dotfiles.git/blobdiff - isync/sync-mail
isync: use mbsync instead of offlineimap
[dotfiles.git] / isync / sync-mail
diff --git a/isync/sync-mail b/isync/sync-mail
new file mode 100755 (executable)
index 0000000..a3b8a7a
--- /dev/null
@@ -0,0 +1,60 @@
+#!/usr/bin/env bash
+
+dir="$(dirname "${BASH_SOURCE[0]}")"
+config=$dir/config
+
+### pre-sync {{{
+
+### }}}
+
+### sync {{{
+mbsync -c "$config" -a
+errno=$?
+
+if [[ $errno -ne 0 ]]; then
+    echo "mbsync failed, ignoring post-sync commands." >&2
+    exit $errno
+fi
+### }}}
+
+### post-sync {{{
+yt_src_mb=youtube-orig
+yt_dst_mb=youtube
+yt_parser=$dir/parse-mail.py
+maildir=$(sed -nr 's/^Path\s*(.*)$/\1/p' $config)
+
+
+if [[ -z $maildir ]]; then
+    echo "Could not extract 'Path' from 'MaildirStore' in '$config'" >&2
+    exit 1
+fi
+
+# expand tilde
+maildir=${maildir/#~/$HOME}
+
+shopt -s extglob
+shopt -s nullglob
+for mail in "$maildir"/$yt_src_mb/new/* ; do
+    mangled_mail=${mail/$yt_src_mb/$yt_dst_mb}
+    # remove UID for mbsync to regenerate it
+    mangled_mail="${mangled_mail/,U=+([0-9])}"
+
+    echo -n "Parsing new message '$(basename "$mail")'..."
+    $yt_parser <"$mail" >"$mangled_mail"
+
+    if [[ $? -eq 0 ]]; then
+        echo " Success."
+    else
+        echo " Failure! Copying message as is."
+        cp "$mail" "$mangled_mail"
+    fi
+
+    # sync {a,m}time
+    touch --reference "$mail" "$mangled_mail"
+    mv "$mail" "${mail/new/cur}S"
+done
+# resync new yt_dst_mb
+mbsync -c "$config" gmail-$yt_src_mb gmail-$yt_dst_mb
+
+### }}}
+