MCPcopy Create free account
hub / github.com/FastLED/FastLED / setJsonUiHandlers

Function setJsonUiHandlers

src/platforms/shared/ui/json/ui.cpp.hpp:27–85  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

25}
26
27JsonUiUpdateInput setJsonUiHandlers(const JsonUiUpdateOutput& updateJsHandler) FL_NOEXCEPT {
28 // FL_WARN("setJsonUiHandlers: ENTRY - updateJsHandler is " << (updateJsHandler ? "VALID" : "nullptr/EMPTY"));
29
30 // Create internal JsonUiManager only if updateJsHandler is valid (not empty)
31 if (updateJsHandler) {
32 // FL_WARN("setJsonUiHandlers: updateJsHandler is valid, creating JsonUiManager");
33 auto& manager = getInternalManager();
34 // FL_WARN("setJsonUiHandlers: Old manager pointer=" << manager.get());
35
36 // Only create a new manager if one doesn't exist
37 // This prevents destroying existing components when called multiple times
38
39 if (!manager) {
40 manager = fl::make_unique<JsonUiManager>(updateJsHandler);
41 } else {
42 manager->resetCallback(updateJsHandler);
43 }
44
45 // Flush any pending components to the internal manager
46 auto& pending = getPendingComponents();
47 if (!pending.empty()) {
48 // FL_WARN("Flushing " << pending.size() << " pending UI components to internal JsonUiManager");
49 for (const auto& component : pending) {
50 // Only add components that are still valid (not destroyed)
51 if (!component.expired()) {
52 manager->addComponent(component);
53 }
54 }
55 pending.clear();
56 } else {
57 // FL_WARN("setJsonUiHandlers: No pending components to flush");
58 }
59
60 // Return a function that allows updating the driver state
61 // FL_WARN("setJsonUiHandlers: Creating and returning updateEngineState lambda");
62 auto result = fl::function<void(const char*)>([](const char* jsonStr) FL_NOEXCEPT {
63 // FL_WARN("*** updateEngineState lambda CALLED ***");
64 // FL_WARN("*** updateEngineState lambda ENTRY: jsonStr=" << (jsonStr ? jsonStr : "nullptr"));
65 // FL_WARN("*** updateEngineState lambda JSON LENGTH: " << (jsonStr ? strlen(jsonStr) : 0));
66 auto& manager = getInternalManager();
67 // FL_WARN("*** updateEngineState lambda: manager pointer=" << manager.get());
68 if (manager) {
69 // FL_WARN("*** updateEngineState lambda: manager exists, calling updateUiComponents");
70 // FL_WARN("*** updateEngineState lambda: PASSING JSON TO MANAGER: " << (jsonStr ? jsonStr : "nullptr"));
71 manager->updateUiComponents(jsonStr);
72 // FL_WARN("*** updateEngineState lambda: updateUiComponents completed");
73 } else {
74 FL_WARN("*** updateEngineState lambda: NO MANAGER EXISTS!");
75 }
76 });
77 // FL_WARN("setJsonUiHandlers: updateEngineState lambda created, returning it (is " << (result ? "VALID" : "nullptr") << ")");
78 return result;
79 } else {
80 // No updateJs handler, clear any existing internal manager
81 auto& manager = getInternalManager();
82 manager.reset(); // Clear the internal manager
83 return fl::function<void(const char*)>{};
84 }

Callers 4

initMethod · 0.85
FL_TEST_FILEFunction · 0.85
FL_TEST_FILEFunction · 0.85

Calls 7

resetCallbackMethod · 0.80
expiredMethod · 0.80
addComponentMethod · 0.80
emptyMethod · 0.45
clearMethod · 0.45
updateUiComponentsMethod · 0.45
resetMethod · 0.45

Tested by

no test coverage detected