X-Git-Url: http://git.wpitchoune.net/gitweb/?a=blobdiff_plain;f=src%2Flp_json.c;h=f050307b28386ac00a23ce30335c1f89ac8548e5;hb=9875b72f4ac0b5a1cc7fe79c4f7037bd0441e18a;hp=6f251f3ed5b42ceba9dd9381c621c2cd1a0ced44;hpb=12cf1b3a4702e58c5797be638ab48e899ef932a4;p=ppastats.git diff --git a/src/lp_json.c b/src/lp_json.c index 6f251f3..f050307 100644 --- a/src/lp_json.c +++ b/src/lp_json.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2011-2012 jeanfi@gmail.com + * Copyright (C) 2011-2014 jeanfi@gmail.com * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -23,8 +23,9 @@ #include #include -#include "lp_json.h" -#include "lp_ws.h" +#include +#include +#include static time_t json_to_time(json_object *json) { @@ -36,6 +37,8 @@ static time_t json_to_time(json_object *json) if (!str) return -1; + + memset(&tm, 0, sizeof(struct tm)); tm.tm_isdst = -1; ret = strptime(str, "%FT%T", &tm); @@ -45,16 +48,20 @@ static time_t json_to_time(json_object *json) return -1; } -static json_object *time_to_json(time_t t) +json_object *time_to_json(time_t t) { char *str; + json_object *j; - str = time_to_str(t); + str = time_to_ISO8601_time(&t); - if (str) - return json_object_new_string(str); - else + if (str) { + j = json_object_new_string(str); + free(str); + return j; + } else { return NULL; + } } static struct bpph *json_to_bpph(json_object *o) @@ -100,7 +107,7 @@ static struct bpph *json_to_bpph(json_object *o) static json_object *bpph_to_json(struct bpph *bpph) { - json_object *json; + json_object *json, *time; json = json_object_new_object(); @@ -130,8 +137,9 @@ static json_object *bpph_to_json(struct bpph *bpph) json_object_object_add (json, "status", json_object_new_string(bpph->status)); + time = time_to_json(bpph->date_created); json_object_object_add - (json, "date_created", time_to_json(bpph->date_created)); + (json, "date_created", time); return json; } @@ -141,7 +149,7 @@ struct distro_arch_series *json_object_to_distro_arch_series(json_object *o) const char *display_name; const char *title; const char *architecture_tag; - boolean is_nominated_arch_indep; + json_bool is_nominated_arch_indep; const char *distroseries_link; display_name = json_object_get_string @@ -252,6 +260,7 @@ json_object_to_daily_download_total(const char *d, json_object *o_c) result = malloc(sizeof(struct daily_download_total)); result->count = json_object_get_int(o_c); + memset(&result->date, 0, sizeof(struct tm)); strptime(d, "%FT%T%z", &result->date); return result; @@ -292,3 +301,41 @@ json_object_to_daily_download_totals(json_object *o) return result; } + +struct json_object *date_to_json(struct tm *tm) +{ + json_object *json; + + json = json_object_new_array(); + json_object_array_add(json, json_object_new_int(tm->tm_year+1900)); + json_object_array_add(json, json_object_new_int(tm->tm_mon+1)); + json_object_array_add(json, json_object_new_int(tm->tm_mday)); + + return json; +} + +json_object *ddts_to_json(struct daily_download_total **ddts) +{ + json_object *json_ddt, *json_ddts; + struct daily_download_total *ddt; + + json_ddts = json_object_new_array(); + + while (ddts && *ddts) { + ddt = *ddts; + + json_ddt = json_object_new_object(); + json_object_object_add(json_ddt, + "value", + json_object_new_int(ddt->count)); + json_object_object_add(json_ddt, + "time", + date_to_json(&ddt->date)); + + json_object_array_add(json_ddts, json_ddt); + + ddts++; + } + + return json_ddts; +}