Return the status of token removal in auth_logout
[blerg.git] / tools / blergtool.c
index cc78c7d..c689d2f 100644 (file)
@@ -1,10 +1,26 @@
+/* Blerg is (C) 2011 The Dominion of Awesome, and is distributed under a
+ * BSD-style license.  Please see the COPYING file for details.
+ */
 #include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
 #include "database.h"
+#include "subscription.h"
 #include "tags.h"
 
 void help() {
-       printf("Usage: blergtool <store|fetch> <storename> [record]\n");
+       printf(
+         "Usage: blergtool <command> [args]\n"
+         "\n"
+         "Where command is one of:\n"
+         "\n"
+         "  blergtool store <storename>\n"
+         "  blergtool fetch <storename> [record]\n"
+         "  blergtool mute <storename>\n"
+         "  blergtool unmute <storename>\n"
+         "  blergtool subscribe <storename> <target>\n"
+         "  blergtool unsubscribe <storename> <target>\n"
+       );
 }
 
 int main(int argc, char *argv[]) {
@@ -13,6 +29,10 @@ int main(int argc, char *argv[]) {
                exit(1);
        }
 
+       if (!blerg_init()) {
+               exit(2);
+       }
+
        if (strncmp(argv[1], "store", 5) == 0) {
                char *store = argv[2];
                struct blerg *f = blerg_open(store);
@@ -47,23 +67,64 @@ int main(int argc, char *argv[]) {
 
                char *data;
                int size;
-               blerg_fetch(f, record, &data, &size);
+               if (blerg_fetch(f, record, &data, &size)) {
+                       fwrite(data, 1, size, stdout);
+                       free(data);
+               }
                blerg_close(f);
-               fwrite(data, 1, size, stdout);
-               free(data);
        } else if (strncmp(argv[1], "list", 4) == 0) {
                char *tag = argv[2];
                int count = 50;
-               struct tag *list = tag_list(tag, 0, &count, -1);
+               struct blergref *list = tag_list(tag, 0, &count, -1);
                if (list == NULL) {
                        printf("No entries");
                } else {
                        int i;
                        for (i = 0; i < count; i++) {
-                               printf("%s %d\n", list[i].author, list[i].record);
+                               printf("%s %llu\n", list[i].author, list[i].record);
                        }
                        free(list);
                }
+       } else if (strncmp(argv[1], "mute", 4) == 0) {
+               char *store = argv[2];
+               struct blerg *f = blerg_open(store);
+               if (!f) {
+                       printf("Blerg open failed\n");
+                       exit(1);
+               }
+
+               blerg_set_status(f, BLERGSTATUS_MUTED, 1);
+               blerg_close(f);
+       } else if (strncmp(argv[1], "unmute", 6) == 0) {
+               char *store = argv[2];
+               struct blerg *f = blerg_open(store);
+               if (!f) {
+                       printf("Blerg open failed\n");
+                       exit(1);
+               }
+
+               blerg_set_status(f, BLERGSTATUS_MUTED, 0);
+               blerg_close(f);
+       } else if (strncmp(argv[1], "subscribe", 9) == 0) {
+               if (argc < 4) {
+                       printf("Not enough arguments for subscribe\n");
+                       help();
+                       exit(1);
+               }
+               if (!subscription_add(argv[2], argv[3])) {
+                       printf("Could not subscribe %s to %s\n", argv[2], argv[3]);
+                       exit(1);
+               }
+       } else if (strncmp(argv[1], "unsubscribe", 11) == 0) {
+               if (argc < 4) {
+                       printf("Not enough arguments for unsubscribe\n");
+                       help();
+                       exit(1);
+               }
+               if (!subscription_remove(argv[2], argv[3])) {
+                       printf("Could not subscribe %s to %s\n", argv[2], argv[3]);
+                       exit(1);
+               }
        } else {
                help();
        }