From 8019c7691889cde4c3d40bbd78d485a92d713bbf Mon Sep 17 00:00:00 2001 From: ailurux Date: Mon, 6 May 2024 15:48:04 +1000 Subject: [PATCH] File browser and track browser bug fixes --- lua/widgets.lua | 29 ++++++++++------------------- src/lua/file_iterator.cpp | 3 ++- src/lua/include/file_iterator.hpp | 1 + 3 files changed, 13 insertions(+), 20 deletions(-) diff --git a/lua/widgets.lua b/lua/widgets.lua index 4d7ff077..6d37e9ac 100644 --- a/lua/widgets.lua +++ b/lua/widgets.lua @@ -288,13 +288,8 @@ function widgets.RecyclerList(parent, iterator, opts) end btn:onevent(lvgl.EVENT.FOCUSED, function() if refreshing then return end - selected = this_item - if this_item > last_selected and this_item > 3 then + if this_item > last_selected and this_item - first_index > 5 then -- moving forward - if moving_back == true then - fwd_iterator:next() - moving_back = false - end local to_add = fwd_iterator:next() if to_add then remove_top() @@ -303,19 +298,15 @@ function widgets.RecyclerList(parent, iterator, opts) end if this_item < last_selected then -- moving backward - if last_index - this_item > 3 then - if moving_back == false then - -- Special case for the element we switch on - bck_iterator:prev() - moving_back = true - end - if (last_index > 10) then - remove_last() - end - if (first_index > 0) then - add_item(bck_iterator:prev(), first_index-1) - end - end + if (last_index - first_index > 10) then + remove_last() + end + if (first_index > 0 and this_item - first_index < 5) then + local to_add = bck_iterator:prev(); + if to_add then + add_item(to_add, first_index-1) + end + end end last_selected = this_item refresh_group() diff --git a/src/lua/file_iterator.cpp b/src/lua/file_iterator.cpp index 58b256b2..194859a6 100644 --- a/src/lua/file_iterator.cpp +++ b/src/lua/file_iterator.cpp @@ -50,7 +50,7 @@ auto FileIterator::prev() -> void { f_rewinddir(&dir_); auto new_offset = offset_-1; offset_ = -1; - for (int i = 0; i < new_offset; i++) { + for (int i = 0; i <= new_offset; i++) { iterate(false); } } @@ -73,6 +73,7 @@ auto FileIterator::iterate(bool reverse) -> bool { // Update current value offset_++; current_ = FileEntry{ + .index = offset_, .isHidden = (info.fattrib & AM_HID) > 0, .isDirectory = (info.fattrib & AM_DIR) > 0, .isTrack = false, // TODO diff --git a/src/lua/include/file_iterator.hpp b/src/lua/include/file_iterator.hpp index da1a6eeb..82d6f397 100644 --- a/src/lua/include/file_iterator.hpp +++ b/src/lua/include/file_iterator.hpp @@ -16,6 +16,7 @@ namespace database { // Note for when reading FILINFO, that we are in LFN mode: // http://elm-chan.org/fsw/ff/doc/sfileinfo.html struct FileEntry { + int index; bool isHidden; bool isDirectory; bool isTrack;