//------------------------------------------------------------------------------ void FatFile::ls(print_t* pr, uint8_t flags, uint8_t indent) { FatFile file; rewind(); while (file.openNext(this, O_READ)) { // indent for dir level if (!file.isHidden() || (flags & LS_A)) { for (uint8_t i = 0; i < indent; i++) { pr->write(' '); } if (flags & LS_DATE) { file.printModifyDateTime(pr); pr->write(' '); } if (flags & LS_SIZE) { file.printFileSize(pr); pr->write(' '); } file.printName(pr); if (file.isDir()) { pr->write('/'); } pr->write('\r'); pr->write('\n'); if ((flags & LS_R) && file.isDir()) { file.ls(pr, flags, indent + 2); } } file.close(); } }
static void webApiFileSystem(MyHeaterUI &server, WebServer::ConnectionType type, char *url_tail, bool tail_complete) { char value[MY_HEATER_UI_VALUE_LEN]; char *p; DEBUG("webApiFileSystem"); if (server.authCredentials != NULL && !server.checkCredentials(server.authCredentials)) { server.httpUnauthorized(); return; } // root if (!server.sd->chdir()) { server.httpServerError(); server.print("<h1>SD card failed</h1>"); return; } if (type == WebServer::GET) { DEBUG("GET"); FatFile dir; if (!getNextStrParam(server, &url_tail, "dir", value)) { strcpy(value, "/"); } DEBUG("dir: %s", value); if (!dir.open(server.sd->vwd(), value, O_READ)) { DEBUG("ERROR - Can't open file!"); server.httpServerError(); return; } server.httpSuccess("application/json; charset=utf-8"); server.print("{\"files\":["); FatFile file; bool isFirst = true; while (file.openNext(&dir, O_READ)) { if (!isFirst) { server.print(","); } else { isFirst = false; } server.print("{\"name\":\""); file.printName(&server); server.print("\""); server.print(",\"modifyDateTime\":\""); file.printModifyDateTime(&server); server.print("\""); server.print(",\"fileSize\":"); file.printFileSize(&server); if (file.isDir()) { server.print(",\"isDir\":true"); } else { server.print(",\"isDir\":false"); } server.print("}"); file.close(); } server.print("]}"); dir.close(); } else if (type == WebServer::PUT) { if ((p = url_tail) && getNextStrParam(server, &p, "file", value)) { DEBUG("PUT file: %s", value); FatFile file; if (!file.open(value, O_WRITE | O_CREAT | O_TRUNC)) { server.httpServerError(); return; } int ch; while ((ch = server.read()) != -1) { file.write(ch); } file.close(); } else if ((p = url_tail) && getNextStrParam(server, &p, "dir", value)) { DEBUG("MKDIR dir: %s", value); if (!server.sd->mkdir(value)) { server.httpServerError(); return; } } else { server.httpServerError(); return; } server.httpSuccess(); } else if (type == WebServer::DELETE) { FatFile file; while (getNextStrParam(server, &url_tail, "file", value)) { DEBUG("DELETE file: %s", value); if (file.open(value, O_READ)) { DEBUG("opened"); if (file.isDir()) { file.rmRfStar() && file.rmdir(); file.close(); } else { DEBUG("try to remove"); file.close(); if (file.open(value, O_READ | O_WRITE)) { if (!file.remove()) { DEBUG("Cannot remove file"); } file.close(); } } } else { DEBUG("Cannot open file"); } } server.httpSuccess(); } }