X-Git-Url: https://git.wpitchoune.net/gitweb/?a=blobdiff_plain;f=src%2Fhtml.c;h=a6acc2f314d730a2feac9f389f8df649e494340f;hb=1378a843b2e5ce3fbc4429b07844cc37d42e0d8e;hp=75a562f04db9d4627b146d7417d40864dd74fbfb;hpb=2baa3ff01cb4db10a1a44fd0234ad3cfbe2a0e1b;p=ppastats.git diff --git a/src/html.c b/src/html.c index 75a562f..a6acc2f 100644 --- a/src/html.c +++ b/src/html.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2011-2012 jeanfi@gmail.com + * Copyright (C) 2011-2014 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 @@ -35,52 +35,13 @@ #include "lp.h" #include "lp_ws.h" #include "ppastats.h" +#include "str.h" -static char *footer; -static char *ppa_body; -static char *pkg_body; -static char *header; - -#define HTML_VERSION_TEMPLATE \ -"\n\ - \n\ - \n\ - \n\ - \n\ -\n\ - \n\ - \n\ - \n\ - \n\ - \n\ - \n\ - \n\ -

N/A

\n\ -
Version:
\n\ -

PPA: \n\ - \n\ - N/A/N/A\n\ -

\n\ -
\n\ -
\n\ -
\n\ -
\n\ -
\n\ - Distros:\n\ - \n\ -
\n\ -
\n" +static const char *footer; +static const char *ppa_body; +static const char *pkg_body; +static const char *pkg_version_body; +static const char *header; static char *path_new(const char *dir, const char *file, const char *suffixe) { @@ -100,19 +61,35 @@ static char *path_new(const char *dir, const char *file, const char *suffixe) return path; } -static const char *get_header() +static char *get_header(const char *title, const char *script) { const char *path; + char *res, *tmp; if (!header) { path = DEFAULT_WWW_DIR"/header.tpl"; header = file_get_content(path); - if (!header) + if (!header) { log_err("Failed to read header template: %s", path); + + return NULL; + } } - return header; + tmp = strdup(header); + res = strrep(tmp, "@SCRIPT@", script); + + if (res != tmp) + free(tmp); + + tmp = res; + res = strrep(tmp, "@TITLE@", title); + + if (res != tmp) + free(tmp); + + return res; } static const char *get_footer() @@ -130,6 +107,21 @@ static const char *get_footer() return footer; } +static const char *get_pkg_version_body() +{ + const char *path; + + if (!pkg_version_body) { + path = DEFAULT_WWW_DIR"/pkg_version.tpl"; + pkg_version_body = file_get_content(path); + + if (!pkg_version_body) + log_err("Failed to read package version template: %s", + path); + } + + return pkg_version_body; +} static const char *get_ppa_body() { const char *path; @@ -377,40 +369,6 @@ static json_object *ppa_to_json(struct ppa_stats *ppa) } static void -version_to_html(struct ppa_stats *ppa, - struct package_stats *pkg, - struct version_stats *version, - const char *dir) -{ - char *f_name, *path; - FILE *f; - const char *footer; - - f_name = malloc(strlen(pkg->name)+1+strlen(version->version)+1); - sprintf(f_name, "%s_%s", pkg->name, version->version); - - path = path_new(dir, f_name, ".html"); - f = fopen(path, "w"); - - if (!f) { - log_err(_("failed to open: %s"), path); - return ; - } - - fprintf(f, HTML_VERSION_TEMPLATE, - version_to_json(ppa, pkg, version)); - - footer = get_footer(); - if (footer) - fputs(footer, f); - - fclose(f); - - free(path); - free(f_name); -} - -static void create_html(const char *path, const char *title, const char *body_template, @@ -418,29 +376,36 @@ create_html(const char *path, { FILE *f; const char *footer; - const char *header; + char *header; + + f = NULL; - header = get_header(); + header = get_header(title, script); if (!header) { log_err(_("Failed to get the header template")); - return ; + goto on_error; } f = fopen(path, "w"); if (!f) { log_err(_("Failed to open: %s"), path); - return ; + goto on_error; } - fprintf(f, header, title, script); + fputs(header, f); fputs(body_template, f); footer = get_footer(); if (footer) fputs(footer, f); - fclose(f); + on_error: + if (header) + free(header); + + if (f) + fclose(f); } static char *ppa_display_name(const struct ppa_stats *ppa) @@ -483,6 +448,45 @@ index_to_html(struct ppa_stats *ppa, const char *dir) } static void +version_to_html(struct ppa_stats *ppa, + struct package_stats *pkg, + struct version_stats *version, + const char *dir) +{ + char *f_name, *path; + const char *body; + const char *script_tpl; + char *script, *json; + + body = get_pkg_version_body(); + if (!body) { + log_err("Failed to create package version page"); + return ; + } + + json = version_to_json(ppa, pkg, version); + if (!json) { + log_err("Failed to create package version page"); + return ; + } + + f_name = malloc(strlen(pkg->name)+1+strlen(version->version)+1); + sprintf(f_name, "%s_%s", pkg->name, version->version); + + path = path_new(dir, f_name, ".html"); + + script_tpl = "var data = %s;\n ppastats_ver();"; + script = malloc(strlen(script_tpl) - 2 + strlen(json) + 1); + sprintf(script, script_tpl, json); + + create_html(path, f_name, body, script); + + free(json); + free(path); + free(f_name); +} + +static void pkg_to_html(struct ppa_stats *ppa, struct package_stats *pkg, const char *dir) { char *path, *json_path, *script; @@ -543,7 +547,8 @@ ppa_to_html(const char *owner, const char *ppa, const char *package_status, const char *output_dir, - const int install_static_files) + const int install_static_files, + int ws_size) { struct ppa_stats *ppastats; char *path, *f_dst; @@ -558,6 +563,7 @@ ppa_to_html(const char *owner, "js/jquery.jqplot.min.js", DEFAULT_WWW_DIR"/excanvas.js", "js/excanvas.js", DEFAULT_WWW_DIR"/ppastats.css", "css/ppastats.css", + DEFAULT_WWW_DIR"/wpitchoune.css", "css/wpitchoune.css", DEFAULT_WWW_DIR"/jquery.jqplot.min.css", "css/jquery.jqplot.min.css" }; @@ -570,7 +576,7 @@ ppa_to_html(const char *owner, mkdir(css_dir, 0777); mkdir(js_dir, 0777); - for (i = 0; i < 7; i++) { + for (i = 0; i < 8; i++) { f_dst = path_append(output_dir, www_files[2*i+1]); log_debug(_("Copying %s %s"), www_files[2*i], f_dst); @@ -582,7 +588,7 @@ ppa_to_html(const char *owner, free(js_dir); } - ppastats = create_ppa_stats(owner, ppa, package_status); + ppastats = create_ppa_stats(owner, ppa, package_status, ws_size); path = path_new(output_dir, "ppa", ".html");