8 std::map<String, String>
Settings::store;
19 if (!validName(filename)) {
23 if (!SPIFFS.begin(
true)) {
24 ERROR(
"ERROR: Could not open SPIFFS filesystem.\n");
27 File file = SPIFFS.open(actual_filename, FILE_WRITE);
29 ERROR(
"ERROR: Could not open file '%s' for writing.\n", filename.c_str(), FILE_WRITE);
32 String contents = list() +
"\n";
33 if (!file.print(contents)) {
34 ERROR(
"ERROR: Could not save settings to flash.\n");
37 INFO(
"Saved settings to file '%s'.\n", filename.c_str());
45 if (!validName(filename)) {
49 if (!SPIFFS.begin(
true)) {
50 ERROR(
"ERROR: Could not open SPIFFS filesystem.\n");
53 File file = SPIFFS.open(actual_filename);
54 if (!file || !SPIFFS.exists(actual_filename)) {
55 ERROR(
"ERROR: Could not open file '%s'.\n", filename.c_str());
59 while(file.available()) {
60 contents +=
char(file.read());
62 INFO (
"Loaded settings from file '%s'.\n", filename.c_str());
63 return fromList(contents);
69 if (!SPIFFS.begin(
true)) {
70 ERROR(
"ERROR: Could not open SPIFFS filesystem.\n");
74 File file = root.openNextFile();
76 INFO(
"%s\n", file.name());
77 file = root.openNextFile();
87 if (!SPIFFS.begin(
true)) {
88 ERROR(
"ERROR: Could not open SPIFFS filesystem.\n");
91 if (SPIFFS.remove(actual_filename)) {
92 INFO(
"File '%s' deleted.\n", filename.c_str());
95 ERROR(
"ERROR: rm '%s': file not found.\n", filename);
104 if (!validName(filename)) {
107 if (!SPIFFS.begin(
true)) {
108 ERROR(
"ERROR: Could not open SPIFFS filesystem. On Arduino IDE, check Tools/Partition Scheme to make sure\n you are set up to have SPIFFS.\n");
111 return SPIFFS.exists(actual_filename);
125 int lf = in.indexOf(
"\n");
129 String this_one = in.substring(0, lf);
130 int equals_sign = this_one.indexOf(
"=");
131 if (equals_sign != -1) {
132 store[this_one.substring(0, equals_sign)] = this_one.substring(equals_sign + 1);
134 store[this_one.substring(0, equals_sign)] =
"";
136 in = in.substring(lf + 1);
144 if (name.length() == 0) {
145 ERROR(
"ERROR: name cannot be empty.\n");
148 for (
int n = 0; n < name.length(); n++) {
149 if (!isAlphaNumeric(name.charAt(n)) && name.charAt(n) !=
'_') {
150 ERROR(
"ERROR: name '%s' contains illegal character.\n", name.c_str());
161 for (
const auto& pair: store) {
163 if (pair.second ==
"") {
173 res = res.substring(0, res.length() - 1);
181 return store.count(name);
188 bool Settings::set(
const String &name,
const String &value) {
189 if (!validName(name)) {
200 if (!validName(name) || !isSet(name)) {
211 bool Settings::get(
const String &name, String &value) {
223 bool Settings::get(
const String &name,
float &value) {
225 if (get(name, val_string)) {
226 value = val_string.toFloat();
237 bool Settings::get(
const String &name,
int &value) {
239 if (get(name, val_string)) {
240 value = val_string.toInt();
251 bool Settings::get(
const String &name,
long &value) {
253 if (get(name, val_string)) {
254 value = val_string.toInt();
265 String
Settings::getString(
const String &name,
const String dflt) {
276 int Settings::getInt(
const String &name,
const long dflt) {
278 return store[name].toInt();
287 long Settings::getLong(
const String &name,
const long dflt) {
289 return store[name].toInt();
298 float Settings:: getFloat(
const String &name,
const float dflt) {
300 return store[name].toFloat();