@@ -345,10 +345,8 @@ local function update_profiles_menu(menu)
345345end
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
372368end
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
375385local 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
405399end
406400
0 commit comments