From f3c0897b3ff0389043ef8cba0f4e6ffada3b2e9f Mon Sep 17 00:00:00 2001 From: wm4 Date: Sat, 12 Apr 2014 20:41:12 +0200 Subject: lua: make it easier to integrate with foreign event loops We provide some "official" utility functions for this. --- player/lua/defaults.lua | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) (limited to 'player/lua/defaults.lua') diff --git a/player/lua/defaults.lua b/player/lua/defaults.lua index 07d3a89ca1..c264175768 100644 --- a/player/lua/defaults.lua +++ b/player/lua/defaults.lua @@ -201,6 +201,15 @@ local function get_next_timer() return best end +function mp.get_next_timeout() + local timer = get_next_timer() + if not timer then + return + end + local now = mp.get_time() + return timer.next_deadline - now +end + -- Run timers that have met their deadline. -- Return: next absolute time a timer expires as number, or nil if no timers local function process_timers() @@ -331,6 +340,19 @@ package.loaded["mp"] = mp package.loaded["mp.msg"] = mp.msg _G.mp_event_loop = function() + mp.dispatch_events(true) +end + +local function call_event_handlers(e) + local handlers = event_handlers[e.event] + if handlers then + for _, handler in ipairs(handlers) do + handler(e) + end + end +end + +function mp.dispatch_events(allow_wait) local more_events = true mp.suspend() while mp.keep_running do @@ -345,6 +367,9 @@ _G.mp_event_loop = function() -- suspended, and the error was handled, but no resume was done. if wait > 0 then mp.resume_all() + if allow_wait ~= true then + return + end end local e = mp.wait_event(wait) -- Empty the event queue while suspended; otherwise, each @@ -352,12 +377,7 @@ _G.mp_event_loop = function() mp.suspend() more_events = (e.event ~= "none") if more_events then - local handlers = event_handlers[e.event] - if handlers then - for _, handler in ipairs(handlers) do - handler(e) - end - end + call_event_handlers(e) end end end -- cgit v1.2.3