e9ae7c34c7
Added timezones library (CET for now, you can easily adapt it to your timezone however) Added overlays to support both digital and analog clockfaces, basic countdown Improved serial debug Included license notes in settings file Added a bit of guides to readme file Warning! Using NTP usually results in a complete system crash after 1-48 hours. Please only enable it if you are willing to experiment with it. To get a proper WLED experience, make sure the checkbox for NTP is disabled in settings!
125 lines
4.0 KiB
C++
125 lines
4.0 KiB
C++
/*
|
|
* Utility for SPIFFS filesystem
|
|
*/
|
|
|
|
String formatBytes(size_t bytes){
|
|
if (bytes < 1024){
|
|
return String(bytes)+"B";
|
|
} else if(bytes < (1024 * 1024)){
|
|
return String(bytes/1024.0)+"KB";
|
|
} else if(bytes < (1024 * 1024 * 1024)){
|
|
return String(bytes/1024.0/1024.0)+"MB";
|
|
} else {
|
|
return String(bytes/1024.0/1024.0/1024.0)+"GB";
|
|
}
|
|
}
|
|
|
|
String getContentType(String filename){
|
|
if(server.hasArg("download")) return "application/octet-stream";
|
|
else if(filename.endsWith(".htm")) return "text/html";
|
|
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(".pdf")) return "application/x-pdf";
|
|
else if(filename.endsWith(".zip")) return "application/x-zip";
|
|
else if(filename.endsWith(".gz")) return "application/x-gzip";
|
|
return "text/plain";
|
|
}
|
|
|
|
bool handleFileRead(String path){
|
|
DEBUG_PRINTLN("handleFileRead: " + path);
|
|
if(path.endsWith("/")) path += "index.htm";
|
|
String contentType = getContentType(path);
|
|
String pathWithGz = path + ".gz";
|
|
if(SPIFFS.exists(pathWithGz) || SPIFFS.exists(path)){
|
|
if(SPIFFS.exists(pathWithGz))
|
|
path += ".gz";
|
|
File file = SPIFFS.open(path, "r");
|
|
size_t sent = server.streamFile(file, contentType);
|
|
file.close();
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
void handleFileUpload(){
|
|
if(server.uri() != "/edit") return;
|
|
HTTPUpload& upload = server.upload();
|
|
if(upload.status == UPLOAD_FILE_START){
|
|
String filename = upload.filename;
|
|
if(!filename.startsWith("/")) filename = "/"+filename;
|
|
DEBUG_PRINT("handleFileUpload Name: "); DEBUG_PRINTLN(filename);
|
|
fsUploadFile = SPIFFS.open(filename, "w");
|
|
filename = String();
|
|
} else if(upload.status == UPLOAD_FILE_WRITE){
|
|
//DEBUG_PRINT("handleFileUpload Data: "); DEBUG_PRINTLN(upload.currentSize);
|
|
if(fsUploadFile)
|
|
fsUploadFile.write(upload.buf, upload.currentSize);
|
|
} else if(upload.status == UPLOAD_FILE_END){
|
|
if(fsUploadFile)
|
|
fsUploadFile.close();
|
|
DEBUG_PRINT("handleFileUpload Size: "); DEBUG_PRINTLN(upload.totalSize);
|
|
}
|
|
}
|
|
|
|
void handleFileDelete(){
|
|
if(server.args() == 0) return server.send(500, "text/plain", "BAD ARGS");
|
|
String path = server.arg(0);
|
|
DEBUG_PRINTLN("handleFileDelete: " + path);
|
|
if(path == "/")
|
|
return server.send(500, "text/plain", "BAD PATH");
|
|
if(!SPIFFS.exists(path))
|
|
return server.send(404, "text/plain", "FileNotFound");
|
|
SPIFFS.remove(path);
|
|
server.send(200, "text/plain", "");
|
|
path = String();
|
|
}
|
|
|
|
void handleFileList() {
|
|
if(!server.hasArg("dir")) {server.send(500, "text/plain", "BAD ARGS"); return;}
|
|
|
|
String path = server.arg("dir");
|
|
DEBUG_PRINTLN("handleFileList: " + path);
|
|
Dir dir = SPIFFS.openDir(path);
|
|
path = String();
|
|
|
|
String output = "[";
|
|
while(dir.next()){
|
|
File entry = dir.openFile("r");
|
|
if (output != "[") output += ',';
|
|
bool isDir = false;
|
|
output += "{\"type\":\"";
|
|
output += (isDir)?"dir":"file";
|
|
output += "\",\"name\":\"";
|
|
output += String(entry.name()).substring(1);
|
|
output += "\"}";
|
|
entry.close();
|
|
}
|
|
|
|
output += "]";
|
|
server.send(200, "text/json", output);
|
|
}
|
|
|
|
void handleFileCreate(){
|
|
if(server.args() == 0)
|
|
return server.send(500, "text/plain", "BAD ARGS");
|
|
String path = server.arg(0);
|
|
DEBUG_PRINTLN("handleFileCreate: " + path);
|
|
if(path == "/")
|
|
return server.send(500, "text/plain", "BAD PATH");
|
|
if(SPIFFS.exists(path))
|
|
return server.send(500, "text/plain", "FILE EXISTS");
|
|
File file = SPIFFS.open(path, "w");
|
|
if(file)
|
|
file.close();
|
|
else
|
|
return server.send(500, "text/plain", "CREATE FAILED");
|
|
server.send(200, "text/plain", "");
|
|
path = String();
|
|
}
|