#pragma once #include #include "config.h" enum class CycleMode : uint8_t { Random = 0, Chronological = 1, ReverseChronological = 2, FavoritesWeighted = 3, WeightedChronological = 4, WeightedReverseChronological = 5 }; enum class ImageQuality : uint8_t { Preview = 0, Original = 1 }; enum class MetaPosition : uint8_t { // Captioned mode (full-width bar) CaptionBottom = 0, CaptionTop = 1, // Overlay mode (corner badge) OverlayTopLeft = 2, OverlayTopRight = 3, OverlayBottomLeft = 4, OverlayBottomRight = 5 }; // Metadata flags bitmask constexpr uint8_t META_DATE = 0x01; constexpr uint8_t META_TIME = 0x20; constexpr uint8_t META_LOCATION = 0x02; constexpr uint8_t META_PEOPLE = 0x04; constexpr uint8_t META_ALBUM = 0x08; constexpr uint8_t META_CAMERA = 0x10; struct Settings { // WiFi String wifi_ssid; String wifi_pass; // Immich String immich_url; String immich_key; // Slideshow uint8_t interval_min; CycleMode cycle_mode; ImageQuality img_quality; // Display uint8_t meta_flags; MetaPosition meta_pos; String date_fmt; // strftime-style, default "%Y-%m-%d" String time_fmt; // strftime-style, default "%H:%M:%S" // Image pipeline uint8_t pipeline_mode; // 0=dynamic, 1=balanced, 2=none uint8_t dither_noise; // 1=blue noise dither smoothing ON, 0=OFF // Device uint8_t led_brightness; uint8_t show_battery; // 1 = show battery indicator on display uint32_t queue_cursor; String albums_json; }; class SettingsManager { public: void begin(); Settings get(); void save(const Settings& s); void saveField(const char* key, uint8_t value); void saveField(const char* key, uint32_t value); void saveField(const char* key, const char* value); void factoryReset(); bool isProvisioned(); private: String readString(const char* key, const char* defaultValue = ""); uint8_t readU8(const char* key, uint8_t defaultValue = 0); uint32_t readU32(const char* key, uint32_t defaultValue = 0); void writeString(const char* key, const String& value); void writeU8(const char* key, uint8_t value); void writeU32(const char* key, uint32_t value); };