Backup RFP Infinity controller state before Resolume changes
This commit is contained in:
@@ -335,6 +335,7 @@ bool deserializeSegment(JsonObject elem, byte it, byte presetId)
|
||||
}
|
||||
// end fix
|
||||
if (getVal(elem["fx"], &fx, 0, last)) { //load effect ('r' random, '~' inc/dec, 0-255 exact value, 5~10r pick random between 5 & 10)
|
||||
fx = rfpEffectSanitize(fx);
|
||||
if (!presetId && currentPlaylist>=0) unloadPlaylist();
|
||||
bool doLoadDefault = elem[F("fxdef")] == true;
|
||||
if (fx == FX_MODE_IMAGE) doLoadDefault = true; // WLEDMM quick fix: when called from PixelForge, images were always shown with blur
|
||||
@@ -1495,29 +1496,49 @@ void serializeNodes(JsonObject root)
|
||||
}
|
||||
|
||||
// deserializes mode data string into JsonArray
|
||||
void serializeModeData(JsonArray fxdata)
|
||||
void serializeModeData(JsonVariant root)
|
||||
{
|
||||
char lineBuffer[192] = { 0 };
|
||||
#if defined(WLED_ENABLE_INFINITY_CONTROLLER)
|
||||
JsonObject fxdata = root.to<JsonObject>();
|
||||
#else
|
||||
JsonArray fxdata = root.to<JsonArray>();
|
||||
#endif
|
||||
for (size_t i = 0; i < strip.getModeCount(); i++) {
|
||||
if (!rfpEffectIsAllowed(i)) continue;
|
||||
strncpy_P(lineBuffer, strip.getModeData(i), sizeof(lineBuffer)-1);
|
||||
if (lineBuffer[0] != 0) {
|
||||
char* dataPtr = strchr(lineBuffer,'@');
|
||||
if (dataPtr) fxdata.add(dataPtr+1);
|
||||
else fxdata.add("");
|
||||
const char* value = dataPtr ? dataPtr+1 : "";
|
||||
#if defined(WLED_ENABLE_INFINITY_CONTROLLER)
|
||||
fxdata[String(i)] = value;
|
||||
#else
|
||||
fxdata.add(value);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// deserializes mode names string into JsonArray
|
||||
// also removes effect data extensions (@...) from deserialized names
|
||||
void serializeModeNames(JsonArray arr) {
|
||||
void serializeModeNames(JsonVariant root) {
|
||||
char lineBuffer[192] = { 0 };
|
||||
#if defined(WLED_ENABLE_INFINITY_CONTROLLER)
|
||||
JsonObject arr = root.to<JsonObject>();
|
||||
#else
|
||||
JsonArray arr = root.to<JsonArray>();
|
||||
#endif
|
||||
for (size_t i = 0; i < strip.getModeCount(); i++) {
|
||||
if (!rfpEffectIsAllowed(i)) continue;
|
||||
strncpy_P(lineBuffer, strip.getModeData(i), sizeof(lineBuffer)-1);
|
||||
if (lineBuffer[0] != 0) {
|
||||
char* dataPtr = strchr(lineBuffer,'@');
|
||||
if (dataPtr) *dataPtr = 0; // terminate mode data after name
|
||||
#if defined(WLED_ENABLE_INFINITY_CONTROLLER)
|
||||
arr[String(i)] = lineBuffer;
|
||||
#else
|
||||
arr.add(lineBuffer);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1567,8 +1588,12 @@ void serveJson(AsyncWebServerRequest* request)
|
||||
else if (url.indexOf(F("eff")) > 0) {
|
||||
// this serves just effect names without FX data extensions in names
|
||||
if (requestJSONBufferLock(19)) {
|
||||
#if defined(WLED_ENABLE_INFINITY_CONTROLLER)
|
||||
AsyncJsonResponse* response = new AsyncJsonResponse(&doc, false); // RFP uses id-keyed objects
|
||||
#else
|
||||
AsyncJsonResponse* response = new AsyncJsonResponse(&doc, true); // array document
|
||||
JsonArray lDoc = response->getRoot();
|
||||
#endif
|
||||
JsonVariant lDoc = response->getRoot();
|
||||
serializeModeNames(lDoc); // remove WLED-SR extensions from effect names
|
||||
response->setLength();
|
||||
request->send(response);
|
||||
@@ -1596,7 +1621,11 @@ void serveJson(AsyncWebServerRequest* request)
|
||||
}
|
||||
// releaseJSONBufferLock() will be called when "response" is destroyed (from AsyncWebServer)
|
||||
// make sure you delete "response" if no "request->send(response);" is made
|
||||
LockedJsonResponse *response = new LockedJsonResponse(&doc, subJson==JSON_PATH_FXDATA || subJson==JSON_PATH_EFFECTS); // will clear and convert JsonDocument into JsonArray if necessary
|
||||
bool responseIsArray = subJson==JSON_PATH_FXDATA || subJson==JSON_PATH_EFFECTS;
|
||||
#if defined(WLED_ENABLE_INFINITY_CONTROLLER)
|
||||
if (subJson==JSON_PATH_FXDATA || subJson==JSON_PATH_EFFECTS) responseIsArray = false;
|
||||
#endif
|
||||
LockedJsonResponse *response = new LockedJsonResponse(&doc, responseIsArray); // will clear and convert JsonDocument into JsonArray if necessary
|
||||
|
||||
JsonVariant lDoc = response->getRoot();
|
||||
|
||||
@@ -1614,7 +1643,7 @@ void serveJson(AsyncWebServerRequest* request)
|
||||
case JSON_PATH_EFFECTS:
|
||||
serializeModeNames(lDoc); break;
|
||||
case JSON_PATH_FXDATA:
|
||||
serializeModeData(lDoc.as<JsonArray>()); break;
|
||||
serializeModeData(lDoc); break;
|
||||
case JSON_PATH_NETWORKS:
|
||||
serializeNetworks(lDoc); break;
|
||||
default: //all
|
||||
@@ -1624,7 +1653,11 @@ void serveJson(AsyncWebServerRequest* request)
|
||||
serializeInfo(info);
|
||||
if (subJson != JSON_PATH_STATE_INFO)
|
||||
{
|
||||
#if defined(WLED_ENABLE_INFINITY_CONTROLLER)
|
||||
JsonObject effects = lDoc.createNestedObject(F("effects"));
|
||||
#else
|
||||
JsonArray effects = lDoc.createNestedArray(F("effects"));
|
||||
#endif
|
||||
serializeModeNames(effects); // remove WLED-SR extensions from effect names
|
||||
lDoc[F("palettes")] = serialized((const __FlashStringHelper*)JSON_palette_names);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user