mirror of
https://github.com/mpv-player/mpv
synced 2025-02-23 08:26:56 +00:00
client API: add glue for making full use of mpv_command_node()
Until now, the return value was always MPV_FORMAT_NONE. Now a command can actually set it. This will be used in one of the following commits.
This commit is contained in:
parent
debf57bb0d
commit
f13266014f
@ -954,6 +954,7 @@ static int run_async(mpv_handle *ctx, void (*fn)(void *fn_data), void *fn_data)
|
|||||||
struct cmd_request {
|
struct cmd_request {
|
||||||
struct MPContext *mpctx;
|
struct MPContext *mpctx;
|
||||||
struct mp_cmd *cmd;
|
struct mp_cmd *cmd;
|
||||||
|
struct mpv_node *res;
|
||||||
int status;
|
int status;
|
||||||
struct mpv_handle *reply_ctx;
|
struct mpv_handle *reply_ctx;
|
||||||
uint64_t userdata;
|
uint64_t userdata;
|
||||||
@ -962,7 +963,7 @@ struct cmd_request {
|
|||||||
static void cmd_fn(void *data)
|
static void cmd_fn(void *data)
|
||||||
{
|
{
|
||||||
struct cmd_request *req = data;
|
struct cmd_request *req = data;
|
||||||
int r = run_command(req->mpctx, req->cmd);
|
int r = run_command(req->mpctx, req->cmd, req->res);
|
||||||
req->status = r >= 0 ? 0 : MPV_ERROR_COMMAND;
|
req->status = r >= 0 ? 0 : MPV_ERROR_COMMAND;
|
||||||
talloc_free(req->cmd);
|
talloc_free(req->cmd);
|
||||||
if (req->reply_ctx) {
|
if (req->reply_ctx) {
|
||||||
@ -971,7 +972,7 @@ static void cmd_fn(void *data)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int run_client_command(mpv_handle *ctx, struct mp_cmd *cmd)
|
static int run_client_command(mpv_handle *ctx, struct mp_cmd *cmd, mpv_node *res)
|
||||||
{
|
{
|
||||||
if (!ctx->mpctx->initialized)
|
if (!ctx->mpctx->initialized)
|
||||||
return MPV_ERROR_UNINITIALIZED;
|
return MPV_ERROR_UNINITIALIZED;
|
||||||
@ -986,6 +987,7 @@ static int run_client_command(mpv_handle *ctx, struct mp_cmd *cmd)
|
|||||||
struct cmd_request req = {
|
struct cmd_request req = {
|
||||||
.mpctx = ctx->mpctx,
|
.mpctx = ctx->mpctx,
|
||||||
.cmd = cmd,
|
.cmd = cmd,
|
||||||
|
.res = res,
|
||||||
};
|
};
|
||||||
run_locked(ctx, cmd_fn, &req);
|
run_locked(ctx, cmd_fn, &req);
|
||||||
return req.status;
|
return req.status;
|
||||||
@ -993,21 +995,22 @@ static int run_client_command(mpv_handle *ctx, struct mp_cmd *cmd)
|
|||||||
|
|
||||||
int mpv_command(mpv_handle *ctx, const char **args)
|
int mpv_command(mpv_handle *ctx, const char **args)
|
||||||
{
|
{
|
||||||
return run_client_command(ctx, mp_input_parse_cmd_strv(ctx->log, args));
|
return run_client_command(ctx, mp_input_parse_cmd_strv(ctx->log, args), NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
int mpv_command_node(mpv_handle *ctx, mpv_node *args, mpv_node *result)
|
int mpv_command_node(mpv_handle *ctx, mpv_node *args, mpv_node *result)
|
||||||
{
|
{
|
||||||
int r = run_client_command(ctx, mp_input_parse_cmd_node(ctx->log, args));
|
struct mpv_node rn = {.format = MPV_FORMAT_NONE};
|
||||||
|
int r = run_client_command(ctx, mp_input_parse_cmd_node(ctx->log, args), &rn);
|
||||||
if (result && r >= 0)
|
if (result && r >= 0)
|
||||||
*result = (mpv_node){.format = MPV_FORMAT_NONE};
|
*result = rn;
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
int mpv_command_string(mpv_handle *ctx, const char *args)
|
int mpv_command_string(mpv_handle *ctx, const char *args)
|
||||||
{
|
{
|
||||||
return run_client_command(ctx,
|
return run_client_command(ctx,
|
||||||
mp_input_parse_cmd(ctx->mpctx->input, bstr0((char*)args), ctx->name));
|
mp_input_parse_cmd(ctx->mpctx->input, bstr0((char*)args), ctx->name), NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int run_cmd_async(mpv_handle *ctx, uint64_t ud, struct mp_cmd *cmd)
|
static int run_cmd_async(mpv_handle *ctx, uint64_t ud, struct mp_cmd *cmd)
|
||||||
|
@ -4040,7 +4040,7 @@ static bool check_property_autorepeat(char *property, struct MPContext *mpctx)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
int run_command(MPContext *mpctx, mp_cmd_t *cmd)
|
int run_command(struct MPContext *mpctx, struct mp_cmd *cmd, struct mpv_node *res)
|
||||||
{
|
{
|
||||||
struct command_ctx *cmdctx = mpctx->command_ctx;
|
struct command_ctx *cmdctx = mpctx->command_ctx;
|
||||||
struct MPOpts *opts = mpctx->opts;
|
struct MPOpts *opts = mpctx->opts;
|
||||||
@ -4692,7 +4692,7 @@ int run_command(MPContext *mpctx, mp_cmd_t *cmd)
|
|||||||
|
|
||||||
case MP_CMD_COMMAND_LIST: {
|
case MP_CMD_COMMAND_LIST: {
|
||||||
for (struct mp_cmd *sub = cmd->args[0].v.p; sub; sub = sub->queue_next)
|
for (struct mp_cmd *sub = cmd->args[0].v.p; sub; sub = sub->queue_next)
|
||||||
run_command(mpctx, sub);
|
run_command(mpctx, sub, NULL);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -21,11 +21,12 @@
|
|||||||
struct MPContext;
|
struct MPContext;
|
||||||
struct mp_cmd;
|
struct mp_cmd;
|
||||||
struct mp_log;
|
struct mp_log;
|
||||||
|
struct mpv_node;
|
||||||
|
|
||||||
void command_init(struct MPContext *mpctx);
|
void command_init(struct MPContext *mpctx);
|
||||||
void command_uninit(struct MPContext *mpctx);
|
void command_uninit(struct MPContext *mpctx);
|
||||||
|
|
||||||
int run_command(struct MPContext *mpctx, struct mp_cmd *cmd);
|
int run_command(struct MPContext *mpctx, struct mp_cmd *cmd, struct mpv_node *res);
|
||||||
char *mp_property_expand_string(struct MPContext *mpctx, const char *str);
|
char *mp_property_expand_string(struct MPContext *mpctx, const char *str);
|
||||||
char *mp_property_expand_escaped_string(struct MPContext *mpctx, const char *str);
|
char *mp_property_expand_escaped_string(struct MPContext *mpctx, const char *str);
|
||||||
void property_print_help(struct mp_log *log);
|
void property_print_help(struct mp_log *log);
|
||||||
|
@ -67,7 +67,7 @@ void mp_process_input(struct MPContext *mpctx)
|
|||||||
mp_cmd_t *cmd = mp_input_read_cmd(mpctx->input);
|
mp_cmd_t *cmd = mp_input_read_cmd(mpctx->input);
|
||||||
if (!cmd)
|
if (!cmd)
|
||||||
break;
|
break;
|
||||||
run_command(mpctx, cmd);
|
run_command(mpctx, cmd, NULL);
|
||||||
mp_cmd_free(cmd);
|
mp_cmd_free(cmd);
|
||||||
mp_dispatch_queue_process(mpctx->dispatch, 0);
|
mp_dispatch_queue_process(mpctx->dispatch, 0);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user