#include "BookSettings.h" #include #include #include namespace { constexpr uint8_t BOOK_SETTINGS_VERSION = 1; constexpr uint8_t BOOK_SETTINGS_COUNT = 1; // Number of persisted fields } // namespace std::string BookSettings::filePath(const std::string& cachePath) { return cachePath + "/book_settings.bin"; } BookSettings BookSettings::load(const std::string& cachePath) { BookSettings settings; FsFile f; if (!Storage.openFileForRead("BST", filePath(cachePath), f)) { return settings; } uint8_t version; serialization::readPod(f, version); if (version != BOOK_SETTINGS_VERSION) { f.close(); return settings; } uint8_t fieldCount; serialization::readPod(f, fieldCount); // Read fields that exist (supports older files with fewer fields) uint8_t fieldsRead = 0; do { serialization::readPod(f, settings.letterboxFillOverride); if (++fieldsRead >= fieldCount) break; // New fields added here for forward compatibility } while (false); f.close(); LOG_DBG("BST", "Loaded book settings from %s (letterboxFill=%d)", filePath(cachePath).c_str(), settings.letterboxFillOverride); return settings; } bool BookSettings::save(const std::string& cachePath, const BookSettings& settings) { FsFile f; if (!Storage.openFileForWrite("BST", filePath(cachePath), f)) { LOG_ERR("BST", "Could not save book settings!"); return false; } serialization::writePod(f, BOOK_SETTINGS_VERSION); serialization::writePod(f, BOOK_SETTINGS_COUNT); serialization::writePod(f, settings.letterboxFillOverride); // New fields added here f.close(); LOG_DBG("BST", "Saved book settings to %s", filePath(cachePath).c_str()); return true; }