From 5a742b8a0f68ee7d44442435425c4580d988651a Mon Sep 17 00:00:00 2001 From: MihailRis Date: Sat, 24 Jan 2026 14:21:38 +0300 Subject: [PATCH] feat: post-runnables context now allowing to use content-related app.* functions --- res/layouts/pages/content.xml.lua | 4 +++- res/scripts/stdlib.lua | 16 +++++++++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/res/layouts/pages/content.xml.lua b/res/layouts/pages/content.xml.lua index 89c230ed0..e77141cc4 100644 --- a/res/layouts/pages/content.xml.lua +++ b/res/layouts/pages/content.xml.lua @@ -28,7 +28,9 @@ local function include(id, is_include) end function apply() - core.reconfig_packs(add_packs, rem_packs) + time.post_runnable(function () + app.reconfig_packs(add_packs, rem_packs) + end) if mode ~= "world" then menu:back() end diff --git a/res/scripts/stdlib.lua b/res/scripts/stdlib.lua index 4eb6dd17e..683f27e8a 100644 --- a/res/scripts/stdlib.lua +++ b/res/scripts/stdlib.lua @@ -25,6 +25,7 @@ function tb_frame_tostring(frame) end local __vc__app_script_coroutine +local __vc__is_post_runnable = false local function complete_app_lib(app) local __app_load_content = app.load_content @@ -44,6 +45,10 @@ local function complete_app_lib(app) app.tick = __app_tick local function call_in_app_script_co(func, ...) + if __vc__is_post_runnable then + func(...) + return + end local running = coroutine.running() if not running or running ~= __vc__app_script_coroutine then error("content must be reload in application script coroutine") @@ -513,7 +518,7 @@ local fn_audio_reset_fetch_buffer = audio.__reset_fetch_buffer audio.__reset_fetch_buffer = nil core.get_core_token = audio.input.__get_core_token -function __process_post_runnables() +local function __vc__process_post_runnables() if #__post_runnables then for _, func in ipairs(__post_runnables) do local status, result = xpcall(func, __vc__error) @@ -547,6 +552,15 @@ function __process_post_runnables() end end +function __process_post_runnables() + __vc__is_post_runnable = true + local success, err = pcall(__vc__process_post_runnables) + if not success then + debug.error("an error ocurred while processing post-runnables: ".. err) + end + __vc__is_post_runnable = false +end + function time.post_runnable(runnable) table.insert(__post_runnables, runnable) end