X-Git-Url: https://git.wpitchoune.net/gitweb/?a=blobdiff_plain;f=src%2Flp_ws.c;h=11092c4e3228566928ab8addb49735049eacb4fe;hb=a9435991d03d0bd9e81d6cb6003013bec4b2e6e9;hp=6010922236b6b373db1dfd6485697630887f5f90;hpb=5c8cf405dfb5f872f4eb20dcc78bf3df7f175e8d;p=ppastats.git diff --git a/src/lp_ws.c b/src/lp_ws.c index 6010922..11092c4 100644 --- a/src/lp_ws.c +++ b/src/lp_ws.c @@ -20,6 +20,7 @@ #include #define _(String) gettext(String) +#include #include #include @@ -58,17 +59,43 @@ static json_object *get_json_object(const char *url) return NULL; } -#define json_object_to_bpph_list \ -json_object_to_binary_package_publishing_history_list +static char *get_bpph_list_cache_key(const char *archive_url) +{ + char *key; + + key = malloc(strlen(archive_url + 7) + strlen("/bpph") + 1); + sprintf(key, "%s/bpph", archive_url + 7); + + return key; +} -struct binary_package_publishing_history * * -get_binary_package_publishing_history_list(const char *archive_url, - const char *pkg_status) +static struct bpph **get_bpph_list_from_cache(const char *key) { - struct json_object *o_next; - char *url; - json_object *o; - void **result = NULL; + char *content; + struct bpph **list; + json_object *json; + + content = fcache_get(key); + if (!content) + return NULL; + + json = json_tokener_parse(content); + if (!json) + return NULL; + + list = json_object_to_bpph_list(json); + + json_object_put(json); + free(content); + + return list; +} + +struct bpph **get_bpph_list(const char *archive_url, const char *pkg_status) +{ + char *url, *key; + struct bpph **result = NULL; + struct json_object *o, *bpph_json, *o_next; url = malloc(strlen(archive_url)+ strlen(QUERY_GET_PUBLISHED_BINARIES)+ @@ -83,6 +110,9 @@ get_binary_package_publishing_history_list(const char *archive_url, strcat(url, pkg_status); } + key = get_bpph_list_cache_key(archive_url); + result = get_bpph_list_from_cache(key); + while (url) { o = get_json_object(url); free(url); @@ -91,8 +121,8 @@ get_binary_package_publishing_history_list(const char *archive_url, if (!o) break; - result = list_append_list(result, - (void **)json_object_to_bpph_list(o)); + result = bpph_list_append_list(result, + json_object_to_bpph_list(o)); o_next = json_object_object_get(o, "next_collection_link"); @@ -102,7 +132,14 @@ get_binary_package_publishing_history_list(const char *archive_url, json_object_put(o); } - return (struct binary_package_publishing_history **)result; + bpph_json = bpph_list_to_json(result); + + fcache_put(key, json_object_to_json_string(bpph_json)); + + json_object_put(bpph_json); + free(key); + + return result; } int get_download_count(const char *archive_url) @@ -139,7 +176,7 @@ const struct distro_arch_series *get_distro_arch_series(const char *url) return (struct distro_arch_series *)distro; content = get_url_content(url, 1); - + if (!content) return NULL;