commit 98c8671e7e4e0bc8e28d2781d09ba98b0818a893
parent 03ea4fbb0bc670324c73d0eff0421a89b4187b87
Author: Jaromil <jaromil@dyne.org>
Date:   Wed,  2 Dec 2015 19:36:44 +0100
documentation for release
Diffstat:
7 files changed, 43 insertions(+), 18 deletions(-)
diff --git a/ChangeLog.md b/ChangeLog.md
@@ -1,7 +1,20 @@
 # JaroMail ChangeLog
 
-## 3.2
-## 25 Jan 2015
+## 4.0
+## 10 Nov 2015
+
+This release brings a refactoring of all commands for shell pipe
+interoperability, which also reduced the overall size of code. The
+user manual reflect changes and shows several examples on how to
+combine "search", "extract" and other commands to manage statistics,
+groups and addressbooks. New fetures include: revamped terminal
+statistics, improved abook conversion, improved secure protocol checks
+and locking mechanisms.
+
+
+
+
+## 3.2 25 Jan 2015
 
 New ZSh completion extension, now capable of tab-completion for
 addresses, maildirs and even remote imap folders. Included
diff --git a/README.md b/README.md
@@ -10,7 +10,7 @@
 
 *A commandline tool to easily and privately handle your e-mail*
 
-Version: **3.2**
+Version: **4.0**
 
 Updates on: http://dyne.org/software/jaro-mail
 
@@ -136,7 +136,7 @@ by Denis Roio aka [Jaromil](http://jaromil.dyne.org).
 
 Jaro Mail would have never been possible without the incredible amount of Love shared by the free and open source community, a more complete list of contributors is included in the [user manual](https://files.dyne.org/jaromail/jaromail-manual.pdf) in the `Acknowledgments` section.
 
-Jaro Mail is Copyright (C) 2010-2014 Denis Roio <jaromil@dyne.org>
+Jaro Mail is Copyright (C) 2010-2015 Denis Roio <jaromil@dyne.org>
 
 This source code is free software; you can redistribute it and/or
 modify it under the terms of the GNU Public License as published by
diff --git a/doc/jaromail-manual.org b/doc/jaromail-manual.org
@@ -75,6 +75,7 @@ this manual is made available on http://files.dyne.org/jaromail/jaromail-manual.
    + Automatically generates filter rules (sieve)
    + Imports and exports VCard contacts to addressbook
    + Computes and shows statistics on mail traffic
+   + Facilitates sending anonymous emails (Mixmaster)
    + Encrypted password storage using OS native keyrings
    + Advanced maildir tools (merge, backup, address extraction)
    + Defers connections for off-line operations
@@ -139,10 +140,13 @@ and actions involved in managing one's email communication:
  | MTA     | Mail Transport Agent  | [[http://www.fetchmail.info][Fetchmail]] |
  | LDA     | Local Delivery Agent  | Jaro Mail |
  | MDA     | Remote Delivery Agent | [[http://en.wikipedia.org/wiki/Sieve_(mail_filtering_language)][Sieve]]     |
- | SMTP    | Mail Delivery Agent   | [[http://msmtp.sourceforge.net][MSmtp]]     |
+ | SMTP    | Mail delivery agent   | [[http://msmtp.sourceforge.net][MSmtp]]     |
+ | ANON    | Anonymous delivery    | [[http://mixmaster.sourceforge.net/][MixMaster]] |
  |         | Search engine         | [[http://notmuchmail.org/][Notmuch]]   |
  |         | Addressbook           | [[http://abook.sf.net][ABook]]     |
  | GPG     | Cryptographic Agent   | [[http://www.gnupg.org][GnuPG]]     |
+ | STORE   | Cryptographic Storage | [[http://www.dyne.org/software/Tomb][Tomb]]      |
+
 
 #+LATEX: \pagebreak
 
diff --git a/src/jaro b/src/jaro
@@ -527,7 +527,7 @@ main() {
     subcommands_opts[deliver]=""
 
     subcommands_opts[passwd]=""
-    subcommands_opts[cert]=""
+    # subcommands_opts[cert]=""
 
     subcommands_opts[source]=""
 
@@ -784,7 +784,7 @@ main() {
 
     passwd) new_password ;;
 
-    cert)    cert ${PARAM} ;; # was checking is_online
+    # cert)    cert ${PARAM} ;; # was checking is_online
 
     isonline) is_online ${=PARAM}; exitcode=$? ;;
 
diff --git a/src/zlibs/addressbook b/src/zlibs/addressbook
@@ -36,8 +36,8 @@ create_addressbook() {
     [[ -r "$MAILDIRS"/Addressbook ]] && {
         notice "Updating the old addressbook to a new format"
         _list=$list
-        list=blacklist; export_abook
-        list=whitelist; export_abook
+        list=blacklist; export_old_to_abook
+        list=whitelist; export_old_to_abook
         list=$_list
         mv "$MAILDIRS"/Addressbook "$MAILDIRS"/Addressbook.old 
     }
@@ -339,7 +339,7 @@ import() {
 
 
 # export old addressbook format to abook
-export_abook() {
+export_old_to_abook() {
 
     [[ -r $MAILDIRS/Addressbook ]] || {
         notice "Old addressbook format not found"
@@ -392,12 +392,11 @@ EOF
 }
 
 # export addressbook to vcard
-export_vcard() {
-    fn export_vcard $*
-
+convert_addresses() {
+    fn convert_addresses $*
     _format=${1:-vcard}
 
-    notice "Reading from stdin addresses to export to format $_format"
+    notice "Converting stdin addresses to format $_format"
     c=0
     ztmp
     for i in "${(f)$(cat)}"; do
@@ -412,14 +411,18 @@ export_vcard() {
 
     _res=$?
 
-    [[ $_res = 0 ]] && {
-        notice "$c addresses converted to $_format" }
+    if [[ $_res = 0 ]]; then
+        notice "$c addresses converted to $_format"
+    else
+        error "Abook fails to convert addresses to format: $_format"
+    fi
+            
     return $_res
 }
 
 edit_abook() {
 
-    abook --config <(sysread <<EOF
+    abook --config <(cat <<EOF
 set autosave=true
 set mutt_command=jaro compose
 set sort_field=name
diff --git a/src/zlibs/maildirs b/src/zlibs/maildirs
@@ -172,6 +172,7 @@ merge() {
 
     c=0
     for i in ${(f)fr}; do
+        
         refile "$i" "$_dst"
         [[ $? = 0 ]] || {
             # bail out on every single error
@@ -232,7 +233,10 @@ maildir_shift() {
         pos=${srcarr[$(( $srcnum - 1 ))]}
 
         func "$cmd $f ${dst}/${pos}/"
-        [[ $DRYRUN = 0 ]] && ${=cmd} $f ${dst}/${pos}/
+        [[ $DRYRUN = 0 ]] && {
+            ${=cmd} $f ${dst}/${pos}/
+            print -n .
+        }
     done
     return 0
 }
diff --git a/src/zlibs/parse b/src/zlibs/parse
@@ -48,6 +48,7 @@ extract_mails() {
     _match=()
 
     for m in ${mailpaths}; do
+        [[ $global_quit = 1 ]] && break
         # use RFC822 parser in fetchaddr
         _parsed=`hdr $m | ${WORKDIR}/bin/fetchaddr ${=_arg} -a`
         for _p in ${(f)_parsed}; do