summaryrefslogtreecommitdiffstats
path: root/player/lua/defaults.lua
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2014-04-12 20:41:12 +0200
committerwm4 <wm4@nowhere>2014-04-12 20:41:12 +0200
commitf3c0897b3ff0389043ef8cba0f4e6ffada3b2e9f (patch)
tree5d92487e7905c753143a3387dc079edd3e146907 /player/lua/defaults.lua
parent19abeaf62d408f2ef2436f67ef12a3ac2120638a (diff)
downloadmpv-f3c0897b3ff0389043ef8cba0f4e6ffada3b2e9f.tar.bz2
mpv-f3c0897b3ff0389043ef8cba0f4e6ffada3b2e9f.tar.xz
lua: make it easier to integrate with foreign event loops
We provide some "official" utility functions for this.
Diffstat (limited to 'player/lua/defaults.lua')
-rw-r--r--player/lua/defaults.lua32
1 files changed, 26 insertions, 6 deletions
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