Browse Source

Adding hook to automatically delete potentially outdated cachefiles (via webtransfer)

master
Torsten Stauder 4 years ago
parent
commit
a70b545181
  1. 1
      src/LogMessages_DE.cpp
  2. 1
      src/LogMessages_EN.cpp
  3. 22
      src/Web.cpp
  4. 1
      src/logmessages.h
  5. 2
      src/main.cpp

1
src/LogMessages_DE.cpp

@ -199,4 +199,5 @@
const char errorWritingTmpfile[] PROGMEM = "Beim Schreiben der temporären Importdatei ist ein Fehler aufgetreten!"; const char errorWritingTmpfile[] PROGMEM = "Beim Schreiben der temporären Importdatei ist ein Fehler aufgetreten!";
const char eraseRfidNvsWeb[] PROGMEM = "<p>Die NVS-RFID-Zuweisungen werden gel&ouml;scht...<br />Zur letzten Seite <a href=\"javascript:history.back()\">zur&uuml;ckkehren</a>.</p>"; const char eraseRfidNvsWeb[] PROGMEM = "<p>Die NVS-RFID-Zuweisungen werden gel&ouml;scht...<br />Zur letzten Seite <a href=\"javascript:history.back()\">zur&uuml;ckkehren</a>.</p>";
const char eraseRfidNvs[] PROGMEM = "NVS-RFID-Zuweisungen werden gelöscht..."; const char eraseRfidNvs[] PROGMEM = "NVS-RFID-Zuweisungen werden gelöscht...";
const char erasePlaylistCachefile[] PROGMEM = "Playlist-Cachefile gelöscht";
#endif #endif

1
src/LogMessages_EN.cpp

@ -199,4 +199,5 @@
const char errorWritingTmpfile[] PROGMEM = "Error occured while writing to import-tmpfile"; const char errorWritingTmpfile[] PROGMEM = "Error occured while writing to import-tmpfile";
const char eraseRfidNvsWeb[] PROGMEM = "<p>NVS-RFID-assignments are being deleted...<br />Back to <a href=\"javascript:history.back()\">last page</a>.</p>"; const char eraseRfidNvsWeb[] PROGMEM = "<p>NVS-RFID-assignments are being deleted...<br />Back to <a href=\"javascript:history.back()\">last page</a>.</p>";
const char eraseRfidNvs[] PROGMEM = "NVS-RFID-assignments are being deleted..."; const char eraseRfidNvs[] PROGMEM = "NVS-RFID-assignments are being deleted...";
const char erasePlaylistCachefile[] PROGMEM = "Playlist-cachefile deleted";
#endif #endif

22
src/Web.cpp

@ -65,6 +65,7 @@ static bool Web_DumpNvsToSd(const char *_namespace, const char *_destFile);
static void onWebsocketEvent(AsyncWebSocket *server, AsyncWebSocketClient *client, AwsEventType type, void *arg, uint8_t *data, size_t len); static void onWebsocketEvent(AsyncWebSocket *server, AsyncWebSocketClient *client, AwsEventType type, void *arg, uint8_t *data, size_t len);
static String templateProcessor(const String &templ); static String templateProcessor(const String &templ);
static void webserverStart(void); static void webserverStart(void);
void Web_DeleteCachefile(const char *fileOrDirectory);
// If PSRAM is available use it allocate memory for JSON-objects // If PSRAM is available use it allocate memory for JSON-objects
struct SpiRamAllocator { struct SpiRamAllocator {
@ -546,6 +547,7 @@ void explorerHandleFileUpload(AsyncWebServerRequest *request, String filename, s
snprintf(Log_Buffer, Log_BufferLength, "%s: %s", (char *)FPSTR (writingFile), utf8FilePath.c_str()); snprintf(Log_Buffer, Log_BufferLength, "%s: %s", (char *)FPSTR (writingFile), utf8FilePath.c_str());
Log_Println(Log_Buffer, LOGLEVEL_INFO); Log_Println(Log_Buffer, LOGLEVEL_INFO);
Web_DeleteCachefile(utf8FilePath.c_str());
// Create Ringbuffer for upload // Create Ringbuffer for upload
if (explorerFileUploadRingBuffer == NULL) { if (explorerFileUploadRingBuffer == NULL) {
@ -696,6 +698,24 @@ bool explorerDeleteDirectory(File dir) {
return gFSystem.rmdir(dir.name()); return gFSystem.rmdir(dir.name());
} }
// Handles delete-requests for cachefiles.
// This is necessary to avoid outdated cachefiles if content of a directory changes (create, rename, delete).
void Web_DeleteCachefile(const char *fileOrDirectory) {
char cacheFile[MAX_FILEPATH_LENTGH];
const char s = '/';
char *last = strrchr(fileOrDirectory, s);
char *first = strchr(fileOrDirectory, s);
unsigned long substr = last - first + 1;
snprintf(cacheFile, substr+1, "%s", fileOrDirectory);
strcat(cacheFile, playlistCacheFile);
if (gFSystem.exists(cacheFile)) {
if (gFSystem.remove(cacheFile)) {
snprintf(Log_Buffer, Log_BufferLength, "%s: %s", (char *) FPSTR(erasePlaylistCachefile), cacheFile);
Log_Println(Log_Buffer, LOGLEVEL_DEBUG);
}
}
}
// Handles delete request of a file or directory // Handles delete request of a file or directory
// requires a GET parameter path to the file or directory // requires a GET parameter path to the file or directory
void explorerHandleDeleteRequest(AsyncWebServerRequest *request) { void explorerHandleDeleteRequest(AsyncWebServerRequest *request) {
@ -719,6 +739,7 @@ void explorerHandleDeleteRequest(AsyncWebServerRequest *request) {
if (gFSystem.remove(filePath)) { if (gFSystem.remove(filePath)) {
snprintf(Log_Buffer, Log_BufferLength, "DELETE: %s deleted", param->value().c_str()); snprintf(Log_Buffer, Log_BufferLength, "DELETE: %s deleted", param->value().c_str());
Log_Println(Log_Buffer, LOGLEVEL_INFO); Log_Println(Log_Buffer, LOGLEVEL_INFO);
Web_DeleteCachefile(filePath);
} else { } else {
snprintf(Log_Buffer, Log_BufferLength, "DELETE: Cannot delete %s", param->value().c_str()); snprintf(Log_Buffer, Log_BufferLength, "DELETE: Cannot delete %s", param->value().c_str());
Log_Println(Log_Buffer, LOGLEVEL_ERROR); Log_Println(Log_Buffer, LOGLEVEL_ERROR);
@ -773,6 +794,7 @@ void explorerHandleRenameRequest(AsyncWebServerRequest *request) {
if (gFSystem.rename(srcFullFilePath, dstFullFilePath)) { if (gFSystem.rename(srcFullFilePath, dstFullFilePath)) {
snprintf(Log_Buffer, Log_BufferLength, "RENAME: %s renamed to %s", srcPath->value().c_str(), dstPath->value().c_str()); snprintf(Log_Buffer, Log_BufferLength, "RENAME: %s renamed to %s", srcPath->value().c_str(), dstPath->value().c_str());
Log_Println(Log_Buffer, LOGLEVEL_INFO); Log_Println(Log_Buffer, LOGLEVEL_INFO);
Web_DeleteCachefile(dstFullFilePath);
} else { } else {
snprintf(Log_Buffer, Log_BufferLength, "RENAME: Cannot rename %s", srcPath->value().c_str()); snprintf(Log_Buffer, Log_BufferLength, "RENAME: Cannot rename %s", srcPath->value().c_str());
Log_Println(Log_Buffer, LOGLEVEL_ERROR); Log_Println(Log_Buffer, LOGLEVEL_ERROR);

1
src/logmessages.h

@ -195,3 +195,4 @@ extern const char errorReadingTmpfile[];
extern const char errorWritingTmpfile[]; extern const char errorWritingTmpfile[];
extern const char eraseRfidNvsWeb[]; extern const char eraseRfidNvsWeb[];
extern const char eraseRfidNvs[]; extern const char eraseRfidNvs[];
extern const char erasePlaylistCachefile[];

2
src/main.cpp

@ -184,7 +184,7 @@ void setup() {
Serial.println(F(" | |___ ___) | | __/ | |_| | | | | | | | | (_) |")); Serial.println(F(" | |___ ___) | | __/ | |_| | | | | | | | | (_) |"));
Serial.println(F(" |_____| |____/ |_| \\__,_| |_| |_| |_| \\___/ ")); Serial.println(F(" |_____| |____/ |_| \\__,_| |_| |_| |_| \\___/ "));
Serial.println(F(" Rfid-controlled musicplayer\n")); Serial.println(F(" Rfid-controlled musicplayer\n"));
Serial.println(F(" Rev 20210709-1\n"));
Serial.println(F(" Rev 20210709-2\n"));
// print wake-up reason // print wake-up reason
printWakeUpReason(); printWakeUpReason();

Loading…
Cancel
Save