This commit is contained in:
Arthur Tazhitdinov 2025-12-16 15:19:09 +00:00 committed by GitHub
commit a3efa6d104
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 19 additions and 13 deletions

View File

@ -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:
if (fileSettingsCount >= 1) {
serialization::readPod(inputFile, whiteSleepScreen);
}
if (fileSettingsCount >= 2) {
serialization::readPod(inputFile, extraParagraphSpacing);
break;
}
if (fileSettingsCount >= 3) {
serialization::readPod(inputFile, autoResumeLastBook);
}
inputFile.close();

View File

@ -21,6 +21,9 @@ class CrossPointSettings {
// Text rendering settings
uint8_t extraParagraphSpacing = 1;
// Resume behavior
uint8_t autoResumeLastBook = 1;
~CrossPointSettings() = default;
// Get singleton instance

View File

@ -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();

View File

@ -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},
{"Auto-Resume Last Book", &CrossPointSettings::autoResumeLastBook}};
void SettingsScreen::taskTrampoline(void* param) {
auto* self = static_cast<SettingsScreen*>(param);

View File

@ -25,7 +25,7 @@ class SettingsScreen final : public Screen {
const std::function<void()> 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);