From: Jean-Philippe Orsini Date: Sat, 30 Jun 2012 19:52:31 +0000 (+0000) Subject: refactoring X-Git-Tag: v1.3.0~67 X-Git-Url: http://git.wpitchoune.net/gitweb/?p=ppastats.git;a=commitdiff_plain;h=abe6822b309d92edd1cc6bcf488eb584fc30c7bb refactoring reintroduced support of pkg filtering by status --- diff --git a/src/lp_ws.c b/src/lp_ws.c index ecc95cc..f57aa3b 100644 --- a/src/lp_ws.c +++ b/src/lp_ws.c @@ -35,8 +35,9 @@ #include "lp_json.h" #include "ppastats.h" -static const char * -QUERY_GET_PUBLISHED_BINARIES = "?ws.op=getPublishedBinaries&ws.size=150"; +/** Default ws.size value for the getPublishedBinaries request. */ +static const int DEFAULT_WS_SIZE = 150; + static const char *QUERY_GET_DOWNLOAD_COUNT = "?ws.op=getDownloadCount"; static const char * QUERY_GET_DAILY_DOWNLOAD_TOTALS = "?ws.op=getDailyDownloadTotals"; @@ -111,42 +112,69 @@ static char *get_last_creation_date(struct bpph **list) return NULL; } +/** + * 'archive_url': LP URL of the archive. + * 'size': size of the reply array. Between 1-300, else default value is used. + */ +static char *create_query_get_bpph(const char *archive_url, + const char *status, + int size) +{ + static const char *default_opt = "?ws.op=getPublishedBinaries&ws.size="; + static const char *status_opt = "&status="; + char *url; + int n; + + if (size < 1 || size > 300) + size = DEFAULT_WS_SIZE; + + n = strlen(archive_url) + strlen(default_opt) + 3 + 1; + + if (status) + n += strlen(status_opt) + strlen(status); + + url = malloc(n); + sprintf(url, "%s%s%d", archive_url, default_opt, size); + + if (status) { + strcat(url, status_opt); + strcat(url, status); + } + + return url; +} + struct bpph **get_bpph_list(const char *archive_url, const char *pkg_status) { char *url, *key, *tmp; struct bpph **result; struct json_object *o, *bpph_json, *o_next; - char *created_since_date; + char *date; int ok; - url = malloc(strlen(archive_url) - + strlen(QUERY_GET_PUBLISHED_BINARIES) - + 1); - strcpy(url, archive_url); - strcat(url, QUERY_GET_PUBLISHED_BINARIES); + url = create_query_get_bpph(archive_url, pkg_status, -1); key = get_bpph_list_cache_key(archive_url); result = get_bpph_list_from_cache(key); if (result) { - created_since_date = get_last_creation_date(result); + date = get_last_creation_date(result); - if (created_since_date) { - printf("Update package since: %s\n", - created_since_date); + if (date) { + printf("Update package since: %s\n", date); tmp = malloc(strlen(url) + strlen("&created_since_date=") - + strlen(created_since_date)+1); + + strlen(date)+1); strcpy(tmp, url); strcat(tmp, "&created_since_date="); - strcat(tmp, created_since_date); + strcat(tmp, date); free(url); url = tmp; - free(created_since_date); + free(date); } }