Fix browser navigation crashes

custom
jacqueline 2 years ago
parent 8eabeedbb9
commit 2dc700b12f
  1. 4
      src/ui/include/screen.hpp
  2. 13
      src/ui/screen_track_browser.cpp

@ -25,8 +25,10 @@ class Screen {
Screen() : root_(lv_obj_create(NULL)), group_(lv_group_create()) {} Screen() : root_(lv_obj_create(NULL)), group_(lv_group_create()) {}
virtual ~Screen() { virtual ~Screen() {
lv_obj_del(root_); // The group *must* be deleted first. Otherwise, focus events will be
// generated whilst deleting the object tree, which causes a big mess.
lv_group_del(group_); lv_group_del(group_);
lv_obj_del(root_);
} }
/* /*

@ -307,18 +307,13 @@ auto TrackBrowser::GetRecordByIndex(std::size_t index)
} }
ESP_LOGI(kTag, "total tracks %u, getting index %u", total_tracks, index); ESP_LOGI(kTag, "total tracks %u, getting index %u", total_tracks, index);
std::size_t current_index = 0;
for (const auto& page : current_pages_) { for (const auto& page : current_pages_) {
if (index > current_index + page->values().size()) { for (int i = 0; i < page->values().size(); i++) {
current_index += page->values().size(); if (index == 0) {
continue; return page->values().at(i);
} }
if (index < current_index) { index--;
// uhhh
break;
} }
std::size_t index_in_page = index - current_index;
return page->values().at(index_in_page);
} }
return {}; return {};
} }

Loading…
Cancel
Save