X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=notmuch-search-tags.c;h=7a1305e2fed98368ae42995a1bf3f28fcaae997e;hp=1201165067d2746ea0aaaba59c3b17efa99a012e;hb=c25bc03dc60846090d230cdad21e39faccce35ff;hpb=f8baa023353e8d45a1a2bb90ab12d4ad38765ad9 diff --git a/notmuch-search-tags.c b/notmuch-search-tags.c index 12011650..7a1305e2 100644 --- a/notmuch-search-tags.c +++ b/notmuch-search-tags.c @@ -21,34 +21,31 @@ #include "notmuch-client.h" -static int -list_all_tags (notmuch_database_t* db) +static void +print_tags (notmuch_tags_t *tags) { - notmuch_tags_t* tags; - const char* t; + const char *t; - if ((tags = notmuch_database_get_all_tags (db)) == NULL) { - fprintf (stderr, "Error while obtaining tags from the database.\n"); - return 1; - } - - while((t = notmuch_tags_get (tags))) { + while ((t = notmuch_tags_get (tags))) { printf ("%s\n", t); notmuch_tags_advance (tags); } - - notmuch_tags_destroy (tags); - return 0; } int notmuch_search_tags_command (void *ctx, int argc, char *argv[]) { + notmuch_messages_t *msgs; + notmuch_tags_t *tags; notmuch_config_t *config; notmuch_database_t *db; + notmuch_query_t *query; + char *query_str; + tags = NULL; config = NULL; db = NULL; + query = NULL; if ((config = notmuch_config_open (ctx, NULL, NULL)) == NULL) { goto error; @@ -60,12 +57,42 @@ notmuch_search_tags_command (void *ctx, int argc, char *argv[]) goto error; } - if (list_all_tags (db) != 0) goto error; + if (argc > 0) { + if ((query_str = query_string_from_args (ctx, argc, argv)) == NULL) { + fprintf (stderr, "Out of memory.\n"); + goto error; + } + + if (*query_str == '\0') { + fprintf (stderr, "Error: Invalid search string.\n"); + goto error; + } + + if ((query = notmuch_query_create (db, query_str)) == NULL) { + fprintf (stderr, "Out of memory\n"); + goto error; + } + + + msgs = notmuch_query_search_messages (query); + if ((tags = notmuch_messages_collect_tags (msgs)) == NULL) goto error; + } else { + if ((tags = notmuch_database_get_all_tags (db)) == NULL) { + fprintf (stderr, "Error while getting tags from the database.\n"); + goto error; + } + } + + print_tags (tags); + notmuch_tags_destroy (tags); + if (query) notmuch_query_destroy (query); notmuch_database_close (db); return 0; error: + if (tags) notmuch_tags_destroy (tags); + if (query) notmuch_query_destroy (query); if (db) notmuch_database_close (db); return 1; }