summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDark <dark@volatile.bz>2019-07-13 20:36:34 -0400
committerwm4 <wm4@nowhere>2019-09-21 14:24:42 +0200
commita41f1a21d67b3d3dd6b173e563176f90074f589e (patch)
tree48aa95b77ac18bdfe208be6743a8b25d883411ee
parent74b4760aa81222de32147e16fa7605ce55db9922 (diff)
downloadmpv-a41f1a21d67b3d3dd6b173e563176f90074f589e.tar.bz2
mpv-a41f1a21d67b3d3dd6b173e563176f90074f589e.tar.xz
client API: add mpv_command_ret
This change adds a version of `mpv_command` that also returns a result. The main rationale behind this is `mpv_command_node` requires defining multiple structs before you can even use it, which results in a pretty painful to use interface just to get the result from a command. There isn't really a good name for this function, so I'm open to suggestions on a better name for it.
-rw-r--r--libmpv/client.h16
-rw-r--r--libmpv/mpv.def1
-rw-r--r--player/client.c9
3 files changed, 26 insertions, 0 deletions
diff --git a/libmpv/client.h b/libmpv/client.h
index eeaa687318..2fea40de13 100644
--- a/libmpv/client.h
+++ b/libmpv/client.h
@@ -970,6 +970,22 @@ int mpv_command(mpv_handle *ctx, const char **args);
int mpv_command_node(mpv_handle *ctx, mpv_node *args, mpv_node *result);
/**
+ * This is essentially identical to mpv_command() but it also returns a result.
+ *
+ * Does not use OSD and string expansion by default.
+ *
+ * @param[in] args NULL-terminated list of strings. Usually, the first item
+ * is the command, and the following items are arguments.
+ * @param[out] result Optional, pass NULL if unused. If not NULL, and if the
+ * function succeeds, this is set to command-specific return
+ * data. You must call mpv_free_node_contents() to free it
+ * (again, only if the command actually succeeds).
+ * Not many commands actually use this at all.
+ * @return error code (the result parameter is not set on error)
+ */
+int mpv_command_ret(mpv_handle *ctx, const char **args, mpv_node *result);
+
+/**
* Same as mpv_command, but use input.conf parsing for splitting arguments.
* This is slightly simpler, but also more error prone, since arguments may
* need quoting/escaping.
diff --git a/libmpv/mpv.def b/libmpv/mpv.def
index 5b1c2423ff..a2c6fd1ac9 100644
--- a/libmpv/mpv.def
+++ b/libmpv/mpv.def
@@ -5,6 +5,7 @@ mpv_command
mpv_command_async
mpv_command_node
mpv_command_node_async
+mpv_command_ret
mpv_command_string
mpv_create
mpv_create_client
diff --git a/player/client.c b/player/client.c
index 8a22a2cb32..6a45ec7fb6 100644
--- a/player/client.c
+++ b/player/client.c
@@ -1087,6 +1087,15 @@ int mpv_command_node(mpv_handle *ctx, mpv_node *args, mpv_node *result)
return r;
}
+int mpv_command_ret(mpv_handle *ctx, const char **args, mpv_node *result)
+{
+ struct mpv_node rn = {.format = MPV_FORMAT_NONE};
+ int r = run_client_command(ctx, mp_input_parse_cmd_strv(ctx->log, args), &rn);
+ if (result && r >= 0)
+ *result = rn;
+ return r;
+}
+
int mpv_command_string(mpv_handle *ctx, const char *args)
{
return run_client_command(ctx,