#pragma once #include #include #include #include #include "OpdsServerStore.h" #include "activities/Activity.h" #include "util/ButtonNavigator.h" /** * Activity for browsing and downloading books from an OPDS server. * Supports navigation through catalog hierarchy and downloading EPUBs. */ class OpdsBookBrowserActivity final : public Activity { public: enum class BrowserState { CHECK_WIFI, WIFI_SELECTION, LOADING, BROWSING, DOWNLOADING, ERROR, SEARCH_INPUT }; explicit OpdsBookBrowserActivity(GfxRenderer& renderer, MappedInputManager& mappedInput, OpdsServer server) : Activity("OpdsBookBrowser", renderer, mappedInput), buttonNavigator(), server(std::move(server)) {} void onEnter() override; void onExit() override; void loop() override; void render(RenderLock&&) override; private: ButtonNavigator buttonNavigator; BrowserState state = BrowserState::LOADING; std::vector entries; std::vector navigationHistory; std::string currentPath; std::string searchTemplate; bool consumeConfirm = false; bool consumeBack = false; // Added missing member int selectorIndex = 0; std::string errorMessage; std::string statusMessage; size_t downloadProgress = 0; size_t downloadTotal = 0; OpdsServer server; // Copied at construction — safe even if the store changes during browsing void checkAndConnectWifi(); void launchWifiSelection(); void onWifiSelectionComplete(bool connected); void fetchFeed(const std::string& path); void navigateToEntry(const OpdsEntry& entry); void navigateBack(); void downloadBook(const OpdsEntry& book); void launchSearch(); void performSearch(const std::string& query); bool preventAutoSleep() override { return true; } };