code refactoring/cleanup
[ppastats.git] / src / html.c
index c0dd767..4eddeb3 100644 (file)
     </div>\n\
 %s"
 
-#define HTML_INDEX_TEMPLATE \
+#define HTML_HEADER \
 "<html>\n\
-  <head>\n\
-    <link type=\"text/css\"\n\
-         rel=\"stylesheet\"\n\
-         href=\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\" rel=\"stylesheet\" />\n\
-    <link type=\"text/css\" href=\"css/jquery.jqplot.min.css\"\n\
-         rel=\"stylesheet\" />\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_ppa();\n\
-    </script>\n\
-  </head>\n\
-  <body>\n\
-    <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\
-%s"
+               <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\
+               <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 char *path_new(const char *dir, const char *file, const char *suffixe)
 {
@@ -156,7 +159,7 @@ static char *path_new(const char *dir, const char *file, const char *suffixe)
        strcpy(path, dir);
        strcat(path, "/");
        strcat(path, file);
-       strcat(path, ".html");
+       strcat(path, suffixe);
 
        return path;
 }
@@ -332,9 +335,8 @@ static char *version_to_json(struct ppa_stats *ppa,
        return ret;
 }
 
-static char *ppa_to_json(struct ppa_stats *ppa)
+static json_object *ppa_to_json(struct ppa_stats *ppa)
 {
-       char *ret;
        json_object *json, *json_pkgs, *json_pkg;
        struct package_stats **pkgs;
 
@@ -365,11 +367,7 @@ static char *ppa_to_json(struct ppa_stats *ppa)
                pkgs++;
        }
 
-       ret = strdup(json_object_to_json_string(json));
-
-       json_object_put(json);
-
-       return ret;
+       return json;
 }
 
 
@@ -452,12 +450,13 @@ packages_to_html(struct ppa_stats *ppa,
 }
 
 static void
-index_to_html(struct ppa_stats *ppa, const char *dir)
+create_html(const char *path,
+           const char *title,
+           const char *body_template,
+           const char *script)
 {
-       char *path;
        FILE *f;
 
-       path = path_new(dir, "index", ".html");
        f = fopen(path, "w");
 
        if (!f) {
@@ -465,11 +464,49 @@ index_to_html(struct ppa_stats *ppa, const char *dir)
                return ;
        }
 
-       fprintf(f, HTML_INDEX_TEMPLATE, ppa_to_json(ppa), HTML_FOOTER);
+       fprintf(f, HTML_HEADER, title, script);
+       fputs(HTML_INDEX_TEMPLATE, f);
+       fputs(HTML_FOOTER, f);
 
        fclose(f);
+}
+
+static char *ppa_display_name(const struct ppa_stats *ppa)
+{
+       char *ret;
+
+       ret = malloc(4+strlen(ppa->name)+1+strlen(ppa->owner)+1);
+
+       sprintf(ret, "ppa:%s/%s", ppa->owner, ppa->name);
+
+       return ret;
+}
+
+static void
+index_to_html(struct ppa_stats *ppa, const char *dir)
+{
+       char *path, *json_path, *dname;
+       json_object *json;
+
+       json = ppa_to_json(ppa);
+
+       json_path = path_new(dir, "index", ".json");
+
+       if (debug)
+               printf("DEBUG: generating %s\n", json_path);
+
+       json_object_to_file(json_path, json);
+
+       json_object_put(json);
+
+       path = path_new(dir, "index", ".html");
+       dname = ppa_display_name(ppa);
+
+       create_html(path, dname, HTML_INDEX_TEMPLATE, "ppastats_ppa();");
 
        free(path);
+       free(dname);
+       free(json_path);
 }
 
 void
@@ -495,6 +532,8 @@ ppa_to_html(const char *owner,
                    DEFAULT_WWW_DIR"/jquery.jqplot.min.css",
                    "css/jquery.jqplot.min.css" };
 
+       mkdirs(output_dir, 0777);
+
        if (install_static_files) {
                css_dir = path_append(output_dir, "css");
                js_dir = path_append(output_dir, "js");
@@ -504,6 +543,10 @@ ppa_to_html(const char *owner,
 
                for (i = 0; i < 6; i++) {
                        f_dst = path_append(output_dir, www_files[2*i+1]);
+
+                       if (debug)
+                               printf("DEBUG: copying %s %s\n",
+                                      www_files[2*i], f_dst);
                        fcopy(www_files[2*i], f_dst);
 
                        free(f_dst);