#pragma once #include #include #include "settings.h" class ImmichClient; class PhotoQueue { public: void begin(ImmichClient& client, SettingsManager& settings); bool sync(); String next(); String random(); String current(); size_t size(); bool needsResync(); String findNextPortrait(); private: ImmichClient* _client = nullptr; SettingsManager* _settings = nullptr; std::vector _queue; std::vector _shown; // Recently shown IDs for dedup on refill size_t _cursor = 0; unsigned long _lastSyncTime = 0; unsigned long _lastSyncAttempt = 0; unsigned long _syncRetryDelay = 10000; static constexpr unsigned long SYNC_RETRY_MIN = 10000; // 10 seconds static constexpr unsigned long SYNC_RETRY_MAX = 300000; // 5 minutes static constexpr size_t TARGET_QUEUE_SIZE = 50; static constexpr int MAX_FETCH_ROUNDS = 5; static constexpr size_t MAX_SHOWN_HISTORY = 200; void shuffle(); void sortChronological(bool reverse); void applyFavoritesWeighting(); std::vector getSelectedAlbumIds(); };