From 1456cefc1c4addf182e378a51201761facb2c2d5 Mon Sep 17 00:00:00 2001 From: Justin Luque Date: Mon, 5 Jan 2026 20:14:28 -0500 Subject: [PATCH] feat: remember parent folder index in menu when ascending folders --- src/activities/reader/FileSelectionActivity.cpp | 13 ++++++++++++- src/activities/reader/FileSelectionActivity.h | 1 + 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/activities/reader/FileSelectionActivity.cpp b/src/activities/reader/FileSelectionActivity.cpp index f87cc97..72c1b0b 100644 --- a/src/activities/reader/FileSelectionActivity.cpp +++ b/src/activities/reader/FileSelectionActivity.cpp @@ -29,7 +29,6 @@ void FileSelectionActivity::taskTrampoline(void* param) { void FileSelectionActivity::loadFiles() { files.clear(); - selectorIndex = 0; auto root = SdMan.open(basepath.c_str()); if (!root || !root.isDirectory()) { @@ -135,6 +134,11 @@ void FileSelectionActivity::loop() { basepath.replace(basepath.find_last_of('/'), std::string::npos, ""); if (basepath.empty()) basepath = "/"; loadFiles(); + + auto pos = oldPath.find_last_of('/'); + std::string dirName = oldPath.substr(pos + 1) + "/"; + selectorIndex = findEntry(dirName); + updateRequired = true; } else { onGoHome(); @@ -194,3 +198,10 @@ void FileSelectionActivity::render() const { renderer.displayBuffer(); } + +int FileSelectionActivity::findEntry(const std::string& name) const { + for (size_t i = 0; i < files.size(); i++) + if (files[i] == name) + return i; + return 0; +} diff --git a/src/activities/reader/FileSelectionActivity.h b/src/activities/reader/FileSelectionActivity.h index 88e97d0..9b28214 100644 --- a/src/activities/reader/FileSelectionActivity.h +++ b/src/activities/reader/FileSelectionActivity.h @@ -23,6 +23,7 @@ class FileSelectionActivity final : public Activity { [[noreturn]] void displayTaskLoop(); void render() const; void loadFiles(); + int findEntry(const std::string& name) const; public: explicit FileSelectionActivity(GfxRenderer& renderer, MappedInputManager& mappedInput,