X-Git-Url: http://git.wpitchoune.net/gitweb/?a=blobdiff_plain;f=src%2Fhtml.c;h=f2d39bb39dc4782329485d44cd6758bb0622428f;hb=904cc6ab0bff6e4b31d5782839c07aeef0d95b6c;hp=e79c2a4cb45d239397a98c9bfe53bf1bdb4ef7f7;hpb=49b52ead6d48488a4c1f90f372564c834da803cb;p=ppastats.git diff --git a/src/html.c b/src/html.c index e79c2a4..f2d39bb 100644 --- a/src/html.c +++ b/src/html.c @@ -1,21 +1,21 @@ /* - Copyright (C) 2011 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 published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301 USA -*/ + * Copyright (C) 2011-2012 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 + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + * 02110-1301 USA + */ #include #define _(String) gettext(String) @@ -36,118 +36,21 @@ #include "lp_ws.h" #include "ppastats.h" -#define HTML_FOOTER \ -"
Generated by \ -ppastats
\n\ - \n\ -" - -#define HTML_PKG_TEMPLATE \ -"

N/A

\n\ -
\n\ -
\n\ -
\n\ -
\n\ -
\n\ - PPA: \n\ - \n\ - N/A/\n\ - N/A\n\ - \n\ -\n\ -
Distros:
\n\ -
Versions:
\n\ -
" - -#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\ -%s" - -#define HTML_HEADER \ -"\n\ - \n\ - %s\n\ - \n\ - \n\ - \n\ -\n\ - \n\ - \n\ - \n\ - \n\ - \n\ - \n\ - \n" - -#define HTML_INDEX_TEMPLATE \ -"

    N/A

    \n\ -
    \n\ -
    \n\ - Packages:\n\ -
      \n\ -
      \n\ -
      \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) { - char *path = malloc(strlen(dir)+1+ - strlen(file)+ - strlen(".html")+ - (suffixe ? strlen(suffixe) : 0) + - 1); + char *path; + + /* [dir]/[file][suffixe] */ + path = malloc(strlen(dir)+1+ + strlen(file)+ + (suffixe ? strlen(suffixe) : 0) + + 1); strcpy(path, dir); strcat(path, "/"); @@ -157,6 +60,81 @@ static char *path_new(const char *dir, const char *file, const char *suffixe) return path; } +static const char *get_header() +{ + const char *path; + + if (!header) { + path = DEFAULT_WWW_DIR"/header.tpl"; + header = file_get_content(path); + + if (!header) + log_err("Failed to read header template: %s", path); + } + + return header; +} + +static const char *get_footer() +{ + const char *path; + + if (!footer) { + path = DEFAULT_WWW_DIR"/footer.tpl"; + footer = file_get_content(path); + + if (!footer) + log_err("Failed to read footer template: %s", path); + } + + 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; + + if (!ppa_body) { + path = DEFAULT_WWW_DIR"/ppa.tpl"; + ppa_body = file_get_content(path); + + if (!ppa_body) + log_err("Failed to read PPA template: %s", path); + } + + return ppa_body; +} + +static const char *get_pkg_body() +{ + const char *path; + + if (!pkg_body) { + path = DEFAULT_WWW_DIR"/pkg.tpl"; + pkg_body = file_get_content(path); + + if (!pkg_body) + log_err("Failed to read package template: %s", path); + } + + return pkg_body; +} + static struct json_object *date_to_json(struct tm *tm) { json_object *json; @@ -381,6 +359,14 @@ version_to_html(struct ppa_stats *ppa, { char *f_name, *path; FILE *f; + const char *footer; + const char *pkg_ver; + + pkg_ver = get_pkg_version_body(); + if (!pkg_ver) { + log_err("Failed to get package version template"); + return ; + } f_name = malloc(strlen(pkg->name)+1+strlen(version->version)+1); sprintf(f_name, "%s_%s", pkg->name, version->version); @@ -393,9 +379,11 @@ version_to_html(struct ppa_stats *ppa, return ; } - fprintf(f, HTML_VERSION_TEMPLATE, - version_to_json(ppa, pkg, version), - HTML_FOOTER); + fprintf(f, pkg_ver, version_to_json(ppa, pkg, version)); + + footer = get_footer(); + if (footer) + fputs(footer, f); fclose(f); @@ -410,17 +398,28 @@ create_html(const char *path, const char *script) { FILE *f; + const char *footer; + const char *header; + + header = get_header(); + if (!header) { + log_err(_("Failed to get the header template")); + return ; + } f = fopen(path, "w"); if (!f) { - log_err(_("failed to open: %s"), path); + log_err(_("Failed to open: %s"), path); return ; } - fprintf(f, HTML_HEADER, title, script); + fprintf(f, header, title, script); fputs(body_template, f); - fputs(HTML_FOOTER, f); + + footer = get_footer(); + if (footer) + fputs(footer, f); fclose(f); } @@ -441,6 +440,13 @@ index_to_html(struct ppa_stats *ppa, const char *dir) { char *path, *json_path, *dname; json_object *json; + const char *body; + + body = get_ppa_body(); + if (!body) { + log_err("Failed to create PPA page"); + return ; + } json = ppa_to_json(ppa); json_path = path_new(dir, "index", ".json"); @@ -452,7 +458,7 @@ index_to_html(struct ppa_stats *ppa, const char *dir) path = path_new(dir, "index", ".html"); dname = ppa_display_name(ppa); - create_html(path, dname, HTML_INDEX_TEMPLATE, "ppastats_ppa();"); + create_html(path, dname, body, "ppastats_ppa();"); free(path); free(dname); } @@ -462,10 +468,17 @@ pkg_to_html(struct ppa_stats *ppa, struct package_stats *pkg, const char *dir) { char *path, *json_path, *script; json_object *json; + const char *body; + + body = get_pkg_body(); + if (!body) { + log_err("Failed to create package page: %s", pkg->name); + return ; + } json_path = path_new(dir, pkg->name, ".json"); json = pkg_to_json(ppa, pkg); - log_debug(_("generating %s"), json_path); + log_debug(_("Generating %s"), json_path); json_object_to_file(json_path, json); json_object_put(json); @@ -478,9 +491,9 @@ pkg_to_html(struct ppa_stats *ppa, struct package_stats *pkg, const char *dir) 1); sprintf(script, "ppastats_pkg(\"%s%s\");", pkg->name, ".json"); - log_debug(_("generating %s"), path); + log_debug(_("Generating %s"), path); - create_html(path, pkg->name, HTML_PKG_TEMPLATE, script); + create_html(path, pkg->name, body, script); free(path); free(script); } @@ -541,7 +554,7 @@ ppa_to_html(const char *owner, for (i = 0; i < 7; i++) { f_dst = path_append(output_dir, www_files[2*i+1]); - log_debug(_("copying %s %s"), www_files[2*i], f_dst); + log_debug(_("Copying %s %s"), www_files[2*i], f_dst); fcopy(www_files[2*i], f_dst); free(f_dst);