diff --git a/src/LogMessages_DE.cpp b/src/LogMessages_DE.cpp index 0d7d237..a90b2f2 100644 --- a/src/LogMessages_DE.cpp +++ b/src/LogMessages_DE.cpp @@ -199,4 +199,5 @@ const char errorWritingTmpfile[] PROGMEM = "Beim Schreiben der temporären Importdatei ist ein Fehler aufgetreten!"; const char eraseRfidNvsWeb[] PROGMEM = "

Die NVS-RFID-Zuweisungen werden gelöscht...
Zur letzten Seite zurückkehren.

"; const char eraseRfidNvs[] PROGMEM = "NVS-RFID-Zuweisungen werden gelöscht..."; + const char erasePlaylistCachefile[] PROGMEM = "Playlist-Cachefile gelöscht"; #endif diff --git a/src/LogMessages_EN.cpp b/src/LogMessages_EN.cpp index cf73b0b..f98b257 100644 --- a/src/LogMessages_EN.cpp +++ b/src/LogMessages_EN.cpp @@ -199,4 +199,5 @@ const char errorWritingTmpfile[] PROGMEM = "Error occured while writing to import-tmpfile"; const char eraseRfidNvsWeb[] PROGMEM = "

NVS-RFID-assignments are being deleted...
Back to last page.

"; const char eraseRfidNvs[] PROGMEM = "NVS-RFID-assignments are being deleted..."; + const char erasePlaylistCachefile[] PROGMEM = "Playlist-cachefile deleted"; #endif diff --git a/src/Web.cpp b/src/Web.cpp index f6b1682..23c16f5 100644 --- a/src/Web.cpp +++ b/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 String templateProcessor(const String &templ); static void webserverStart(void); +void Web_DeleteCachefile(const char *fileOrDirectory); // If PSRAM is available use it allocate memory for JSON-objects 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()); Log_Println(Log_Buffer, LOGLEVEL_INFO); + Web_DeleteCachefile(utf8FilePath.c_str()); // Create Ringbuffer for upload if (explorerFileUploadRingBuffer == NULL) { @@ -696,6 +698,24 @@ bool explorerDeleteDirectory(File dir) { 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 // requires a GET parameter path to the file or directory void explorerHandleDeleteRequest(AsyncWebServerRequest *request) { @@ -719,6 +739,7 @@ void explorerHandleDeleteRequest(AsyncWebServerRequest *request) { if (gFSystem.remove(filePath)) { snprintf(Log_Buffer, Log_BufferLength, "DELETE: %s deleted", param->value().c_str()); Log_Println(Log_Buffer, LOGLEVEL_INFO); + Web_DeleteCachefile(filePath); } else { snprintf(Log_Buffer, Log_BufferLength, "DELETE: Cannot delete %s", param->value().c_str()); Log_Println(Log_Buffer, LOGLEVEL_ERROR); @@ -773,6 +794,7 @@ void explorerHandleRenameRequest(AsyncWebServerRequest *request) { if (gFSystem.rename(srcFullFilePath, dstFullFilePath)) { snprintf(Log_Buffer, Log_BufferLength, "RENAME: %s renamed to %s", srcPath->value().c_str(), dstPath->value().c_str()); Log_Println(Log_Buffer, LOGLEVEL_INFO); + Web_DeleteCachefile(dstFullFilePath); } else { snprintf(Log_Buffer, Log_BufferLength, "RENAME: Cannot rename %s", srcPath->value().c_str()); Log_Println(Log_Buffer, LOGLEVEL_ERROR); diff --git a/src/logmessages.h b/src/logmessages.h index 7a9d573..8104c7a 100644 --- a/src/logmessages.h +++ b/src/logmessages.h @@ -195,3 +195,4 @@ extern const char errorReadingTmpfile[]; extern const char errorWritingTmpfile[]; extern const char eraseRfidNvsWeb[]; extern const char eraseRfidNvs[]; +extern const char erasePlaylistCachefile[]; diff --git a/src/main.cpp b/src/main.cpp index fbe343f..92de0fa 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -184,7 +184,7 @@ void setup() { Serial.println(F(" | |___ ___) | | __/ | |_| | | | | | | | | (_) |")); Serial.println(F(" |_____| |____/ |_| \\__,_| |_| |_| |_| \\___/ ")); 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 printWakeUpReason();