diff --git a/Firmware/EggbotWireless/data/index.html.gz b/Firmware/EggbotWireless/data/index.html.gz new file mode 100644 index 0000000..f771378 Binary files /dev/null and b/Firmware/EggbotWireless/data/index.html.gz differ diff --git a/Firmware/EggbotWireless/data/src.02b6c58e.css.gz b/Firmware/EggbotWireless/data/src.02b6c58e.css.gz new file mode 100644 index 0000000..e7cefd3 Binary files /dev/null and b/Firmware/EggbotWireless/data/src.02b6c58e.css.gz differ diff --git a/Firmware/EggbotWireless/data/src.0511037d.js.gz b/Firmware/EggbotWireless/data/src.0511037d.js.gz new file mode 100644 index 0000000..392428b Binary files /dev/null and b/Firmware/EggbotWireless/data/src.0511037d.js.gz differ diff --git a/Firmware/EggbotWireless/include/WebAPI.h b/Firmware/EggbotWireless/include/WebAPI.h index 4cd1bef..d3a6c95 100644 --- a/Firmware/EggbotWireless/include/WebAPI.h +++ b/Firmware/EggbotWireless/include/WebAPI.h @@ -4,6 +4,7 @@ #include #include #include +#include class WebAPI { private: @@ -11,6 +12,8 @@ class WebAPI { void handlePutCommand(); void handleGetStatus(); void sendCORS(); + bool getFile(String filename); + String getContentType(String filename); String getStatusJson(); public: diff --git a/Firmware/EggbotWireless/src/WebAPI.cpp b/Firmware/EggbotWireless/src/WebAPI.cpp index eb30406..ac64cbc 100644 --- a/Firmware/EggbotWireless/src/WebAPI.cpp +++ b/Firmware/EggbotWireless/src/WebAPI.cpp @@ -24,6 +24,49 @@ String WebAPI::getStatusJson() { return out; } +String WebAPI::getContentType(String filename) { + if (server.hasArg("download")) { + return "application/octet-stream"; + } else if (filename.endsWith(".html")) { + return "text/html"; + } else if (filename.endsWith(".css")) { + return "text/css"; + } else if (filename.endsWith(".js")) { + return "application/javascript"; + } else if (filename.endsWith(".png")) { + return "image/png"; + } else if (filename.endsWith(".gif")) { + return "image/gif"; + } else if (filename.endsWith(".jpg")) { + return "image/jpeg"; + } else if (filename.endsWith(".ico")) { + return "image/x-icon"; + } else if (filename.endsWith(".xml")) { + return "text/xml"; + } else if (filename.endsWith(".gz")) { + return "application/x-gzip"; + } + return "text/plain"; +} + +bool WebAPI::getFile(String filename) { + if (filename.endsWith("/")) { + filename += "index.html"; + } + String contentType = getContentType(filename); + String pathWithGz = filename + ".gz"; + if (SPIFFS.exists(pathWithGz) || SPIFFS.exists(filename)) { + if (SPIFFS.exists(pathWithGz)) { + filename += ".gz"; + } + File file = SPIFFS.open(filename, "r"); + server.streamFile(file, contentType); + file.close(); + return true; + } + return false; +} + void WebAPI::sendCORS() { server.sendHeader("Access-Control-Allow-Origin", "*"); server.sendHeader("Access-Control-Max-Age", "10000"); @@ -38,7 +81,9 @@ void WebAPI::handleNotFound() { sendCORS(); server.send(204); } else { - server.send(404, "text/plain", ""); + if (!getFile(server.uri())) { + server.send(404, "text/plain", ""); + } } } @@ -61,6 +106,8 @@ void WebAPI::init() { std::bind(&WebAPI::handleGetStatus, this)); server.onNotFound(std::bind(&WebAPI::handleNotFound, this)); + + SPIFFS.begin(); server.begin(); }