Add Backup & Reset sub-page with factory reset (developer feature)
Moves the previously standalone "Backup settings"/"Restore settings" buttons out of the System menu into a new "Backup & Reset" sub-page (replaced in the System menu by a single folder button, placed directly above "Info"), and adds a third entry "Reset settings" - a factory reset for developers/testers that deletes the entire Flightradar folder from the SD card (settings, logbook, location presets, WiFi, calibration - everything) and restarts the device. The next boot picks up isFirstRun automatically (via the missing SD_SETTINGS_FILE) and runs the full first-time setup again, exactly like on the very first boot - no need to pull the SD card. Since this is irreversible, it requires a full-screen red warning confirmation first, reusing the same overlay previously built only for the flight-logbook enable warning (confirmLogbookEnable() generalized to confirmWarningScreen(), taking title/body StringIds as parameters). New SdStorage::deleteDirectoryRecursive() and SettingsBackup::factoryReset() implement the actual deletion + restart. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -143,4 +143,35 @@ void logEvent(const char* csvLine) {
|
||||
f.close();
|
||||
}
|
||||
|
||||
bool deleteDirectoryRecursive(const char* path) {
|
||||
File dir = SD.open(path);
|
||||
if (!dir || !dir.isDirectory()) {
|
||||
if (dir) dir.close();
|
||||
return false;
|
||||
}
|
||||
|
||||
// Gleiches vorsichtiges "entry.name() koennte relativ ODER absolut
|
||||
// sein"-Muster wie in flight_logbook.cpp::resetAllData() - anders als
|
||||
// dort aber mit echter Rekursion in Unterordner (statt sie zu
|
||||
// ueberspringen), da der Flightradar-Ordner welche enthaelt (logs/,
|
||||
// screenshots/).
|
||||
File entry = dir.openNextFile();
|
||||
while (entry) {
|
||||
bool isDir = entry.isDirectory();
|
||||
String name = String(entry.name());
|
||||
entry.close();
|
||||
|
||||
String fullPath = name.startsWith("/") ? name : String(path) + "/" + name;
|
||||
if (isDir) {
|
||||
deleteDirectoryRecursive(fullPath.c_str());
|
||||
} else {
|
||||
SD.remove(fullPath);
|
||||
}
|
||||
entry = dir.openNextFile();
|
||||
}
|
||||
dir.close();
|
||||
|
||||
return SD.rmdir(path);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user