#pragma once #include #include #include #include #include #include "../Activity.h" #include "./MyLibraryActivity.h" struct RecentBook; struct Rect; class HomeActivity final : public Activity { TaskHandle_t displayTaskHandle = nullptr; SemaphoreHandle_t renderingMutex = nullptr; int selectorIndex = 0; bool updateRequired = false; bool hasContinueReading = false; bool recentsLoading = false; bool recentsLoaded = false; bool recentsDisplayed = false; bool firstRenderDone = false; bool hasOpdsUrl = false; bool coverRendered = false; // Track if cover has been rendered once bool coverBufferStored = false; // Track if cover buffer is stored uint8_t* coverBuffer = nullptr; // HomeActivity's own buffer for cover image std::vector recentBooks; const std::function onSelectBook; const std::function onMyLibraryOpen; const std::function onRecentsOpen; const std::function onSettingsOpen; const std::function onFileTransferOpen; const std::function onOpdsBrowserOpen; static void taskTrampoline(void* param); [[noreturn]] void displayTaskLoop(); void render(); int getMenuItemCount() const; bool storeCoverBuffer(); // Store frame buffer for cover image bool restoreCoverBuffer(); // Restore frame buffer from stored cover void freeCoverBuffer(); // Free the stored cover buffer void loadRecentBooks(int maxBooks, int coverHeight); public: explicit HomeActivity(GfxRenderer& renderer, MappedInputManager& mappedInput, const std::function& onSelectBook, const std::function& onMyLibraryOpen, const std::function& onRecentsOpen, const std::function& onSettingsOpen, const std::function& onFileTransferOpen, const std::function& onOpdsBrowserOpen) : Activity("Home", renderer, mappedInput), onSelectBook(onSelectBook), onMyLibraryOpen(onMyLibraryOpen), onRecentsOpen(onRecentsOpen), onSettingsOpen(onSettingsOpen), onFileTransferOpen(onFileTransferOpen), onOpdsBrowserOpen(onOpdsBrowserOpen) {} void onEnter() override; void onExit() override; void loop() override; };