X-Git-Url: http://git.wpitchoune.net/gitweb/?p=ppastats.git;a=blobdiff_plain;f=src%2Fhtml.c;fp=src%2Fhtml.c;h=314b9a03f761c9548600d01c8222f23b05e7c7ae;hp=aa4c6f19401e60a1bef86c2f1beb46a725af0bfa;hb=486c6a0380edcdedbed9b3d27427f5a5c6b8ae45;hpb=cacd81cd1065cf9a145bb2fbe66c383ad3c90206 diff --git a/src/html.c b/src/html.c index aa4c6f1..314b9a0 100644 --- a/src/html.c +++ b/src/html.c @@ -21,184 +21,46 @@ #include "chart.h" #include "html.h" -#include "list.h" #include "lp_ws.h" #include "ppastats.h" -#include - #include #include -#define HTML_TEMPLATE \ -"\n\ - \n\ - \n\ - \n\ - \n\ -\n\ - \n\ -
\n\ - \n\ -\n" - -static json_object * -get_count_array(json_object *data, const char *date) -{ - int n, i; - json_object *o, *o_date; - const char *date2; - - n = json_object_array_length(data); - for (i = 0; i < n; i++) { - o = json_object_array_get_idx(data, i); - o_date = json_object_array_get_idx(o, 0); - date2 = json_object_get_string(o_date); - - if (!strcmp(date2, date)) - return o; - } - - return NULL; -} - -static json_object *count_array_new(json_object *data, const char *d, int n) -{ - json_object *result = json_object_new_array(); - int i; - - json_object_array_add(result, json_object_new_string(d)); - - for (i = 0; i < n; i++) - json_object_array_add(result, json_object_new_int(0)); - - json_object_array_add(data, result); - - return result; -} - -static char * -build_package_display_name(struct binary_package_publishing_history *b) +static char *get_path(const char *dir, const char *file) { - char *str = malloc(strlen(b->binary_package_name)+ - 1+ - strlen(b->binary_package_version)+ - 1); + char *path = malloc(strlen(dir)+1+ + strlen(file)+ + strlen(".html")+ + 1); - sprintf(str, "%s-%s", - b->binary_package_name, b->binary_package_version); + strcpy(path, dir); + strcat(path, "/"); + strcat(path, file); + strcat(path, ".html"); - return str; + return path; } -static char * -build_addcolums_str(struct binary_package_publishing_history **list) +static void +packages_to_html(struct package_stats **packages, + const char *dir) { - struct binary_package_publishing_history **cur = list; - struct binary_package_publishing_history *b; - char *str, *tmpstr; - char *dname; - - str = malloc(1); - *str = '\0'; - const char *pattern = "%s data.addColumn('number', '%s');\n"; + struct package_stats **cur; + struct package_stats *p; + char *path; + cur = packages; while (*cur) { - b = *cur; - dname = build_package_display_name(b); - - tmpstr = malloc(strlen(str)+strlen(pattern)+strlen(dname)+1); - sprintf(tmpstr, pattern, str, dname); - - free(str); - free(dname); + p = *cur; - str = tmpstr; + path = get_path(dir, p->name); + generate_chart(path, p->name, p->name, + p->daily_download_totals); + free(path); cur++; } - - return str; -} - -static char * -build_data_str(struct binary_package_publishing_history **list) -{ - int n, i; - json_object *data; - char *str; - - n = list_length((void **)list); - - data = json_object_new_array(); - for (i = 0; i < n; i++) { - struct binary_package_publishing_history *binary; - const struct distro_arch_series *dist; - struct daily_download_total **totals; - struct daily_download_total **t_cur; - - binary = list[i]; - dist = get_distro_arch_series(binary->distro_arch_series_link); - - totals = get_daily_download_totals(binary->self_link); - - t_cur = totals; - while (*t_cur) { - char *d = malloc(10+1); - json_object *data2; - - sprintf(d, "%d-%02d-%02d", - (*t_cur)->date.tm_year+1900, - (*t_cur)->date.tm_mon+1, - (*t_cur)->date.tm_mday); - - data2 = get_count_array(data, d); - - if (!data2) - data2 = count_array_new(data, d, n); - - json_object_array_put_idx - (data2, - i+1, json_object_new_int((*t_cur)->count)); - - free(d); - t_cur++; - } - - daily_download_total_list_free(totals); - } - - str = strdup(json_object_to_json_string(data)); - - json_object_put(data); - - return str; -} - -static char *get_path(const char *dir, const char *file) -{ - char *path = malloc(strlen(dir)+1+strlen(file)+1); - - strcpy(path, dir); - strcat(path, "/"); - strcat(path, file); - - return path; } void @@ -207,44 +69,18 @@ ppa_to_html(const char *owner, const char *package_status, const char *output_dir) { - struct binary_package_publishing_history **list; - char *archive_url, *addcolumns_str, *data_str, *path; - FILE *f; + char *path; struct ppa_stats *ppastats; struct daily_download_total **totals; ppastats = create_ppa_stats(owner, ppa, package_status); totals = ppastats->daily_download_totals; - path = get_path(output_dir, "ppa.html"); + path = get_path(output_dir, "ppa"); generate_chart(path, "PPA Statistics", ppa, totals); free(path); - archive_url = get_archive_url(owner, ppa); - list = get_binary_package_publishing_history_list(archive_url, - package_status); - free(archive_url); - - if (!list) { - fprintf(stderr, "ERROR: Failed to retrieve PPA information\n"); - exit(EXIT_FAILURE); - } - - addcolumns_str = build_addcolums_str(list); - data_str = build_data_str(list); - - path = get_path(output_dir, "index.html"); - f = fopen(path, "w"); - if (f) { - fprintf(f, HTML_TEMPLATE, addcolumns_str, data_str); - fclose(f); - } else { - fprintf(stderr, "ERROR: failed to write %s\n", path); - } - free(path); + packages_to_html(ppastats->packages, output_dir); - free(addcolumns_str); - free(data_str); - binary_package_publishing_history_list_free(list); ppa_stats_free(ppastats); }