#pragma once #include #include #include #include #include #include #include "../Activity.h" #include "RecentBooksStore.h" class MyLibraryActivity final : public Activity { public: enum class Tab { Recent, Files }; private: TaskHandle_t displayTaskHandle = nullptr; SemaphoreHandle_t renderingMutex = nullptr; Tab currentTab = Tab::Recent; size_t selectorIndex = 0; bool updateRequired = false; // Recent tab state std::vector recentBooks; // Files tab state (from FileSelectionActivity) std::string basepath = "/"; std::vector files; // Callbacks const std::function onSelectBook; const std::function onGoHome; static void taskTrampoline(void* param); [[noreturn]] void displayTaskLoop(); void render() const; // Data loading void loadRecentBooks(); void loadFiles(); size_t findEntry(const std::string& name) const; public: explicit MyLibraryActivity(GfxRenderer& renderer, MappedInputManager& mappedInput, const std::function& onGoHome, const std::function& onSelectBook, Tab initialTab = Tab::Recent, std::string initialPath = "/") : Activity("MyLibrary", renderer, mappedInput), basepath(initialPath.empty() ? "/" : std::move(initialPath)), currentTab(initialTab), onSelectBook(onSelectBook), onGoHome(onGoHome) {} void onEnter() override; void onExit() override; void loop() override; };