/* notmuch - Not much of an email program, (just index and search) * * Copyright © 2009 Carl Worth * Copyright © 2009 Jan Janak * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see http://www.gnu.org/licenses/ . * * Authors: Carl Worth * Jan Janak */ #include "notmuch-client.h" enum list_cmd { LIST_TAGS }; static int list_all_tags(notmuch_database_t* db) { notmuch_tags_t* tags; const char* t; if ((tags = notmuch_database_get_tags(db)) == NULL) { fprintf(stderr, "Error while obtaining tags from the database.\n"); return 1; } while((t = notmuch_tags_get(tags))) { printf("%s\n", t); notmuch_tags_advance(tags); } notmuch_tags_destroy(tags); return 0; } int notmuch_list_command (void *ctx, int argc, char *argv[]) { notmuch_config_t *config; notmuch_database_t *db; enum list_cmd cmd; config = NULL; db = NULL; if (argc < 1) { fprintf(stderr, "Error: notmuch list requires at least one parameter.\n"); fprintf(stderr, "(See notmuch help list)\n"); goto error; } if (!strcmp(argv[0], "tags")) { cmd = LIST_TAGS; } else { fprintf(stderr, "Sub-command '%s' not supported.\n", argv[0]); goto error; } if ((config = notmuch_config_open (ctx, NULL, NULL)) == NULL) { goto error; } db = notmuch_database_open (notmuch_config_get_database_path (config)); if (db == NULL) { goto error; } switch(cmd) { case LIST_TAGS: if (list_all_tags(db) != 0) goto error; break; default: fprintf(stderr, "Unsupported command: bug in notmuch_list_command.\n"); goto error; } notmuch_database_close (db); return 0; error: if (db) notmuch_database_close(db); return 1; }