X-Git-Url: https://git.wpitchoune.net/gitweb/?p=ppastats.git;a=blobdiff_plain;f=src%2Flp_ws.c;h=11092c4e3228566928ab8addb49735049eacb4fe;hp=a813b3396bae030f87c8e48c0aa9d1963fea1aa9;hb=a9435991d03d0bd9e81d6cb6003013bec4b2e6e9;hpb=48adae7cac47f09a5ac0ce7c3b53359b340a1110 diff --git a/src/lp_ws.c b/src/lp_ws.c index a813b33..11092c4 100644 --- a/src/lp_ws.c +++ b/src/lp_ws.c @@ -59,9 +59,41 @@ static json_object *get_json_object(const char *url) return NULL; } +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; +} + +static struct bpph **get_bpph_list_from_cache(const char *key) +{ + 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, *bpph_key; + char *url, *key; struct bpph **result = NULL; struct json_object *o, *bpph_json, *o_next; @@ -78,6 +110,9 @@ struct bpph **get_bpph_list(const char *archive_url, const char *pkg_status) 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); @@ -86,9 +121,8 @@ struct bpph **get_bpph_list(const char *archive_url, const char *pkg_status) if (!o) break; - result = (struct bpph **)list_append_list - ((void **)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"); @@ -100,12 +134,10 @@ struct bpph **get_bpph_list(const char *archive_url, const char *pkg_status) bpph_json = bpph_list_to_json(result); - bpph_key = malloc(strlen(archive_url + 7) + strlen("/bpph") + 1); - sprintf(bpph_key, "%s/bpph", archive_url + 7); - fcache_put(bpph_key, json_object_to_json_string(bpph_json)); + fcache_put(key, json_object_to_json_string(bpph_json)); json_object_put(bpph_json); - free(bpph_key); + free(key); return result; }