From: Samir Benmendil Date: Tue, 2 Jan 2018 10:50:59 +0000 (+0000) Subject: isync: support for multiple accounts + make hooks more modular X-Git-Url: https://git.rmz.io/dotfiles.git/commitdiff_plain/68cd21a9e728be519620a9f3ae107cdb4fa6fffe isync: support for multiple accounts + make hooks more modular --- diff --git a/isync/post-sync.d/10-youtube b/isync/post-sync.d/10-youtube new file mode 100755 index 0000000..b6b0aba --- /dev/null +++ b/isync/post-sync.d/10-youtube @@ -0,0 +1,58 @@ +#!/usr/bin/env bash + +errno=$1 +mbsync_args=$* + +if [[ $errno -ne 0 ]]; then + echo "mbsync failed, ignoring post-sync commands." >&2 + exit +fi + +if [[ "$mbsync_args" != "gmail" ]]; then + # only run for gmail account + exit +fi + +yt_src_mb=youtube-orig +yt_dst_mb=youtube +yt_parser=$dir/parse-mail.py +maildirs=( $(sed -nr 's/^Path\s*(.*)$/\1/p' $config) ) + +if [[ -z $maildirs ]]; then + echo "Could not extract 'Path' from 'MaildirStore' in '$config'" >&2 + exit 1 +fi + +shopt -s extglob +shopt -s nullglob +for maildir in "${maildirs[@]}"; do + # expand tilde + maildir=${maildir/#~/$HOME} + + if [[ -d "$maildir/$yt_src_mb" ]]; then + echo "No mailbox at '$maildir/$yt_src_mb'" + continue + fi + + 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 +done diff --git a/isync/sync-mail b/isync/sync-mail index a3b8a7a..1bd0f52 100755 --- a/isync/sync-mail +++ b/isync/sync-mail @@ -1,60 +1,19 @@ #!/usr/bin/env bash +mbsync_args="$*" + dir="$(dirname "${BASH_SOURCE[0]}")" config=$dir/config -### pre-sync {{{ - -### }}} +for hook in $(find $dir/pre-sync.d -type f -executable); do + "$hook" $errno $mbsync_args +done -### sync {{{ -mbsync -c "$config" -a +mbsync -c "$config" $mbsync_args 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" +for hook in $(find $dir/post-sync.d -type f -executable); do + "$hook" $errno $mbsync_args done -# resync new yt_dst_mb -mbsync -c "$config" gmail-$yt_src_mb gmail-$yt_dst_mb - -### }}} +exit $errno diff --git a/systemd/user/mbsync.service b/systemd/user/mbsync@.service similarity index 76% rename from systemd/user/mbsync.service rename to systemd/user/mbsync@.service index 27f04ca..8394136 100644 --- a/systemd/user/mbsync.service +++ b/systemd/user/mbsync@.service @@ -4,4 +4,4 @@ After=network.target network-online.target dbus.socket [Service] Type=oneshot -ExecStart=%h/.config/isync/sync-mail +ExecStart=%h/.config/isync/sync-mail %i diff --git a/systemd/user/mbsync.timer b/systemd/user/mbsync@.timer similarity index 100% rename from systemd/user/mbsync.timer rename to systemd/user/mbsync@.timer