aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--DOCS/man/lua.rst17
-rw-r--r--player/lua.c20
2 files changed, 37 insertions, 0 deletions
diff --git a/DOCS/man/lua.rst b/DOCS/man/lua.rst
index db4957addc..4d3fb7c3d8 100644
--- a/DOCS/man/lua.rst
+++ b/DOCS/man/lua.rst
@@ -690,6 +690,23 @@ List of events
Happens after a file was unloaded. Typically, the player will load the
next file right away, or quit if this was the last file.
+ The event has the ``reason`` field, which takes one of these values:
+
+ ``eof``
+ The file has ended. This can (but doesn't have to) include
+ incomplete files or broken network connections under
+ circumstances.
+
+ ``stop``
+ Playback was ended by a command.
+
+ ``quit``
+ Playback was ended by sending the quit command.
+
+ ``error``
+ An error happened. In this case, an ``error`` field is present with
+ the error string.
+
``file-loaded``
Happens after a file was loaded and begins playback.
diff --git a/player/lua.c b/player/lua.c
index 2e00f79dda..7f4e2405de 100644
--- a/player/lua.c
+++ b/player/lua.c
@@ -512,6 +512,26 @@ static int script_wait_event(lua_State *L)
lua_setfield(L, -2, "args"); // event
break;
}
+ case MPV_EVENT_END_FILE: {
+ mpv_event_end_file *eef = event->data;
+ const char *reason;
+ switch (eef->reason) {
+ case MPV_END_FILE_REASON_EOF: reason = "eof"; break;
+ case MPV_END_FILE_REASON_STOP: reason = "stop"; break;
+ case MPV_END_FILE_REASON_QUIT: reason = "quit"; break;
+ case MPV_END_FILE_REASON_ERROR: reason = "error"; break;
+ default:
+ reason = "unknown";
+ }
+ lua_pushstring(L, reason); // event reason
+ lua_setfield(L, -2, "reason"); // event
+
+ if (eef->reason == MPV_END_FILE_REASON_ERROR) {
+ lua_pushstring(L, mpv_error_string(eef->error)); // event error
+ lua_setfield(L, -2, "error"); // event
+ }
+ break;
+ }
case MPV_EVENT_PROPERTY_CHANGE: {
mpv_event_property *prop = event->data;
lua_pushstring(L, prop->name);