#pragma once #include #include #include #include "../ActivityWithSubactivity.h" #include "RecentBooksStore.h" #include "util/ButtonNavigator.h" class MyLibraryActivity final : public ActivityWithSubactivity { private: ButtonNavigator buttonNavigator; size_t selectorIndex = 0; // Files state std::string basepath = "/"; std::vector files; // Long-press state bool ignoreNextConfirmRelease = false; static constexpr unsigned long LONG_PRESS_MS = 700; // Deferred open: wait for Confirm release before navigating to book std::string pendingOpenPath; // Callbacks const std::function onSelectBook; const std::function onGoHome; // Data loading void loadFiles(); size_t findEntry(const std::string& name) const; bool isInArchive() const; void openManageMenu(const std::string& bookPath); void unarchiveAndOpen(const std::string& bookPath); public: explicit MyLibraryActivity(GfxRenderer& renderer, MappedInputManager& mappedInput, const std::function& onGoHome, const std::function& onSelectBook, std::string initialPath = "/", bool initialSkipRelease = false) : ActivityWithSubactivity("MyLibrary", renderer, mappedInput), basepath(initialPath.empty() ? "/" : std::move(initialPath)), ignoreNextConfirmRelease(initialSkipRelease), onSelectBook(onSelectBook), onGoHome(onGoHome) {} void onEnter() override; void onExit() override; void loop() override; void render(Activity::RenderLock&&) override; };