From 0db005629e816d130efb25546b7ce7d5c3701e68 Mon Sep 17 00:00:00 2001 From: jpirnay Date: Wed, 8 Apr 2026 16:04:22 +0200 Subject: [PATCH] Async processing of thumbnails --- src/activities/home/HomeActivity.cpp | 20 +++++++++++++++++--- src/activities/home/HomeActivity.h | 2 ++ 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/activities/home/HomeActivity.cpp b/src/activities/home/HomeActivity.cpp index 730fbc8a..3d3ac5e1 100644 --- a/src/activities/home/HomeActivity.cpp +++ b/src/activities/home/HomeActivity.cpp @@ -132,8 +132,8 @@ void HomeActivity::loadRecentBooks(int maxBooks) { void HomeActivity::loadRecentCovers(int coverHeight) { recentsLoading = true; - int progress = 0; - for (RecentBook& book : recentBooks) { + for (; nextRecentCoverIndex < recentBooks.size(); nextRecentCoverIndex++) { + RecentBook& book = recentBooks[nextRecentCoverIndex]; if (!book.coverBmpPath.empty()) { std::string coverPath = UITheme::getCoverThumbPath(book.coverBmpPath, coverHeight); if (!Storage.exists(coverPath.c_str())) { @@ -150,7 +150,10 @@ void HomeActivity::loadRecentCovers(int coverHeight) { book.coverBmpPath = ""; } coverRendered = false; + nextRecentCoverIndex++; + recentsLoading = false; requestUpdate(); + return; } else if (FsHelpers::hasXtcExtension(book.path)) { // Handle XTC file Xtc xtc(book.path, "/.crosspoint"); @@ -162,12 +165,14 @@ void HomeActivity::loadRecentCovers(int coverHeight) { book.coverBmpPath = ""; } coverRendered = false; + nextRecentCoverIndex++; + recentsLoading = false; requestUpdate(); + return; } } } } - progress++; } recentsLoaded = true; @@ -181,9 +186,18 @@ void HomeActivity::onEnter() { hasOpdsUrl = strlen(SETTINGS.opdsServerUrl) > 0; selectorIndex = 0; + recentsLoading = false; + recentsLoaded = false; + firstRenderDone = false; + nextRecentCoverIndex = 0; + coverRendered = false; + freeCoverBuffer(); const auto& metrics = UITheme::getInstance().getMetrics(); loadRecentBooks(metrics.homeRecentBooksCount); + if (recentBooks.empty()) { + recentsLoaded = true; + } // Trigger first update requestUpdate(); diff --git a/src/activities/home/HomeActivity.h b/src/activities/home/HomeActivity.h index 32d1c075..7d66caeb 100644 --- a/src/activities/home/HomeActivity.h +++ b/src/activities/home/HomeActivity.h @@ -1,4 +1,5 @@ #pragma once +#include #include #include @@ -18,6 +19,7 @@ class HomeActivity final : public Activity { bool hasOpdsUrl = false; bool coverRendered = false; // Track if cover has been rendered once bool coverBufferStored = false; // Track if cover buffer is stored + size_t nextRecentCoverIndex = 0; uint8_t* coverBuffer = nullptr; // HomeActivity's own buffer for cover image std::vector recentBooks; void onSelectBook(const std::string& path);