rgbwifi/src/settings/abstractjson.cpp

89 lines
1.7 KiB
C++

/*
* ESP8266 RGBW controller
* Copyright 2020 (c) Mark van Renswoude
*
* https://git.x2software.net/pub/RGBWifi
*/
#include "./abstractjson.h"
#include <LittleFS.h>
void AbstractJsonSettings::read()
{
_d(getDebugPrefix()); _dln(" :: opening file");
File settingsFile = LittleFS.open(getFilename(), "r");
if (!settingsFile)
{
_d(getDebugPrefix()); _dln(" :: failed to open file");
return;
}
size_t size = settingsFile.size();
if (size > 1024)
{
_d(getDebugPrefix()); _dln(" :: file size is too large");
return;
}
if (size == 0)
{
_d(getDebugPrefix()); _dln(" :: zero size file");
return;
}
std::unique_ptr<char[]> buf(new char[size]);
settingsFile.readBytes(buf.get(), size);
settingsFile.close();
_dln(buf.get());
if (fromJson(buf.get()))
{
_d(getDebugPrefix());
_dln(" :: read from file");
}
else
{
_d(getDebugPrefix());
_dln(" :: failed to parse file");
}
}
void AbstractJsonSettings::write()
{
_d(getDebugPrefix()); _dln(" :: opening file for writing");
File settingsFile = LittleFS.open(getFilename(), "w");
if (!settingsFile)
{
_d(getDebugPrefix()); _dln(" :: failed to open file for writing");
return;
}
toJson(settingsFile);
settingsFile.close();
_d(getDebugPrefix()); _dln(" :: written to file");
}
bool AbstractJsonSettings::fromJson(char* data, bool* changed)
{
DynamicJsonDocument jsonDocument(1024);
auto error = deserializeJson(jsonDocument, data);
if (error)
{
_d("JSON deserialization failed: "); _dln(error.c_str());
return false;
}
JsonVariant jsonVariant = jsonDocument.as<JsonVariant>();
return fromJson(jsonVariant, changed);
}
bool AbstractJsonSettings::fromJson(char* data)
{
return fromJson(data, nullptr);
}