diff --git a/src/main.cpp b/src/main.cpp index 3a733cc..2a331e9 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -51,7 +51,7 @@ void unlock() } bool isConnecting = false; -void initWifi(YAMLNode *settings) +void initWifi(Settings *settings) { if (!settings) { @@ -98,7 +98,7 @@ void initWifi(YAMLNode *settings) } } -void initTOTP(YAMLNode *settings) +void initTOTP(Settings *settings) { uint8_t *base32_key = new uint8_t[20]; const char *hmac = ((String)settings->gettext("totp:hmac")).c_str(); @@ -118,7 +118,7 @@ void setup() keypad_init(); keypad_write("loading"); - auto settings = settings_load(); + auto settings = new Settings(); if (!settings) { @@ -132,8 +132,6 @@ void setup() mqtt->connect(); setupTime(); initTOTP(settings); - - // lock(); } void submit(String code) diff --git a/src/mqtt.cpp b/src/mqtt.cpp index 50b4782..16f6fa8 100644 --- a/src/mqtt.cpp +++ b/src/mqtt.cpp @@ -5,7 +5,7 @@ WiFiClient wifiClient; -MQTT::MQTT(YAMLNode *settings, MQTT_CALLBACK_SIGNATURE) +MQTT::MQTT(Settings *settings, MQTT_CALLBACK_SIGNATURE) { IPAddress ip; if (!ip.fromString(settings->gettext("mqtt:hostname"))) diff --git a/src/mqtt.hpp b/src/mqtt.hpp index 02329d2..eee669d 100644 --- a/src/mqtt.hpp +++ b/src/mqtt.hpp @@ -4,20 +4,19 @@ #include #include -#include -#include +#include "settings.hpp" class MQTT { public: - MQTT(YAMLNode *settings, MQTT_CALLBACK_SIGNATURE); + MQTT(Settings *settings, MQTT_CALLBACK_SIGNATURE); void connect(); void send(String); void loop(); private: - YAMLNode *settings = nullptr; + Settings *settings = nullptr; PubSubClient *client = nullptr; }; diff --git a/src/settings.cpp b/src/settings.cpp index 8309194..bbf68e0 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -1,18 +1,21 @@ #include "settings.hpp" #include -YAMLNode *settings_load() +Settings::Settings() { Serial.println("Loading settings"); if (!SD.exists("/settings.yml")) { Serial.println("settings.yml not found"); - return nullptr; + return; } File settingsFile = SD.open("/settings.yml"); - YAMLNode node = YAMLNode::loadStream(settingsFile); + this->yaml = YAMLNode::loadStream(settingsFile); settingsFile.close(); +} - return new YAMLNode(node); -} \ No newline at end of file +const char *Settings::gettext(const char *path, char delimiter) +{ + return this->yaml.gettext(path, delimiter); +} diff --git a/src/settings.hpp b/src/settings.hpp index bea5aa4..53b33a7 100644 --- a/src/settings.hpp +++ b/src/settings.hpp @@ -4,6 +4,14 @@ #include #include -YAMLNode *settings_load(); +class Settings +{ +public: + Settings(); + const char *gettext(const char *path, char delimiter = (char)58); + +private: + YAMLNode yaml; +}; #endif \ No newline at end of file