commit 542416a584bd68e134c317422c5c744f2f354bf4
parent 24edcce376e2a3636332bb61bc848407303694ca
Author: Jaromil <jaromil@dyne.org>
Date: Thu, 24 May 2012 19:12:00 +0200
maildir maintenance functions and more fixes
Diffstat:
M | install.sh | | | 30 | ++++++++++++++++++++++++++++++ |
M | src/jaro | | | 107 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------- |
2 files changed, 127 insertions(+), 10 deletions(-)
diff --git a/install.sh b/install.sh
@@ -88,6 +88,36 @@ else
error "Existing configuration $WORKDIR/Filters.txt skipped"
fi
+if ! [ -r $WORKDIR/Mutt.txt ]; then
+ cat <<EOF > $WORKDIR/Mutt.txt
+# Mutt specific customizations
+# uncomment and fill in with your settings
+
+# set locale="" # system default locale ("C")
+# set signature='~/.signature' # signature file
+# set pgp_sign_as="0xC2B68E39" # UserID/KeyID for signing
+
+# Customized headers
+# unmy_hdr * # remove all extra headers first.
+
+# my_hdr From: Jaromil <jaromil@dyne.org>;
+# my_hdr Organization: Dyne.org Foundation
+# my_hdr X-GPG-Keyserver: pgp.mit.edu
+# my_hdr X-GPG-Id: C2B68E39 [expires: 2013-09-25]
+# my_hdr X-GPG-Fingerprint: B2D9 9376 BFB2 60B7 601F 5B62 F6D3 FBD9 C2B6 8E39
+# my_hdr X-Face: %H:nE)m:Rl>Z?(C7EvRtuUJp4^f@d\#~4pB48~:1:EC)^&9EDcZaKL/*+10(P?g*N0>n8n3&\n kVzfAD\`+RofVAx~ew>FGQmmT7NqlSQx+M8LN5\`,h^aPF[Njx+A~%f!&VJu9!y:~ma/\'^@mvOr@}DyG\n @\"g\`kfy(vyRC
+
+#############
+
+# set attribution='On %{%a, %d %b %Y}, %n wrote:\n'
+# set status_format="-%r-Mutt: %f [Msgs:%?M?%M/?%m%?n? New:%n?%?o? Old:%o?%?d? Del:%d?%?F? Flag:%F?%?t? Tag:%t?%?p? Post:%p?%?b? Inc:%b? %?l? %l?]---(%s/%S)-default-%>-(%P)---"
+
+EOF
+ act "Default Mutt configuration template created"
+else
+ error "Existing configuration $WORKDIR/Mutt.txt skipped"
+fi
+
if ! [ -r $WORKDIR/Accounts ]; then
${=mkdir} $WORKDIR/Accounts
cat <<EOF > $WORKDIR/Accounts/README.txt
diff --git a/src/jaro b/src/jaro
@@ -276,7 +276,7 @@ read_account() {
/^auth/ { printf "auth=\"%s\";", $2 }
/^cert/ { printf "cert=\"%s\";", $2 }
/^options/ { printf "accountopt=\""; for(i=2;i<=NF;i++) printf "%s ", $i; printf "\";" }
- /^folders/ { printf "folders=\"%s\";", $2 }
+ /^folders/ { printf "folders=\""; for(i=2;i<=NF;i++) printf "%s ", $i; printf "\";" }
'`
eval "$ttmp"
# check required fields
@@ -302,7 +302,7 @@ read_account() {
func "cert: $cert"
func "auth: $auth"
func "options: $accountopt"
- func "folders: $folder"
+ func "folders: $folders"
;;
*)
error "Account type \"$type\" not recognized."
@@ -708,6 +708,7 @@ source $MUTTDIR/colors
source $MUTTDIR/formats
source $MUTTDIR/keybindings
source $MUTTDIR/identity
+source $WORKDIR/Mutt.txt
## end of Jaro Mail generated muttrc
####################################
@@ -789,7 +790,7 @@ EOF
done
echo " \\" >> $MUTTDIR/mboxes
- echo " +unsorted" >> $MUTTDIR/mboxes
+ echo " +ml.unsorted +unsorted" >> $MUTTDIR/mboxes
uniq $MUTTDIR/mboxes > $WORKDIR/tmp/mboxes
mv $WORKDIR/tmp/mboxes $MUTTDIR/mboxes
rm -f $WORKDIR/tmp/mboxes
@@ -808,6 +809,12 @@ EOF
* ? formail -x"From:" | head -n1 | tr 'A-Z' 'a-z' | sed 's/.*\W\([0-9a-z_.-]\+@[0-9a-z_.-]\+\).*/\1/' | xargs \$JARO -q query
known/
+# if its an unknown mailinglist, save it into ml.unsorted
+:0
+* ^(List-Id|X-(Mailing-)?List):
+ml.unsorted/
+
+
# if got here, go to unsorted
# save the mails
@@ -820,7 +827,8 @@ EOF
return 0
} # end of update()
-
+###################
+# Little Brother DB
query() {
if [ $QUIET = 1 ]; then
${WORKDIR}/bin/lbdbq ${@}
@@ -842,6 +850,73 @@ learn() {
exitcode=$?
fi
}
+###################
+
+######################
+# Maildir manipulation
+backup() {
+ src=${PARAM[1]}
+ dst=${PARAM[2]}
+ expire=${PARAM[3]}
+ if ! [ -r ${src}/cur ]; then
+ error "No maildir found in $src"
+ return 1
+ fi
+ if ! [ -r ${dst}/cur ]; then
+ maildirmake "${dst}"
+ fi
+ if [ -z $expire ]; then
+ error "No expiration date set for backup, please indicate how many days old"
+ return 1
+ fi
+ notice "Backup of all read mails older than $expire days"
+ total=`find $src/cur -type f | wc -l`
+ moved=`find $src/cur -type f -mtime $expire | wc -l`
+ act "from maildir $src ($total in current)"
+ act "to maildir $dst ($moved to be moved)"
+ find $src/cur -mtime $expire -type f -exec mv {} $dst/cur/ \;
+
+ notice "Operation completed, current maildir sizes:"
+ du -hs $src $dst
+}
+
+rmdupes() {
+ dir=$1
+ if ! [ -r $dir ]; then
+ error "No maildir found in $dir"
+ return 1
+ fi
+ notice "Removing duplicates in $dir"
+ c=0
+ for i in `find ${dir}`; do
+ formail -D 100000 $WORKDIR/tmp/$dir.rmdupes <$i \
+ && rm $i && c=`expr $c + 1`
+ done
+ act "$c duplicates found and deleted"
+}
+
+merge() {
+ src=${PARAM[1]}
+ dst=${PARAM[2]}
+ if ! [ -r ${src}/cur ]; then
+ error "No source maildir found in $src"
+ return 1
+ fi
+ if ! [ -r ${dst}/cur ]; then
+ error "No destination maildir found in $dst"
+ return 1
+ fi
+ notice "Merging maildir ${src} into ${dst}"
+ c=0
+ for i in `find ${src}/cur -type f`; do mv $i ${dst}/cur/; c=`expr $c + 1`; done
+ for i in `find ${src}/new -type f`; do mv $i ${dst}/new/; c=`expr $c + 1`; done
+ for i in `find ${src}/tmp -type f`; do mv $i ${src}/tmp/; c=`expr $c + 1`; done
+ act "$c mails succesfully moved."
+ rmdupes ${dst}
+ notice "Operation completed, you can now safely remove ${src}"
+}
+
+######################
usage() {
cat <<EOF
@@ -853,7 +928,7 @@ Jaro Mail $VERSION - your humble and faithful electronic postman
Syntact: jaro command [options] [account]
-Commands:
+Main commands:
peek look into the [account] mailbox without downloading
fetch download unread emails from [account]
@@ -867,13 +942,17 @@ Options:
-q run quietly without printing informations
-D print debugging information at runtime
-Internal commands:
+Maintenance commands:
- update refresh configurations
- queue add into outbox
- query query a name from addressbook
- learn learn known addresses from mails piped in stdin
+ update refresh configurations
+ queue add a mail into outbox
+ query query a name from addressbook
+ learn learn known addresses from mails piped in stdin
+
+ backup move all mails older than N days from a maildir to another
+ rmdupes remove all duplicate mails into a maildir
+ merge merge a maildir into another, removing all duplicates
Please report bugs on <http://bugs.dyne.org>.
EOF
@@ -908,6 +987,10 @@ main()
subcommands_opts[learn]=""
subcommands_opts[source]=""
subcommands_opts[cert]=""
+ subcommands_opts[backup]=""
+ subcommands_opts[rmdupes]=""
+ subcommands_opts[merge]=""
+
# subcommands_opts[mount]=${subcommands_opts[open]}
# subcommands_opts[create]="s: -size=s -ignore-swap k: -key=k"
### Detect subcommand
@@ -985,6 +1068,10 @@ main()
query) query ${PARAM} ;;
learn) learn ${PARAM} ;;
+ backup) backup ${PARAM} ;;
+ rmdupes) rmdupes ${PARAM} ;;
+ merge) merge ${PARAM} ;;
+
'source') return 0 ;;
__default) ;;
*) error "command \"$subcommand\" not recognized"