From 0c72ea778890a63b1d6b2302c94f8f840fca07e8 Mon Sep 17 00:00:00 2001 From: Christian Heller Date: Wed, 2 Aug 2023 05:08:41 +0200 Subject: [PATCH] Add mail_sync. --- bookworm/home_files/user/mail_sync.sh | 47 +++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100755 bookworm/home_files/user/mail_sync.sh diff --git a/bookworm/home_files/user/mail_sync.sh b/bookworm/home_files/user/mail_sync.sh new file mode 100755 index 0000000..7d96256 --- /dev/null +++ b/bookworm/home_files/user/mail_sync.sh @@ -0,0 +1,47 @@ +#!/bin/sh +set -e + +basedir="/home/plom/mail/maildir/" +# Ensure directories exist for all "dir:*" tags. +for tag in $(notmuch search --output=tags '*'); do + if [ ! $(echo "${tag}" | cut -c-4) = "dir:" ]; then + continue + fi + target_dir="${basedir}"$(echo "${tag}" | cut -c5-)"/cur/" + if [ ! -d "${target_dir}" ]; then + echo "Directory ${target_dir} does not exist." + exit 1 + fi +done + +# Ensure all "dir:*"-tagged mails are in proper directories, +# remove all "dir:*" tags. +for tag in $(notmuch search --output=tags '*'); do + if [ ! $(echo "${tag}" | cut -c-4) = "dir:" ]; then + continue + fi + target_dir="${basedir}"$(echo "${tag}" | cut -c5-)"/cur/" + for f in $(notmuch search --output=files tag:"${tag}"); do + echo DEBUG0 $f + new_name=$(basename "${f}" | sed -e 's/,U=[0-9]*//') + echo DEBUG0 $new_name + target_path="${target_dir}${new_name}" + echo DEBUG0 $target_path + if [ ! "${target_path}" = "${f}" ]; then + echo "Moving ${f} to ${target_path}." + mv "${f}" "${target_path}" + # NOTE: if we encounter an error here of ${f} not being findable, run "notmuch reindex tag:${tag}" to fix + fi + done + notmuch tag -"${tag}" tag:"${tag}" +done + +# Remove all "deleted"-tagged files from maildirs. +notmuch search --output=files tag:deleted | while read f; do + echo "Deleting ${f}" + rm "${f}" +done + +# Sync changes back to server and update notmuch index. +mbsync -a +notmuch new -- 2.30.2