From 8e4fa5fcd15ecba6a046aa71650bbfc759856fa8 Mon Sep 17 00:00:00 2001 From: wm4 Date: Wed, 15 Oct 2014 23:09:53 +0200 Subject: command: add a mechanism to allow scripts to intercept file loads A vague idea to get something similar what libquvi did. Undocumented because it might change a lot, or even be removed. To give an idea what it does, a Lua script could do the following: -- type ID priority mp.commandv("hook_add", "on_load", 0, 0) mp.register_script_message("hook_run", function(param, param2) -- param is "0", the user-chosen ID from the hook_add command -- param2 is the magic value that has to be passed to finish -- the hook mp.resume_all() -- do something, maybe set options that are reset on end: mp.set_property("file-local-options/name", "value") -- or change the URL that's being opened: local url = mp.get_property("stream-open-filename") mp.set_property("stream-open-filename", url .. ".png") -- let the player (or the next script) continue mp.commandv("hook_ack", param2) end) --- input/cmd_list.c | 3 +++ input/cmd_list.h | 3 +++ input/input.h | 1 + 3 files changed, 7 insertions(+) (limited to 'input') diff --git a/input/cmd_list.c b/input/cmd_list.c index bac9b7931a..e6329b9d89 100644 --- a/input/cmd_list.c +++ b/input/cmd_list.c @@ -170,6 +170,9 @@ const struct mp_cmd_def mp_cmds[] = { { MP_CMD_WRITE_WATCH_LATER_CONFIG, "write_watch_later_config", }, + { MP_CMD_HOOK_ADD, "hook_add", { ARG_STRING, ARG_INT, ARG_INT } }, + { MP_CMD_HOOK_ACK, "hook_ack", { ARG_STRING } }, + {0} }; diff --git a/input/cmd_list.h b/input/cmd_list.h index b2b8e2a4d2..7d395cb329 100644 --- a/input/cmd_list.h +++ b/input/cmd_list.h @@ -97,6 +97,9 @@ enum mp_command_type { MP_CMD_WRITE_WATCH_LATER_CONFIG, + MP_CMD_HOOK_ADD, + MP_CMD_HOOK_ACK, + // Internal MP_CMD_COMMAND_LIST, // list of sub-commands in args[0].v.p }; diff --git a/input/input.h b/input/input.h index 40c9369271..877f79a0e6 100644 --- a/input/input.h +++ b/input/input.h @@ -82,6 +82,7 @@ typedef struct mp_cmd { struct mp_cmd *queue_next; double scale; // for scaling numeric arguments const struct mp_cmd_def *def; + char *sender; // name of the client API user which sent this } mp_cmd_t; struct mp_input_src { -- cgit v1.2.3