Merge branch 'master' of thejh.net:quakecontrol
[quakecontrol.git] / showmaps.c
1 // Copyright (2013) Jann Horn <jann@thejh.net>
2 // This code is licensed under the AGPLv3.
3
4 #include "common.h"
5
6 static char *maps_url;
7 static char *maps_dir;
8
9 int print_map(struct dirent *dent, void *data) {
10   if (!ends_with(dent->d_name, ".png")) return 0;
11   
12   size_t dent_name_len = strlen(dent->d_name);
13   char name_nopng[dent_name_len-4+1];
14   memcpyn(name_nopng, dent->d_name, dent_name_len-4);
15   
16   printf("    <div class=\"map\">"
17        "\n      <a href=\"loadmap?%s\">"
18        "\n        <div class=\"mapimg\"><img src=\"%s/%s\"></div>"
19        "\n        <div class=\"mapname\">%s</div>"
20        "\n      </a>"
21        "\n    </div>"
22        "\n",
23     name_nopng, getcval("maps_url"), dent->d_name, name_nopng
24   );
25   
26   return 0;
27 }
28
29 int main(void) {
30   maps_url = getcval("maps_url");
31   maps_dir = getcval("maps_dir");
32   
33   puts("Status: 200 graphical listing coming up..."
34      "\nContent-Type: text/html;charset=utf8"
35      "\nX-Frame-Options: DENY"
36      "\n"
37      "\n<!DOCTYPE html>"
38      "\n<html>"
39      "\n  <head>"
40      "\n    <title>Quake Control</title>"
41      "\n    <style>"
42      "\n      .map {float: left; padding: 5px; }"
43      "\n    </style>"
44      "\n  </head>"
45      "\n  <body>");
46   
47   dir_foreach(maps_dir, print_map, NULL);
48   
49   puts("  </body>"
50      "\n</html>");
51   
52   exit(0);
53 }