[PATCH v3 06/20] insert: apply default tags to new message

2013-01-20 Thread Peter Wang
Apply the new.tags to messages added by 'insert'.  This mirrors the
behaviour if the message were delivered by a separate tool followed by
'notmuch new'.
---
 notmuch-insert.c | 29 +++--
 1 file changed, 23 insertions(+), 6 deletions(-)

diff --git a/notmuch-insert.c b/notmuch-insert.c
index 498421d..8388d07 100644
--- a/notmuch-insert.c
+++ b/notmuch-insert.c
@@ -19,6 +19,7 @@
  */

 #include "notmuch-client.h"
+#include "tag-util.h"

 #include 
 #include 
@@ -153,10 +154,11 @@ copy_stdin (int fdin, int fdout)
 return TRUE;
 }

-/* Add the specified message file to the notmuch database.
+/* Add the specified message file to the notmuch database, applying tags.
  * The file is renamed to encode notmuch tags as maildir flags. */
 static notmuch_bool_t
-add_file_to_database (notmuch_database_t *notmuch, const char *path)
+add_file_to_database (notmuch_database_t *notmuch, const char *path,
+ tag_op_list_t *tag_ops)
 {
 notmuch_message_t *message;
 notmuch_status_t status;
@@ -184,7 +186,7 @@ add_file_to_database (notmuch_database_t *notmuch, const 
char *path)
return FALSE;
 }

-notmuch_message_tags_to_maildir_flags (message);
+tag_op_list_apply (message, tag_ops, TAG_FLAG_MAILDIR_SYNC);

 notmuch_message_destroy (message);

@@ -193,7 +195,7 @@ add_file_to_database (notmuch_database_t *notmuch, const 
char *path)

 static notmuch_bool_t
 insert_message (void *ctx, notmuch_database_t *notmuch, int fdin,
-   const char *dir)
+   const char *dir, tag_op_list_t *tag_ops)
 {
 char *tmppath;
 char *newpath;
@@ -214,7 +216,7 @@ insert_message (void *ctx, notmuch_database_t *notmuch, int 
fdin,
return FALSE;
 }

-ret = add_file_to_database (notmuch, newpath);
+ret = add_file_to_database (notmuch, newpath, tag_ops);
 if (!ret) {
/* XXX maybe there should be an option to keep the file in maildir? */
unlink (newpath);
@@ -230,7 +232,11 @@ notmuch_insert_command (void *ctx, int argc, char *argv[])
 notmuch_config_t *config;
 notmuch_database_t *notmuch;
 const char *db_path;
+const char **new_tags;
+size_t new_tags_length;
+tag_op_list_t *tag_ops;
 char *maildir;
+unsigned int i;
 notmuch_bool_t ret;

 config = notmuch_config_open (ctx, NULL, NULL);
@@ -238,6 +244,17 @@ notmuch_insert_command (void *ctx, int argc, char *argv[])
return 1;

 db_path = notmuch_config_get_database_path (config);
+new_tags = notmuch_config_get_new_tags (config, _tags_length);
+
+tag_ops = tag_op_list_create (ctx);
+if (tag_ops == NULL) {
+   fprintf (stderr, "Out of memory.\n");
+   return 1;
+}
+for (i = 0; i < new_tags_length; i++) {
+   if (tag_op_list_append (tag_ops, new_tags[i], FALSE))
+   return 1;
+}

 maildir = talloc_asprintf (ctx, "%s", db_path);
 if (! maildir) {
@@ -249,7 +266,7 @@ notmuch_insert_command (void *ctx, int argc, char *argv[])
   NOTMUCH_DATABASE_MODE_READ_WRITE, ))
return 1;

-ret = insert_message (ctx, notmuch, STDIN_FILENO, maildir);
+ret = insert_message (ctx, notmuch, STDIN_FILENO, maildir, tag_ops);

 notmuch_database_destroy (notmuch);

-- 
1.7.12.1



[PATCH v3 06/20] insert: apply default tags to new message

2013-01-19 Thread Peter Wang
Apply the new.tags to messages added by 'insert'.  This mirrors the
behaviour if the message were delivered by a separate tool followed by
'notmuch new'.
---
 notmuch-insert.c | 29 +++--
 1 file changed, 23 insertions(+), 6 deletions(-)

diff --git a/notmuch-insert.c b/notmuch-insert.c
index 498421d..8388d07 100644
--- a/notmuch-insert.c
+++ b/notmuch-insert.c
@@ -19,6 +19,7 @@
  */
 
 #include notmuch-client.h
+#include tag-util.h
 
 #include sys/types.h
 #include sys/stat.h
@@ -153,10 +154,11 @@ copy_stdin (int fdin, int fdout)
 return TRUE;
 }
 
-/* Add the specified message file to the notmuch database.
+/* Add the specified message file to the notmuch database, applying tags.
  * The file is renamed to encode notmuch tags as maildir flags. */
 static notmuch_bool_t
-add_file_to_database (notmuch_database_t *notmuch, const char *path)
+add_file_to_database (notmuch_database_t *notmuch, const char *path,
+ tag_op_list_t *tag_ops)
 {
 notmuch_message_t *message;
 notmuch_status_t status;
@@ -184,7 +186,7 @@ add_file_to_database (notmuch_database_t *notmuch, const 
char *path)
return FALSE;
 }
 
-notmuch_message_tags_to_maildir_flags (message);
+tag_op_list_apply (message, tag_ops, TAG_FLAG_MAILDIR_SYNC);
 
 notmuch_message_destroy (message);
 
@@ -193,7 +195,7 @@ add_file_to_database (notmuch_database_t *notmuch, const 
char *path)
 
 static notmuch_bool_t
 insert_message (void *ctx, notmuch_database_t *notmuch, int fdin,
-   const char *dir)
+   const char *dir, tag_op_list_t *tag_ops)
 {
 char *tmppath;
 char *newpath;
@@ -214,7 +216,7 @@ insert_message (void *ctx, notmuch_database_t *notmuch, int 
fdin,
return FALSE;
 }
 
-ret = add_file_to_database (notmuch, newpath);
+ret = add_file_to_database (notmuch, newpath, tag_ops);
 if (!ret) {
/* XXX maybe there should be an option to keep the file in maildir? */
unlink (newpath);
@@ -230,7 +232,11 @@ notmuch_insert_command (void *ctx, int argc, char *argv[])
 notmuch_config_t *config;
 notmuch_database_t *notmuch;
 const char *db_path;
+const char **new_tags;
+size_t new_tags_length;
+tag_op_list_t *tag_ops;
 char *maildir;
+unsigned int i;
 notmuch_bool_t ret;
 
 config = notmuch_config_open (ctx, NULL, NULL);
@@ -238,6 +244,17 @@ notmuch_insert_command (void *ctx, int argc, char *argv[])
return 1;
 
 db_path = notmuch_config_get_database_path (config);
+new_tags = notmuch_config_get_new_tags (config, new_tags_length);
+
+tag_ops = tag_op_list_create (ctx);
+if (tag_ops == NULL) {
+   fprintf (stderr, Out of memory.\n);
+   return 1;
+}
+for (i = 0; i  new_tags_length; i++) {
+   if (tag_op_list_append (tag_ops, new_tags[i], FALSE))
+   return 1;
+}
 
 maildir = talloc_asprintf (ctx, %s, db_path);
 if (! maildir) {
@@ -249,7 +266,7 @@ notmuch_insert_command (void *ctx, int argc, char *argv[])
   NOTMUCH_DATABASE_MODE_READ_WRITE, notmuch))
return 1;
 
-ret = insert_message (ctx, notmuch, STDIN_FILENO, maildir);
+ret = insert_message (ctx, notmuch, STDIN_FILENO, maildir, tag_ops);
 
 notmuch_database_destroy (notmuch);
 
-- 
1.7.12.1

___
notmuch mailing list
notmuch@notmuchmail.org
http://notmuchmail.org/mailman/listinfo/notmuch