Compare commits

..

No commits in common. "0725e815007f7b9d9468a26da27fe3f3f47b46e7" and "fedfb80258ac08867a0c52303eb4ed6d9b8f071b" have entirely different histories.

6 changed files with 16 additions and 19 deletions

View File

@ -14,7 +14,7 @@ CrossPointSettings CrossPointSettings::instance;
namespace { namespace {
constexpr uint8_t SETTINGS_FILE_VERSION = 1; constexpr uint8_t SETTINGS_FILE_VERSION = 1;
// Increment this when adding new persisted settings fields // Increment this when adding new persisted settings fields
constexpr uint8_t SETTINGS_COUNT = 17; constexpr uint8_t SETTINGS_COUNT = 18;
constexpr char SETTINGS_FILE[] = "/.crosspoint/settings.bin"; constexpr char SETTINGS_FILE[] = "/.crosspoint/settings.bin";
} // namespace } // namespace
@ -46,6 +46,7 @@ bool CrossPointSettings::saveToFile() const {
serialization::writePod(outputFile, sleepScreenCoverMode); serialization::writePod(outputFile, sleepScreenCoverMode);
serialization::writeString(outputFile, std::string(opdsServerUrl)); serialization::writeString(outputFile, std::string(opdsServerUrl));
serialization::writePod(outputFile, textAntiAliasing); serialization::writePod(outputFile, textAntiAliasing);
serialization::writePod(outputFile, lastUsedSleep);
outputFile.close(); outputFile.close();
Serial.printf("[%lu] [CPS] Settings saved to file\n", millis()); Serial.printf("[%lu] [CPS] Settings saved to file\n", millis());
@ -110,6 +111,8 @@ bool CrossPointSettings::loadFromFile() {
} }
serialization::readPod(inputFile, textAntiAliasing); serialization::readPod(inputFile, textAntiAliasing);
if (++settingsRead >= fileSettingsCount) break; if (++settingsRead >= fileSettingsCount) break;
serialization::readPod(inputFile, lastUsedSleep);
if (++settingsRead >= fileSettingsCount) break;
} while (false); } while (false);
inputFile.close(); inputFile.close();

View File

@ -82,6 +82,8 @@ class CrossPointSettings {
uint8_t screenMargin = 5; uint8_t screenMargin = 5;
// OPDS browser settings // OPDS browser settings
char opdsServerUrl[128] = ""; char opdsServerUrl[128] = "";
// Last used sleep screen index (for custom screens)
uint8_t lastUsedSleep = 0;
~CrossPointSettings() = default; ~CrossPointSettings() = default;

View File

@ -5,7 +5,7 @@
#include <Serialization.h> #include <Serialization.h>
namespace { namespace {
constexpr uint8_t STATE_FILE_VERSION = 2; constexpr uint8_t STATE_FILE_VERSION = 1;
constexpr char STATE_FILE[] = "/.crosspoint/state.bin"; constexpr char STATE_FILE[] = "/.crosspoint/state.bin";
} // namespace } // namespace
@ -19,7 +19,6 @@ bool CrossPointState::saveToFile() const {
serialization::writePod(outputFile, STATE_FILE_VERSION); serialization::writePod(outputFile, STATE_FILE_VERSION);
serialization::writeString(outputFile, openEpubPath); serialization::writeString(outputFile, openEpubPath);
serialization::writePod(outputFile, lastSleepImage);
outputFile.close(); outputFile.close();
return true; return true;
} }
@ -32,18 +31,13 @@ bool CrossPointState::loadFromFile() {
uint8_t version; uint8_t version;
serialization::readPod(inputFile, version); serialization::readPod(inputFile, version);
if (version > STATE_FILE_VERSION) { if (version != STATE_FILE_VERSION) {
Serial.printf("[%lu] [CPS] Deserialization failed: Unknown version %u\n", millis(), version); Serial.printf("[%lu] [CPS] Deserialization failed: Unknown version %u\n", millis(), version);
inputFile.close(); inputFile.close();
return false; return false;
} }
serialization::readString(inputFile, openEpubPath); serialization::readString(inputFile, openEpubPath);
if (version >= 2) {
serialization::readPod(inputFile, lastSleepImage);
} else {
lastSleepImage = 0;
}
inputFile.close(); inputFile.close();
return true; return true;

View File

@ -8,7 +8,6 @@ class CrossPointState {
public: public:
std::string openEpubPath; std::string openEpubPath;
uint8_t lastSleepImage;
~CrossPointState() = default; ~CrossPointState() = default;
// Get singleton instance // Get singleton instance

View File

@ -80,14 +80,14 @@ void SleepActivity::renderCustomSleepScreen() const {
const auto numFiles = files.size(); const auto numFiles = files.size();
if (numFiles > 0) { if (numFiles > 0) {
// Generate a random number between 1 and numFiles // Generate a random number between 1 and numFiles
auto randomFileIndex = random(numFiles); const auto randomFileIndex = random(numFiles);
// If we picked the same image as last time, reroll // If we re-generated the same index as the last sleep screen,
while (numFiles > 1 && randomFileIndex == APP_STATE.lastSleepImage) { // use the next one (modulo the number of files we have)
randomFileIndex = random(numFiles); const auto realFileIndex =
} randomFileIndex == SETTINGS.lastUsedSleep ? randomFileIndex + 1 % numFiles : randomFileIndex;
APP_STATE.lastSleepImage = randomFileIndex; SETTINGS.lastUsedSleep = realFileIndex;
APP_STATE.saveToFile(); SETTINGS.saveToFile();
const auto filename = "/sleep/" + files[randomFileIndex]; const auto filename = "/sleep/" + files[realFileIndex];
FsFile file; FsFile file;
if (SdMan.openFileForRead("SLP", filename, file)) { if (SdMan.openFileForRead("SLP", filename, file)) {
Serial.printf("[%lu] [SLP] Randomly loading: /sleep/%s\n", millis(), files[randomFileIndex].c_str()); Serial.printf("[%lu] [SLP] Randomly loading: /sleep/%s\n", millis(), files[randomFileIndex].c_str());

View File

@ -303,7 +303,6 @@ void setup() {
// Clear app state to avoid getting into a boot loop if the epub doesn't load // Clear app state to avoid getting into a boot loop if the epub doesn't load
const auto path = APP_STATE.openEpubPath; const auto path = APP_STATE.openEpubPath;
APP_STATE.openEpubPath = ""; APP_STATE.openEpubPath = "";
APP_STATE.lastSleepImage = 0;
APP_STATE.saveToFile(); APP_STATE.saveToFile();
onGoToReader(path); onGoToReader(path);
} }