Add brief mode of JSON generation for blerglatest
authorChip Black <bytex64@bytex64.net>
Wed, 2 Feb 2011 23:17:39 +0000 (17:17 -0600)
committerChip Black <bytex64@bytex64.net>
Wed, 2 Feb 2011 23:17:39 +0000 (17:17 -0600)
cgi/cgi_blerg.c
common/json.c
common/json.h
http/http_blerg.c
tools/blerglatest.c

index 737910c..9974513 100644 (file)
@@ -33,7 +33,7 @@ void respond_for_range(struct blerg *b, uint64_t from, uint64_t to) {
        yajl_gen_array_open(g);
 
        for (i = to; i != from - 1; i--) {
-               json_generate_one_record(g, NULL, b, i);
+               json_generate_one_record(g, NULL, b, i, 0);
                yajl_gen_get_buf(g, &ybuf, &len);
                fwrite(ybuf, len, 1, stdout);
                yajl_gen_clear(g);
@@ -61,7 +61,7 @@ void respond_taglist(struct tag *results, int i) {
        while (i >= 0) {
                b = blerg_open(results[i].author);
                if (b != NULL) {
-                       json_generate_one_record(g, results[i].author, b, results[i].record);
+                       json_generate_one_record(g, results[i].author, b, results[i].record, 0);
                        blerg_close(b);
                }
                yajl_gen_get_buf(g, &ybuf, &len);
index 5494e4a..eebea2c 100644 (file)
@@ -8,7 +8,7 @@
 #include "database.h"
 #include "json.h"
 
-void json_generate_one_record(yajl_gen g, const char *author, struct blerg *b, uint64_t record) {
+void json_generate_one_record(yajl_gen g, const char *author, struct blerg *b, uint64_t record, int brief) {
        char *data;
        char number[21];
        int len;
@@ -18,6 +18,16 @@ void json_generate_one_record(yajl_gen g, const char *author, struct blerg *b, u
                return;
        }
 
+       if (brief && len > 150) {
+               len = 150;
+               /* This is a bit of a hackish way to add an ellipsis, and will
+                * probably cause weird results if we overwrite part of a UTF-8
+                * char */
+               data[149] = '.';
+               data[148] = '.';
+               data[147] = '.';
+       }
+
        yajl_gen_map_open(g);
        if (author != NULL) {
                yajl_gen_string(g, "author", 6);
index 78cb4d7..8a73e4c 100644 (file)
@@ -4,6 +4,6 @@
 #ifndef _JSON_H
 #define _JSON_H
 
-void json_generate_one_record(yajl_gen g, const char *author, struct blerg *b, uint64_t record);
+void json_generate_one_record(yajl_gen g, const char *author, struct blerg *b, uint64_t record, int brief);
 
 #endif /* _JSON_H */
index 9fc72a7..6fd8f11 100644 (file)
@@ -75,7 +75,7 @@ ssize_t GET_generate_list(void *cls, uint64_t pos, char *buf, size_t max) {
        }
 
        /* Snarf one record */
-       json_generate_one_record(gs->g, NULL, gs->b, gs->entries[gs->i]);
+       json_generate_one_record(gs->g, NULL, gs->b, gs->entries[gs->i], 0);
 
        if (gs->i == 0) {
                yajl_gen_array_close(gs->g);
@@ -136,7 +136,7 @@ ssize_t GET_generate_taglist(void *cls, uint64_t pos, char *buf, size_t max) {
        /* Snarf one record */
        b = blerg_open(ts->results[ts->i].author);
        if (b != NULL) {
-               json_generate_one_record(ts->g, ts->results[ts->i].author, b, ts->results[ts->i].record);
+               json_generate_one_record(ts->g, ts->results[ts->i].author, b, ts->results[ts->i].record, 0);
                blerg_close(b);
        }
 
index a2d1c67..727eb18 100644 (file)
@@ -124,7 +124,7 @@ void latest_records(yajl_gen g) {
                }
                uint64_t record_count = blerg_get_record_count(b);
                if (record_count > 0)
-                       json_generate_one_record(g, things->arr[i].name, b, record_count - 1);
+                       json_generate_one_record(g, things->arr[i].name, b, record_count - 1, 1);
                blerg_close(b);
        }
        yajl_gen_array_close(g);