check for fresh install

This commit is contained in:
Proddy
2022-12-25 13:21:21 +01:00
parent 84589a4b40
commit 8000497302
3 changed files with 100 additions and 46 deletions

View File

@@ -1297,6 +1297,21 @@ void EMSESP::start() {
}
#endif
// do a quick scan of the filesystem to see if we have a /config folder
// so we know if this is a new install or not
#ifndef EMSESP_STANDALONE
File root = LittleFS.open("/config");
bool factory_settings = !root;
if (!root) {
#ifdef EMSESP_DEBUG
Serial.println("No config found, assuming factory settings");
#endif
}
root.close();
#else
bool factory_settings = false;
#endif
esp8266React.begin(); // loads core system services settings (network, mqtt, ap, ntp etc)
webLogService.begin(); // start web log service. now we can start capturing logs to the web log
@@ -1315,12 +1330,13 @@ void EMSESP::start() {
webSettingsService.begin(); // load EMS-ESP Application settings...
// do any system upgrades
if (system_.check_upgrade()) {
if (system_.check_upgrade(factory_settings)) {
LOG_WARNING("System needs a restart to apply new settings. Please wait.");
system_.system_restart();
};
system_.reload_settings(); // ... and store some of the settings locally
webCustomizationService.begin(); // load the customizations
// start telnet service if it's enabled

View File

@@ -19,6 +19,8 @@
#include "system.h"
#include "emsesp.h" // for send_raw_telegram() command
#include <semver200.h>
#if defined(EMSESP_DEBUG)
#include "test/test.h"
#endif
@@ -1014,44 +1016,81 @@ bool System::check_restore() {
// handle upgrades from previous versions
// returns true if we need a reboot
bool System::check_upgrade() {
std::string old_version;
bool System::check_upgrade(bool factory_settings) {
std::string settingsVersion{};
// TODO fix
// fetch current version from file
EMSESP::webSettingsService.read([&](WebSettings & settings) { settingsVersion = settings.version; });
if (version_ != EMSESP_APP_VERSION) {
if (version_.empty()) {
LOG_DEBUG("No version, presuming fresh install. Setting to %s", EMSESP_APP_VERSION);
old_version = EMSESP_APP_VERSION;
} else {
LOG_DEBUG("Going from version %s to %s", version_, EMSESP_APP_VERSION);
old_version = version_;
if (settingsVersion.empty() || (settingsVersion.length() < 5) || factory_settings) {
LOG_DEBUG("No prior version found, preparing fresh install of v%s", EMSESP_APP_VERSION);
settingsVersion = "0.0.0";
// check if its before 3.5.0b12 when we didn't store the version
// by checking ...
}
// save the new version
version_ = EMSESP_APP_VERSION;
version::Semver200_version settings_version(settingsVersion);
#ifdef EMSESP_DEBUG
LOG_NOTICE("Settings version: string %s, major %d, minor %d, patch %d, pre-release %s, build %s",
settingsVersion.c_str(),
settings_version.major(),
settings_version.minor(),
settings_version.patch(),
settings_version.build().c_str(),
settings_version.prerelease().c_str());
#endif
version::Semver200_version this_version(EMSESP_APP_VERSION);
#ifdef EMSESP_DEBUG
LOG_NOTICE("This version: string %s, major %d, minor %d, patch %d, pre-release %s, build %s",
EMSESP_APP_VERSION,
this_version.major(),
this_version.minor(),
this_version.patch(),
this_version.prerelease().c_str(),
this_version.build().c_str());
#endif
// save the new version to the settings
// TODO put back in after testing!
/*
EMSESP::webSettingsService.update(
[&](WebSettings & settings) {
settings.version = EMSESP_APP_VERSION;
return StateUpdateResult::CHANGED;
},
"local");
}
if (old_version == EMSESP_APP_VERSION) {
return false; // no upgrades or reboot needed. we're on the latest
}
LOG_DEBUG("Doing upgrade..."); // TODO remove
*/
// check variations between versions
// get major version
// get minor version
// get patch version (ignore alphanumerics)
// compare versions
bool reboot_required = false;
if (this_version > settings_version) {
LOG_NOTICE("Upgrading from version %d.%d.%d-%s to version %d.%d.%d-%s",
settings_version.major(),
settings_version.minor(),
settings_version.patch(),
settings_version.prerelease().c_str(),
this_version.major(),
this_version.minor(),
this_version.patch(),
this_version.prerelease().c_str());
} else if (this_version < settings_version) {
LOG_NOTICE("Downgrading from version %d.%d.%d-%s to version %d.%d.%d-%s",
settings_version.major(),
settings_version.minor(),
settings_version.patch(),
settings_version.prerelease().c_str(),
this_version.major(),
this_version.minor(),
this_version.patch(),
this_version.prerelease().c_str());
} else {
// same version, do nothing
return false;
}
return reboot_required;
}
@@ -1309,8 +1348,7 @@ bool System::command_info(const char * value, const int8_t id, JsonObject & outp
node["enum format"] = settings.enum_format;
node["analog enabled"] = settings.analog_enabled;
node["telnet enabled"] = settings.telnet_enabled;
node["max web log buffer"] = settings.weblog_buffer;
node["web log buffered"] = EMSESP::webLogService.num_log_messages();
node["web log buffer"] = settings.weblog_buffer;
});
// Devices - show EMS devices if we have any

View File

@@ -74,7 +74,7 @@ class System {
void reload_settings();
void wifi_tweak();
void syslog_init();
bool check_upgrade();
bool check_upgrade(bool factory_settings);
bool check_restore();
bool heartbeat_json(JsonObject & output);
void send_heartbeat();
@@ -273,7 +273,7 @@ class System {
// EMS-ESP settings
// copies from WebSettings class in WebSettingsService.h and loaded with reload_settings()
std::string hostname_ = FACTORY_WIFI_HOSTNAME;
std::string hostname_;
String locale_;
bool hide_led_;
uint8_t led_gpio_;