From 2565f3746ea5b71577d2439a8c4c0d2221b4bf1d Mon Sep 17 00:00:00 2001 From: David Vazgenovich Shakaryan Date: Tue, 6 May 2025 18:51:47 -0700 Subject: make search recursive from current menu --- main.lua | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) (limited to 'main.lua') diff --git a/main.lua b/main.lua index c811db1..e844ddf 100644 --- a/main.lua +++ b/main.lua @@ -163,7 +163,7 @@ local function push_menu(t) menus[depth] = menu end -local function add_category_menu(category_id, category_name) +local function category_menu_options(category_id) local options = {} for _, v in ipairs(categories) do if tostring(v.parent_id) == category_id then @@ -175,8 +175,14 @@ local function add_category_menu(category_id, category_name) options[#options+1] = v end end + return options +end - push_menu({options=options, title=category_name}) +local function add_category_menu(category_id, category_name) + push_menu({ + options=category_menu_options(category_id), + title=category_name, + }) update_osd() end @@ -226,9 +232,22 @@ local function search_update_osd() update_osd() end +local function search_candidates(options, arr) + local arr = arr or {} + for _, v in ipairs(options) do + arr[#arr+1] = v + + if v.type == 'category' then + search_candidates( + category_menu_options(v.category_id), arr) + end + end + return arr +end + local function search_update() local matches = {} - for _, v in ipairs(menus[depth-1].options) do + for _, v in ipairs(menus[depth].candidates) do if string.find(v.name, search_text, 0, true) then matches[#matches+1] = v end @@ -303,7 +322,10 @@ local function search_start() else search_text = '' search_text_cursor = 1 - push_menu({type='search'}) + push_menu({ + type='search', + candidates=search_candidates(menu.options), + }) search_update() end -- cgit v1.2.3-70-g09d2