diff --git a/examples/simple/simple.ino b/examples/simple/simple.ino index 5b93390..424560e 100644 --- a/examples/simple/simple.ino +++ b/examples/simple/simple.ino @@ -1,17 +1,35 @@ -#ifdef ESP32 +#if defined(ESP32) #include -#else +#elif defined(ESP8266) #include +#else +#error Platform not supported #endif + #include -#include #include +// LittleFS +#include +#define FILESYSTEM LittleFS + +// SPIFFS +// #include +// #define FILESYSTEM SPIFFS + +// FFat +// #include +// #define FILESYSTEM FFat + const char* ssid = "ssid"; const char* password = "pass"; AsyncWebServer server(80); -AsyncWebdav dav("/dav", LittleFS); + +size_t totalBytes() { return FILESYSTEM.totalBytes(); } +size_t usedBytes() { return FILESYSTEM.usedBytes(); } + +AsyncWebdav dav("/dav", FILESYSTEM, totalBytes, usedBytes); void setup(void){ @@ -31,14 +49,14 @@ void setup(void){ Serial.print("IP address: "); Serial.println(WiFi.localIP()); - // init spiffs - LittleFS.begin(); + // init filesystem + FILESYSTEM.begin(); - // add websocket handler + // add WebDAV handler server.addHandler(&dav); // start webserver - server.serveStatic("/", LittleFS, "/").setDefaultFile("index.html"); + server.serveStatic("/", FILESYSTEM, "/www/").setDefaultFile("index.html"); server.begin(); } diff --git a/library.json b/library.json index 449ed88..445f16d 100644 --- a/library.json +++ b/library.json @@ -12,6 +12,12 @@ "type": "git", "url": "https://github.com/rostwolke/ESPAsyncWebdav" }, + "dependencies": [ + { + "name":"ESP Async WebServer", + "version":"https://github.com/rostwolke/ESPAsyncWebServer" + } + ], "frameworks": "arduino", "platforms":"espressif" } diff --git a/src/AsyncWebdav.cpp b/src/AsyncWebdav.cpp index 98c370a..9651be5 100644 --- a/src/AsyncWebdav.cpp +++ b/src/AsyncWebdav.cpp @@ -1,6 +1,6 @@ #include #include -#include +// #include #ifdef ESP32 #include @@ -14,11 +14,13 @@ #include "AsyncWebdav.h" -AsyncWebdav::AsyncWebdav(const String& url, fs::FS &fs) : _fs(fs) { - this->_url = url; +AsyncWebdav::AsyncWebdav(const String& url, fs::FS &fs, quota_function totalBytes, quota_function usedBytes) +: _url(url) +, _fs(fs) +, _totalBytes(totalBytes) +, _usedBytes(usedBytes) { } - bool AsyncWebdav::canHandle(AsyncWebServerRequest *request){ if(request->url().startsWith(this->_url)){ if(request->method() == HTTP_PROPFIND @@ -357,8 +359,9 @@ void AsyncWebdav::sendPropResponse(AsyncResponseStream *response, boolean recurs // get file modified time time_t lastWrite = curFile->getLastWrite(); - DateTimeClass dt(lastWrite); - String fileTimeStamp = dt.format("%a, %d %b %Y %H:%M:%S GMT"); + char fileTimeStamp[64]; + struct tm* t = localtime(&lastWrite); + strftime(fileTimeStamp, sizeof(fileTimeStamp), "%a, %d %b %Y %H:%M:%S GMT", t); // send response response->print(""); @@ -367,7 +370,18 @@ void AsyncWebdav::sendPropResponse(AsyncResponseStream *response, boolean recurs response->print(""); // last modified - response->printf("%s", fileTimeStamp.c_str()); + response->printf("%s", fileTimeStamp); + + // quota + size_t usedBytes = 0; + size_t availBytes = 0; + + if (_totalBytes && _usedBytes) { + usedBytes = _usedBytes(); + availBytes = _totalBytes() - usedBytes; + } + response->printf("%d", usedBytes); + response->printf("%d", availBytes); if(curFile->isDirectory()) { // resource type diff --git a/src/AsyncWebdav.h b/src/AsyncWebdav.h index 9c834a3..21f1f62 100644 --- a/src/AsyncWebdav.h +++ b/src/AsyncWebdav.h @@ -1,6 +1,6 @@ #include #include - +#include enum DavResourceType { DAV_RESOURCE_NONE, DAV_RESOURCE_FILE, DAV_RESOURCE_DIR }; enum DavDepthType { DAV_DEPTH_NONE, DAV_DEPTH_CHILD, DAV_DEPTH_ALL }; @@ -8,7 +8,10 @@ enum DavDepthType { DAV_DEPTH_NONE, DAV_DEPTH_CHILD, DAV_DEPTH_ALL }; class AsyncWebdav: public AsyncWebHandler { public: - AsyncWebdav(const String& url, fs::FS &fs); + typedef size_t (*quota_function)(void); + + public: + AsyncWebdav(const String& url, fs::FS &fs, quota_function totalBytes = nullptr, quota_function usedBytes = nullptr); virtual bool canHandle(AsyncWebServerRequest *request) override final; virtual void handleRequest(AsyncWebServerRequest *request) override final; @@ -20,6 +23,8 @@ class AsyncWebdav: public AsyncWebHandler { private: String _url; fs::FS _fs; + quota_function _totalBytes; + quota_function _usedBytes; void handlePropfind(const String& path, DavResourceType resource, AsyncWebServerRequest * request); void handleGet(const String& path, DavResourceType resource, AsyncWebServerRequest * request); void handlePut(const String& path, DavResourceType resource, AsyncWebServerRequest * request, unsigned char *data, size_t len, size_t index, size_t total);