diff --git a/src/CrossPointSettings.cpp b/src/CrossPointSettings.cpp index 8d3a40e..885b4b6 100644 --- a/src/CrossPointSettings.cpp +++ b/src/CrossPointSettings.cpp @@ -11,7 +11,7 @@ CrossPointSettings CrossPointSettings::instance; constexpr uint8_t SETTINGS_FILE_VERSION = 1; -constexpr uint8_t SETTINGS_COUNT = 2; +constexpr uint8_t SETTINGS_COUNT = 3; constexpr char SETTINGS_FILE[] = "/sd/.crosspoint/settings.bin"; bool CrossPointSettings::saveToFile() const { @@ -23,6 +23,7 @@ bool CrossPointSettings::saveToFile() const { serialization::writePod(outputFile, SETTINGS_COUNT); serialization::writePod(outputFile, whiteSleepScreen); serialization::writePod(outputFile, extraParagraphSpacing); + serialization::writePod(outputFile, autoResumeLastBook); outputFile.close(); Serial.printf("[%lu] [CPS] Settings saved to file\n", millis()); @@ -48,15 +49,16 @@ bool CrossPointSettings::loadFromFile() { uint8_t fileSettingsCount = 0; serialization::readPod(inputFile, fileSettingsCount); - // load settings that exist - switch (fileSettingsCount) { - case 1: - serialization::readPod(inputFile, whiteSleepScreen); - break; - case 2: - serialization::readPod(inputFile, whiteSleepScreen); - serialization::readPod(inputFile, extraParagraphSpacing); - break; + if (fileSettingsCount >= 1) { + serialization::readPod(inputFile, whiteSleepScreen); + } + + if (fileSettingsCount >= 2) { + serialization::readPod(inputFile, extraParagraphSpacing); + } + + if (fileSettingsCount >= 3) { + serialization::readPod(inputFile, autoResumeLastBook); } inputFile.close(); diff --git a/src/CrossPointSettings.h b/src/CrossPointSettings.h index b152eb7..e9a9e56 100644 --- a/src/CrossPointSettings.h +++ b/src/CrossPointSettings.h @@ -21,6 +21,9 @@ class CrossPointSettings { // Text rendering settings uint8_t extraParagraphSpacing = 1; + // Resume behavior + uint8_t autoResumeLastBook = 1; + ~CrossPointSettings() = default; // Get singleton instance diff --git a/src/main.cpp b/src/main.cpp index eb3bc0b..1ed9625 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -210,7 +210,7 @@ void setup() { SETTINGS.loadFromFile(); appState.loadFromFile(); - if (!appState.openEpubPath.empty()) { + if (SETTINGS.autoResumeLastBook && !appState.openEpubPath.empty()) { auto epub = loadEpub(appState.openEpubPath); if (epub) { exitScreen(); diff --git a/src/screens/SettingsScreen.cpp b/src/screens/SettingsScreen.cpp index e970752..a8d83fb 100644 --- a/src/screens/SettingsScreen.cpp +++ b/src/screens/SettingsScreen.cpp @@ -9,7 +9,8 @@ const SettingInfo SettingsScreen::settingsList[SettingsScreen::settingsCount] = { {"White Sleep Screen", &CrossPointSettings::whiteSleepScreen}, - {"Extra Paragraph Spacing", &CrossPointSettings::extraParagraphSpacing}}; + {"Extra Paragraph Spacing", &CrossPointSettings::extraParagraphSpacing}, + {"Resume Last Book", &CrossPointSettings::autoResumeLastBook}}; void SettingsScreen::taskTrampoline(void* param) { auto* self = static_cast(param); diff --git a/src/screens/SettingsScreen.h b/src/screens/SettingsScreen.h index 8de45b8..0979b59 100644 --- a/src/screens/SettingsScreen.h +++ b/src/screens/SettingsScreen.h @@ -25,7 +25,7 @@ class SettingsScreen final : public Screen { const std::function onGoHome; // Static settings list - static constexpr int settingsCount = 2; // Number of settings + static constexpr int settingsCount = 3; // Number of settings static const SettingInfo settingsList[settingsCount]; static void taskTrampoline(void* param);