Fix settings serialization

This commit is contained in:
Konstantin Vukolov 2026-01-22 19:09:58 +03:00
parent 3fea4d52fb
commit a6643b2c33

View File

@ -14,7 +14,7 @@ CrossPointSettings CrossPointSettings::instance;
namespace {
constexpr uint8_t SETTINGS_FILE_VERSION = 1;
// Increment this when adding new persisted settings fields
constexpr uint8_t SETTINGS_COUNT = 20;
constexpr uint8_t SETTINGS_COUNT = 21;
constexpr char SETTINGS_FILE[] = "/.crosspoint/settings.bin";
} // namespace
@ -45,11 +45,11 @@ bool CrossPointSettings::saveToFile() const {
serialization::writePod(outputFile, screenMargin);
serialization::writePod(outputFile, sleepScreenCoverMode);
serialization::writeString(outputFile, std::string(opdsServerUrl));
serialization::writeString(outputFile, std::string(opdsPath));
serialization::writePod(outputFile, textAntiAliasing);
serialization::writePod(outputFile, hideBatteryPercentage);
serialization::writePod(outputFile, longPressChapterSkip);
serialization::writePod(outputFile, hyphenationEnabled);
serialization::writeString(outputFile, std::string(opdsPath));
outputFile.close();
Serial.printf("[%lu] [CPS] Settings saved to file\n", millis());
@ -113,13 +113,6 @@ bool CrossPointSettings::loadFromFile() {
opdsServerUrl[sizeof(opdsServerUrl) - 1] = '\0';
}
if (++settingsRead >= fileSettingsCount) break;
{
std::string urlPath;
serialization::readString(inputFile, urlPath);
strncpy(opdsPath, urlPath.c_str(), sizeof(opdsPath) - 1);
opdsPath[sizeof(opdsPath) - 1] = '\0';
}
if (++settingsRead >= fileSettingsCount) break;
serialization::readPod(inputFile, textAntiAliasing);
if (++settingsRead >= fileSettingsCount) break;
serialization::readPod(inputFile, hideBatteryPercentage);
@ -128,6 +121,13 @@ bool CrossPointSettings::loadFromFile() {
if (++settingsRead >= fileSettingsCount) break;
serialization::readPod(inputFile, hyphenationEnabled);
if (++settingsRead >= fileSettingsCount) break;
if (++settingsRead >= fileSettingsCount) break;
{
std::string urlPath;
serialization::readString(inputFile, urlPath);
strncpy(opdsPath, urlPath.c_str(), sizeof(opdsPath) - 1);
opdsPath[sizeof(opdsPath) - 1] = '\0';
}
} while (false);
inputFile.close();