diff --git a/src/databasebackend.h b/src/databasebackend.h index 913ef70..420e047 100644 --- a/src/databasebackend.h +++ b/src/databasebackend.h @@ -482,6 +482,9 @@ void addLocalTime(String uid, String name, unsigned long timeMs) { localTimes.push_back(newTime); + // Speichere das Leaderboard automatisch + saveBestTimes(); + Serial.printf("Lokale Zeit hinzugefügt: %s (%s) - %.2fs\n", name.c_str(), uid.c_str(), timeMs / 1000.0); } @@ -489,5 +492,6 @@ void addLocalTime(String uid, String name, unsigned long timeMs) { // Leert das lokale Leaderboard void clearLocalLeaderboard() { localTimes.clear(); + saveBestTimes(); // Speichere das geleerte Leaderboard Serial.println("Lokales Leaderboard geleert"); } \ No newline at end of file diff --git a/src/preferencemanager.h b/src/preferencemanager.h index ec056f7..aff1955 100644 --- a/src/preferencemanager.h +++ b/src/preferencemanager.h @@ -21,19 +21,60 @@ void loadButtonConfig() { preferences.end(); } -// Persist and load best times +// Persist and load local leaderboard void saveBestTimes() { - preferences.begin("times", false); - preferences.putULong("best1", timerData1.bestTime); - preferences.putULong("best2", timerData2.bestTime); + preferences.begin("leaderboard", false); + + // Speichere Anzahl der Einträge + preferences.putUInt("count", localTimes.size()); + + // Speichere jeden Eintrag (kurze Schlüssel für NVS) + for (size_t i = 0; i < localTimes.size(); i++) { + String key = "e" + String(i); // e0, e1, e2, etc. + preferences.putString((key + "u").c_str(), + localTimes[i].uid); // e0u, e1u, etc. + preferences.putString((key + "n").c_str(), + localTimes[i].name); // e0n, e1n, etc. + preferences.putULong((key + "t").c_str(), + localTimes[i].timeMs); // e0t, e1t, etc. + preferences.putULong((key + "s").c_str(), + localTimes[i].timestamp); // e0s, e1s, etc. + } + preferences.end(); + Serial.println("Lokales Leaderboard gespeichert: " + + String(localTimes.size()) + " Einträge"); } void loadBestTimes() { - preferences.begin("times", true); - timerData1.bestTime = preferences.getULong("best1", 0); - timerData2.bestTime = preferences.getULong("best2", 0); + preferences.begin("leaderboard", true); + + // Leere das aktuelle Leaderboard + localTimes.clear(); + + // Lade Anzahl der Einträge + uint32_t count = preferences.getUInt("count", 0); + + // Lade jeden Eintrag (kurze Schlüssel für NVS) + for (uint32_t i = 0; i < count; i++) { + LocalTime entry; + String key = "e" + String(i); // e0, e1, e2, etc. + + entry.uid = + preferences.getString((key + "u").c_str(), ""); // e0u, e1u, etc. + entry.name = + preferences.getString((key + "n").c_str(), ""); // e0n, e1n, etc. + entry.timeMs = + preferences.getULong((key + "t").c_str(), 0); // e0t, e1t, etc. + entry.timestamp = + preferences.getULong((key + "s").c_str(), 0); // e0s, e1s, etc. + + localTimes.push_back(entry); + } + preferences.end(); + Serial.println("Lokales Leaderboard geladen: " + String(localTimes.size()) + + " Einträge"); } // Persist and load general settings