Skip to content

Commit 8a43db3

Browse files
committed
polish menu update code
1 parent 722ff1b commit 8a43db3

File tree

1 file changed

+22
-28
lines changed

1 file changed

+22
-28
lines changed

lua/dyn_menu.lua

Lines changed: 22 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -345,10 +345,8 @@ local function update_profiles_menu(menu)
345345
end
346346

347347
-- handle #@prop:check
348-
function update_check_status(menu, keyword)
348+
function update_check_status(menu, prop, reverse)
349349
local item = menu.item
350-
local prop, e = keyword:match('^([%w-]+):check(!?)$')
351-
if not prop then return false end
352350

353351
local function check(v)
354352
local tp = type(v)
@@ -361,16 +359,28 @@ function update_check_status(menu, keyword)
361359

362360
local function prop_cb(_, value)
363361
local ok = check(value)
364-
if e == '!' then ok = not ok end
362+
if reverse then ok = not ok end
365363
item.state = ok and { 'checked' } or {}
366364
menu_items_dirty = true
367365
end
368366

369367
observe_property(menu, prop, 'native', prop_cb)
370-
371-
return true
372368
end
373369

370+
-- dynamic menu providers
371+
local dyn_providers = {
372+
['tracks'] = update_tracks_menu,
373+
['tracks/video'] = function(menu) update_track_menu(menu, 'video', 'vid') end,
374+
['tracks/audio'] = function(menu) update_track_menu(menu, 'audio', 'aid') end,
375+
['tracks/sub'] = function(menu) update_track_menu(menu, 'sub', 'sid') end,
376+
['tracks/sub-secondary'] = function(menu) update_track_menu(menu, 'sub', 'secondary-sid') end,
377+
['chapters'] = update_chapters_menu,
378+
['editions'] = update_editions_menu,
379+
['audio-devices'] = update_audio_devices_menu,
380+
['playlist'] = update_playlist_menu,
381+
['profiles'] = update_profiles_menu,
382+
}
383+
374384
-- update dynamic menu item and handle update
375385
local function dyn_menu_update(item, keyword)
376386
local menu = {
@@ -379,28 +389,12 @@ local function dyn_menu_update(item, keyword)
379389
}
380390
dyn_menus[keyword] = menu
381391

382-
if update_check_status(menu, keyword) then return end
383-
384-
if keyword == 'tracks' then
385-
update_tracks_menu(menu)
386-
elseif keyword == 'tracks/video' then
387-
update_track_menu(menu, "video", "vid")
388-
elseif keyword == 'tracks/audio' then
389-
update_track_menu(menu, "audio", "aid")
390-
elseif keyword == 'tracks/sub' then
391-
update_track_menu(menu, "sub", "sid")
392-
elseif keyword == 'tracks/sub-secondary' then
393-
update_track_menu(menu, "sub", "secondary-sid")
394-
elseif keyword == 'chapters' then
395-
update_chapters_menu(menu)
396-
elseif keyword == 'editions' then
397-
update_editions_menu(menu)
398-
elseif keyword == 'audio-devices' then
399-
update_audio_devices_menu(menu)
400-
elseif keyword == 'playlist' then
401-
update_playlist_menu(menu)
402-
elseif keyword == 'profiles' then
403-
update_profiles_menu(menu)
392+
local prop, e = keyword:match('^([%w-]+):check(!?)$')
393+
if prop then
394+
update_check_status(menu, prop, e == '!')
395+
else
396+
local provider = dyn_providers[keyword]
397+
if provider then provider(menu) end
404398
end
405399
end
406400

0 commit comments

Comments
 (0)