summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorailurux <ailuruxx@gmail.com>2024-05-06 15:48:04 +1000
committerailurux <ailuruxx@gmail.com>2024-05-06 15:48:04 +1000
commit8019c7691889cde4c3d40bbd78d485a92d713bbf (patch)
tree65da1621c390a89e620579255a34fe2cea93ffb8
parenteeb3f2d406a951b423b83f559fe749df0b4f745a (diff)
downloadtangara-fw-8019c7691889cde4c3d40bbd78d485a92d713bbf.tar.gz
File browser and track browser bug fixes
-rw-r--r--lua/widgets.lua29
-rw-r--r--src/lua/file_iterator.cpp3
-rw-r--r--src/lua/include/file_iterator.hpp1
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;