X-Git-Url: http://git.wpitchoune.net/gitweb/?a=blobdiff_plain;f=src%2Flp_json.c;h=561ca063f7858f37ea303d4b0f91d49d7d9dcb90;hb=1b5e970c9fa6bda525f8c8ab5d2ea001084c7db7;hp=d6a21795b18752124205d93ba16dba24b41200a6;hpb=5ed73c995d6fcb5f3b4626bf7ebf609fc52f5d94;p=ppastats.git diff --git a/src/lp_json.c b/src/lp_json.c index d6a2179..561ca06 100644 --- a/src/lp_json.c +++ b/src/lp_json.c @@ -1,21 +1,21 @@ /* - Copyright (C) 2011 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 published by - the Free Software Foundation; either version 2 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, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301 USA -*/ + * Copyright (C) 2011-2012 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 + * published by the Free Software Foundation; either version 2 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, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + * 02110-1301 USA + */ #define _XOPEN_SOURCE #include @@ -25,6 +25,7 @@ #include #include "lp_json.h" +#include "lp_ws.h" struct binary_package_publishing_history * json_object_to_binary_package_publishing_history(json_object *o) @@ -33,6 +34,7 @@ json_object_to_binary_package_publishing_history(json_object *o) const char *binary_package_version; const char *distro_arch_series_link; const char *self_link; + int architecture_specific; binary_package_name = json_object_get_string (json_object_object_get(o, "binary_package_name")); @@ -46,10 +48,17 @@ json_object_to_binary_package_publishing_history(json_object *o) self_link = json_object_get_string (json_object_object_get(o, "self_link")); + if (json_object_get_boolean + (json_object_object_get(o, "architecture_specific"))) + architecture_specific = 1; + else + architecture_specific = 0; + return binary_package_publishing_history_new(binary_package_name, binary_package_version, distro_arch_series_link, - self_link); + self_link, + architecture_specific); } struct distro_arch_series *json_object_to_distro_arch_series(json_object *o) @@ -57,6 +66,9 @@ 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; + const char *distroseries_link; + display_name = json_object_get_string (json_object_object_get(o, "display_name")); @@ -67,17 +79,52 @@ struct distro_arch_series *json_object_to_distro_arch_series(json_object *o) architecture_tag = json_object_get_string (json_object_object_get(o, "architecture_tag")); + distroseries_link = json_object_get_string + (json_object_object_get(o, "distroseries_link")); + + is_nominated_arch_indep = json_object_get_boolean + (json_object_object_get(o, "is_nominated_arch_indep")); + return distro_arch_series_new(display_name, title, - architecture_tag); + architecture_tag, + is_nominated_arch_indep, + distroseries_link); +} + +struct distro_series *json_object_to_distro_series(json_object *o) +{ + const char *displayname; + const char *title; + const char *name; + const char *version; + + displayname = json_object_get_string + (json_object_object_get(o, "displayname")); + + title = json_object_get_string + (json_object_object_get(o, "title")); + + version = json_object_get_string + (json_object_object_get(o, "version")); + + name = json_object_get_string + (json_object_object_get(o, "name")); + + return distro_series_new(name, + version, + title, + displayname); } struct binary_package_publishing_history * * json_object_to_binary_package_publishing_history_list(json_object *o) { json_object *o_entries; - int i, n; + int i, n, i2; struct binary_package_publishing_history **entries; + struct binary_package_publishing_history *h; + const struct distro_arch_series *distro; o_entries = json_object_object_get(o, "entries"); @@ -89,11 +136,24 @@ json_object_to_binary_package_publishing_history_list(json_object *o) entries = malloc (sizeof(struct binary_package_publishing_history *)*(n+1)); - for (i = 0; i < n; i++) { - entries[i] = json_object_to_binary_package_publishing_history + for (i = 0, i2 = 0; i < n; i++) { + h = json_object_to_binary_package_publishing_history (json_object_array_get_idx(o_entries, i)); + + if (!h->architecture_specific) { + distro = get_distro_arch_series + (h->distro_arch_series_link); + + if (!distro || !distro->is_nominated_arch_indep) { + binary_package_publishing_history_free(h); + continue ; + } + } + + entries[i2] = h; + i2++; } - entries[n] = NULL; + entries[i2] = NULL; return entries; } @@ -114,9 +174,13 @@ json_object_to_daily_download_total(const char *d, json_object *o_c) static int json_object_get_fields_count(json_object *o) { int n = 0; + struct lh_entry *entry; - json_object_object_foreach(o, key, val) + entry = json_object_get_object(o)->head; + while (entry) { + entry = entry->next; n++; + } return n; }