#include "lp_ws.h"
#include "ppastats.h"
-#define HTML_FOOTER \
-" <div id=\"footer\">Generated by \
-<a href='http://wpitchoune.net/ppastats'>ppastats</a></div>\n\
- </body>\n\
-</html>"
-
-#define HTML_PKG_TEMPLATE \
-" <h1><span id=\"pkg_name\">N/A</span></h1>\n\
- <div id=\"charts\">\n\
- <div id=\"chart\"></div>\n\
- <div id=\"chart_distro\"></div>\n\
- </div>\n\
- <div id=\"details\">\n\
- <em>PPA</em>: \n\
- <a href=\"index.html\">\n\
- <span id=\"ppa_owner\">N/A</span>/\n\
- <span id=\"ppa_name\">N/A</span>\n\
- </a>\n\
-\n\
- <div id=\"distros\"><em>Distros:</em></div>\n\
- <div id=\"versions\"><em>Versions:</em></div>\n\
- </div>"
-
-#define HTML_VERSION_TEMPLATE \
-"<html>\n\
- <head>\n\
- <link type=\"text/css\"\n\
- rel=\"stylesheet\"\n\
- href=\n\
-\"http://fonts.googleapis.com/css?family=Ubuntu:regular,bold&subset=Latin\">\n\
- <link type=\"text/css\" href=\"css/ppastats.css\" rel=\"stylesheet\" />\n\
- <link type=\"text/css\" href=\"css/jquery.jqplot.min.css\"\n\
- rel=\"stylesheet\" />\n\
-<!--[if lt IE 9]><script \
-language=\"javascript\" \
-type=\"text/javascript\" \
-src=\"js/excanvas.js\"></script><![endif]-->\n\
- <script type=\"text/javascript\" src=\"js/jquery.min.js\"></script>\n\
- <script type=\"text/javascript\"\n\
- src=\"js/jquery.jqplot.min.js\"></script>\n\
- <script type=\"text/javascript\"\n\
- src=\"js/jqplot.dateAxisRenderer.min.js\"></script>\n\
- <script type=\"text/javascript\" src=\"js/ppastats.js\"></script>\n\
- <script>var data = %s;\n\
- ppastats_ver();\n\
- </script>\n\
- </head>\n\
- <body>\n\
- <h1><span id=\"pkg_name\">N/A</span></h1>\n\
- <div id=\"version\"><em>Version:</em></div>\n\
- <p><em>PPA</em>: \n\
- <a href=\"index.html\">\n\
- <span id=\"ppa_owner\">N/A</span>/<span id=\"ppa_name\">N/A</span>\n\
- </a></p>\n\
- <div id=\"charts\">\n\
- <div id=\"chart\"></div>\n\
- </div>\n\
- <div id=\"details\">\n\
- <div class=\"distros\">\n\
- <em>Distros</em>:\n\
- <ul id=\"distros\"></ul>\n\
- </div>\n\
- </div>\n\
-%s"
-
-#define HTML_HEADER \
-"<html>\n\
- <head>\n\
- <title>%s</title>\n\
- <link type=\"text/css\"\n\
- rel=\"stylesheet\"\n\
- href=\
-\"http://fonts.googleapis.com/css?family=Ubuntu:regular,bold&subset=Latin\">\n\
- <link type=\"text/css\" href=\"css/ppastats.css\"\n\
- rel=\"stylesheet\"/>\n\
- <link type=\"text/css\" href=\"css/jquery.jqplot.min.css\"\n\
- rel=\"stylesheet\" />\n\
-<!--[if lt IE 9]><script \
-language=\"javascript\" \
-type=\"text/javascript\" \
-src=\"js/excanvas.js\"></script><![endif]-->\n\
- <script type=\"text/javascript\"\n\
- src=\"js/jquery.min.js\"></script>\n\
- <script type=\"text/javascript\"\n\
- src=\"js/jquery.jqplot.min.js\"></script>\n\
- <script type=\"text/javascript\"\n\
- src=\"js/jqplot.dateAxisRenderer.min.js\"></script>\n\
- <script type=\"text/javascript\"\n\
- src=\"js/ppastats.js\"></script>\n\
- <script>%s</script>\n\
- </head>\n\
- <body>\n"
-
-#define HTML_INDEX_TEMPLATE \
-" <h1><span id=\"ppa_name\">N/A</span></h1>\n\
- <div id=\"details\">\n\
- <div class=\"pkgs\">\n\
- <em>Packages</em>:\n\
- <ul id=\"pkgs\"></ul>\n\
- </div>\n\
- </div>\n\
- <div id=\"charts\">\n\
- <div id=\"chart\"></div>\n\
- </div>\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)
{
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;
{
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);
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);
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);
}
{
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");
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);
}
{
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);
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);
}
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);