summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWilliam Wilgus <wilgus.william@gmail.com>2021-05-19 23:29:10 -0400
committerWilliam Wilgus <wilgus.william@gmail.com>2021-05-19 23:29:10 -0400
commite910f63bba42c7e1627a7ec906b9cff38d032f6d (patch)
treeee7b6bb74607f8f82c96e68ed86c88d854bb45f9
parentdcff9b85a3cef778af60ad4426f91262ba815931 (diff)
downloadrockbox-e910f63bba42c7e1627a7ec906b9cff38d032f6d.tar.gz
rockbox-e910f63bba42c7e1627a7ec906b9cff38d032f6d.zip
lua add a way to filter settings on read
rather than dumping all the settings allow a filter function to choose desired settings in menucoresettings you can see an how to do exact text matches or wilcard matches you can even use luas version of regex Change-Id: I4c7f7592498ea194e06e9a556b77ffd57f5d4223
-rw-r--r--apps/plugins/lua/include_lua/menucoresettings.lua18
-rw-r--r--apps/plugins/lua/include_lua/rbsettings.lua7
2 files changed, 17 insertions, 8 deletions
diff --git a/apps/plugins/lua/include_lua/menucoresettings.lua b/apps/plugins/lua/include_lua/menucoresettings.lua
index 13f3b8ea69..27d5e86ca1 100644
--- a/apps/plugins/lua/include_lua/menucoresettings.lua
+++ b/apps/plugins/lua/include_lua/menucoresettings.lua
@@ -39,21 +39,27 @@ local function get_core_settings()
39 39
40 tmploader("rbsettings") 40 tmploader("rbsettings")
41 tmploader("settings") 41 tmploader("settings")
42 -- these are exact matches color and talk are wildcard matches
43 local list_settings = "cursor_style|show_icons|statusbar|scrollbar|scrollbar_width|list_separator_height|backdrop_file|"
44 local function filterfn(struct, k)
45 k = k or ""
46 --rbold.splash(100, struct .. " " .. k)
47 return (k:find("color") or k:find("talk") or list_settings:find(k))
48 end
49 local rb_settings = rb.settings.dump('global_settings', "system", nil, nil, filterfn)
42 50
43 local rb_settings = rb.settings.dump('global_settings', "system")
44 local color_table = {} 51 local color_table = {}
45 local talk_table = {} 52 local talk_table = {}
46 local list_settings_table = {} 53 local list_settings_table = {}
47 local list_settings = "cursor_style|show_icons|statusbar|scrollbar|scrollbar_width|list_separator_height|backdrop_file|"
48 54
49 for key, value in pairs(rb_settings) do 55 for key, value in pairs(rb_settings) do
50 key = key or "" 56 key = key or ""
51 if (key:find("color")) then 57 if (key:find("color")) then
52 color_table[key]=value 58 color_table[key]=value
53 elseif (key:find("talk")) then 59 elseif (key:find("talk")) then
54 talk_table[key]=value 60 talk_table[key]=value
55 elseif (list_settings:find(key)) then 61 else --if (list_settings:find(key)) then
56 list_settings_table[key]=value 62 list_settings_table[key]=value
57 end 63 end
58 end 64 end
59 65
diff --git a/apps/plugins/lua/include_lua/rbsettings.lua b/apps/plugins/lua/include_lua/rbsettings.lua
index defdb11b77..995e5023c9 100644
--- a/apps/plugins/lua/include_lua/rbsettings.lua
+++ b/apps/plugins/lua/include_lua/rbsettings.lua
@@ -151,12 +151,15 @@ function rb.settings.read(s_settings, s_var, s_groupname)
151 return data 151 return data
152end 152end
153 153
154function rb.settings.dump(s_settings, s_groupname, s_structname, t_output) 154function rb.settings.dump(s_settings, s_groupname, s_structname, t_output, fn_filter)
155 t_output = t_output or {} 155 t_output = t_output or {}
156 fn_filter = fn_filter or function(s,k) return true end
156 local tgroup = rb[s_groupname] 157 local tgroup = rb[s_groupname]
157 s_structname = s_structname or s_settings 158 s_structname = s_structname or s_settings
158 for k, v in pairs(tgroup[s_structname]) do 159 for k, v in pairs(tgroup[s_structname]) do
159 t_output[k] = rb.settings.read(s_settings, v, s_groupname) 160 if fn_filter(s_structname, k) then
161 t_output[k] = rb.settings.read(s_settings, v, s_groupname)
162 end
160 end 163 end
161 return t_output 164 return t_output
162end 165end