unofficial mirror of notmuch@notmuchmail.org
 help / color / mirror / code / Atom feed
From: Mark Walters <markwalters1009@gmail.com>
To: notmuch@notmuchmail.org
Subject: [PATCH 6/6] emacs: maildir: add the actual insert code
Date: Sat, 11 Jun 2016 00:02:52 +0100	[thread overview]
Message-ID: <1465599772-10297-7-git-send-email-markwalters1009@gmail.com> (raw)
In-Reply-To: <1465599772-10297-1-git-send-email-markwalters1009@gmail.com>

With all the preparation it is now simple to add the actual insert
code. Since insert can fail for many reasons we let the user decide
interactively deal with it.

We modify test-lib.el to set file fcc, so that all the old tests and
emacs_fcc_message from test-lib.sh still work
---
 emacs/notmuch-maildir-fcc.el | 74 ++++++++++++++++++++++++++++++++++++++++++--
 test/test-lib.el             |  5 +++
 2 files changed, 76 insertions(+), 3 deletions(-)

diff --git a/emacs/notmuch-maildir-fcc.el b/emacs/notmuch-maildir-fcc.el
index fc645c5..db75d0d 100644
--- a/emacs/notmuch-maildir-fcc.el
+++ b/emacs/notmuch-maildir-fcc.el
@@ -65,6 +65,12 @@ yet when sending a mail."
  :require 'notmuch-fcc-initialization
  :group 'notmuch-send)
 
+(defcustom notmuch-maildir-use-notmuch-insert 't
+  "Should fcc use notmuch insert instead of simple fcc"
+  :type '(choice :tag "Fcc Method"
+		 (const :tag "Use notmuch insert" t)
+		 (const :tag "Use simple fcc" nil))
+  :group 'notmuch-send)
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; Functions which set up the fcc header in the message buffer.
@@ -108,7 +114,18 @@ by notmuch-mua-mail"
 	   (error "Invalid `notmuch-fcc-dirs' setting (neither string nor list)")))))
 
     (when subdir
-      (notmuch-maildir-add-file-style-fcc-header subdir))))
+      (if notmuch-maildir-use-notmuch-insert
+	  (notmuch-maildir-add-notmuch-insert-style-fcc-header subdir)
+	(notmuch-maildir-add-file-style-fcc-header subdir)))))
+
+(defun notmuch-maildir-add-notmuch-insert-style-fcc-header (subdir)
+  ;; Notmuch insert does not accept absolute paths, so check the user
+  ;; really want this header inserted.
+
+  (when (or (not (= (elt subdir 0) ?/))
+	    (y-or-n-p (format "Fcc header %s is an absolute path and notmuch insert is requested.\nInsert header anyway? "
+			      subdir)))
+    (message-add-header (concat "Fcc: " subdir))))
 
 (defun notmuch-maildir-add-file-style-fcc-header (subdir)
   (message-add-header
@@ -176,8 +193,59 @@ This is a rearranged version of message mode's message-do-fcc."
 	 (kill-buffer (current-buffer)))))))
 
 (defun notmuch-fcc-handler (fcc-header)
-  "Store message with file fcc."
-  (notmuch-maildir-fcc-file-fcc fcc-header))
+  "Store message with notmuch insert or normal (file) fcc.
+
+If `notmuch-maildir-use-notmuch-insert` is set then store the
+message using notmuch insert. Otherwise store the message using
+normal fcc."
+  (if notmuch-maildir-use-notmuch-insert
+      (notmuch-maildir-fcc-with-notmuch-insert fcc-header)
+    (notmuch-maildir-fcc-file-fcc fcc-header)))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Functions for saving a message using notmuch insert.
+
+(defun notmuch-maildir-notmuch-insert-current-buffer (folder &optional create tags)
+  "Use notmuch insert to put the current buffer in the database.
+
+This inserts the current buffer as a message into the notmuch
+database in folder FOLDER. If CREATE is non-nil it will supply
+the --create-folder flag to create the folder if necessary. TAGS
+should be a list of tag changes to apply to the inserted message."
+  (let* ((args (append (when create (list "--create-folder"))
+		       (list (concat "--folder=" folder))
+		       tags)))
+    (apply 'notmuch-call-notmuch-process
+	   :stdin-string (buffer-string) "insert" args)))
+
+(defun notmuch-maildir-fcc-with-notmuch-insert (fcc-header &optional create)
+  "Store message with notmuch insert.
+
+The fcc-header should be of the form \"folder +tag1 -tag2\" where
+folder is the folder (relative to the notmuch mailstore) to store
+the message in, and tag1 and tag2 are tag changes to apply to the
+stored message. If CREATE is non-nil then create the folder if
+necessary."
+  (let* ((args (split-string-and-unquote fcc-header))
+	 (folder (car args))
+	 (tags (cdr args)))
+    (condition-case nil
+	(notmuch-maildir-notmuch-insert-current-buffer folder create tags)
+      ;; Since there are many reasons notmuch insert could fail, e.g.,
+      ;; locked database, non-existent folder (which could be due to a
+      ;; typo, or just the user want a new folder, let the user decide
+      ;; how to deal with it.
+      (error
+       (let ((response (read-char-choice
+			"Insert failed: (r)etry, (c)reate folder, (i)gnore, or  (e)dit the header? "
+			'(?r ?c ?i ?e))))
+	 (case response
+	       (?r (notmuch-maildir-fcc-with-notmuch-insert fcc-header))
+	       (?c (notmuch-maildir-fcc-with-notmuch-insert fcc-header 't))
+	       (?i 't)
+	       (?e (notmuch-maildir-fcc-with-notmuch-insert
+		    (read-from-minibuffer "Fcc header: " fcc-header)))))))))
+
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; Functions for saving a message using file fcc.
diff --git a/test/test-lib.el b/test/test-lib.el
index 496626f..9946010 100644
--- a/test/test-lib.el
+++ b/test/test-lib.el
@@ -184,6 +184,11 @@ nothing."
 (setq notmuch-tag-deleted-formats
       '((".*" nil)))
 
+;; Also for historical reasons, we set the fcc handler to file not
+;; insert.
+
+(setq notmuch-maildir-use-notmuch-insert nil)
+
 ;; force a common html renderer, to avoid test variations between
 ;; environments
 
-- 
2.1.4

  parent reply	other threads:[~2016-06-10 23:04 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-06-10 23:02 [PATCH 0/6] Use notmuch insert for fcc Mark Walters
2016-06-10 23:02 ` [PATCH 1/6] emacs: notmuch-check-exit-status bugfix Mark Walters
2016-06-10 23:02 ` [PATCH 2/6] emacs: maildir-fcc: prepare for use of notmuch insert Mark Walters
2016-06-10 23:02 ` [PATCH 3/6] emacs: maildir import message-do-fcc Mark Walters
2016-06-10 23:02 ` [PATCH 4/6] emacs: simplify our local copy of message-do-fcc Mark Walters
2016-09-03 20:20   ` David Bremner
2016-09-03 21:42     ` Mark Walters
2016-09-03 22:36       ` David Bremner
2016-06-10 23:02 ` [PATCH 5/6] Modify " Mark Walters
2016-09-03 20:33   ` David Bremner
2016-09-03 21:39     ` Mark Walters
2016-09-03 22:37       ` David Bremner
2016-06-10 23:02 ` Mark Walters [this message]
2016-09-03 20:43 ` [PATCH 0/6] Use notmuch insert for fcc David Bremner

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://notmuchmail.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1465599772-10297-7-git-send-email-markwalters1009@gmail.com \
    --to=markwalters1009@gmail.com \
    --cc=notmuch@notmuchmail.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://yhetil.org/notmuch.git/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).