MCPcopy Create free account
hub / github.com/crosspoint-reader/crosspoint-reader / handlePostSettings

Method handlePostSettings

src/network/CrossPointWebServer.cpp:1197–1272  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1195}
1196
1197void CrossPointWebServer::handlePostSettings() {
1198 if (!server->hasArg("plain")) {
1199 server->send(400, "text/plain", "Missing JSON body");
1200 return;
1201 }
1202
1203 const String body = server->arg("plain");
1204 JsonDocument doc;
1205 const DeserializationError err = deserializeJson(doc, body);
1206 if (err) {
1207 server->send(400, "text/plain", String("Invalid JSON: ") + err.c_str());
1208 return;
1209 }
1210
1211 const auto& settings = getSettingsList(&sdFontSystem.registry());
1212 int applied = 0;
1213
1214 for (const auto& s : settings) {
1215 if (!s.key) continue;
1216 if (!doc[s.key].is<JsonVariant>()) continue;
1217
1218 switch (s.type) {
1219 case SettingType::TOGGLE: {
1220 const int val = doc[s.key].as<int>() ? 1 : 0;
1221 if (s.valuePtr) {
1222 SETTINGS.*(s.valuePtr) = val;
1223 }
1224 applied++;
1225 break;
1226 }
1227 case SettingType::ENUM: {
1228 const int val = doc[s.key].as<int>();
1229 const int maxVal = s.enumStringValues.empty() ? static_cast<int>(s.enumValues.size())
1230 : static_cast<int>(s.enumStringValues.size());
1231 if (val >= 0 && val < maxVal) {
1232 if (s.valuePtr) {
1233 SETTINGS.*(s.valuePtr) = static_cast<uint8_t>(val);
1234 } else if (s.valueSetter) {
1235 s.valueSetter(static_cast<uint8_t>(val));
1236 }
1237 applied++;
1238 }
1239 break;
1240 }
1241 case SettingType::VALUE: {
1242 const int val = doc[s.key].as<int>();
1243 if (val >= s.valueRange.min && val <= s.valueRange.max) {
1244 if (s.valuePtr) {
1245 SETTINGS.*(s.valuePtr) = static_cast<uint8_t>(val);
1246 }
1247 applied++;
1248 }
1249 break;
1250 }
1251 case SettingType::STRING: {
1252 const std::string val = doc[s.key].as<std::string>();
1253 if (s.stringSetter) {
1254 s.stringSetter(val);

Callers

nothing calls this directly

Calls 4

getSettingsListFunction · 0.85
emptyMethod · 0.45
sizeMethod · 0.45
saveToFileMethod · 0.45

Tested by

no test coverage detected