mirror of
https://github.com/mpv-player/mpv
synced 2024-12-22 23:02:37 +00:00
command: add a load-script command
The intention is to give libmpv users as much flexibility to load scripts as using mpv from CLI, but without restricting libmpv users from having to decide everything on creation time, or having to go through hacks like recreating the libmpv context to update state.
This commit is contained in:
parent
01e95468f9
commit
2ac74977c5
@ -699,6 +699,9 @@ Input Commands that are Possibly Subject to Change
|
||||
There is no such thing as "unapplying" a profile - applying a profile
|
||||
merely sets all option values listed within the profile.
|
||||
|
||||
``load-script "<path>"``
|
||||
Load a script, similar to the ``--script`` option.
|
||||
|
||||
Undocumented commands: ``tv-last-channel`` (TV/DVB only),
|
||||
``ao-reload`` (experimental/internal).
|
||||
|
||||
|
@ -226,6 +226,8 @@ const struct mp_cmd_def mp_cmds[] = {
|
||||
|
||||
{ MP_CMD_APPLY_PROFILE, "apply-profile", {ARG_STRING } },
|
||||
|
||||
{ MP_CMD_LOAD_SCRIPT, "load-script", {ARG_STRING} },
|
||||
|
||||
{0}
|
||||
};
|
||||
|
||||
|
@ -116,6 +116,8 @@ enum mp_command_type {
|
||||
|
||||
MP_CMD_APPLY_PROFILE,
|
||||
|
||||
MP_CMD_LOAD_SCRIPT,
|
||||
|
||||
// Internal
|
||||
MP_CMD_COMMAND_LIST, // list of sub-commands in args[0].v.p
|
||||
};
|
||||
|
@ -5472,6 +5472,13 @@ int run_command(struct MPContext *mpctx, struct mp_cmd *cmd, struct mpv_node *re
|
||||
break;
|
||||
}
|
||||
|
||||
case MP_CMD_LOAD_SCRIPT: {
|
||||
char *script = cmd->args[0].v.s;
|
||||
if (mp_load_script(mpctx, script) < 0)
|
||||
return -1;
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
MP_VERBOSE(mpctx, "Received unknown cmd %s\n", cmd->name);
|
||||
return -1;
|
||||
|
@ -550,6 +550,7 @@ struct mp_scripting {
|
||||
};
|
||||
void mp_load_scripts(struct MPContext *mpctx);
|
||||
void mp_load_builtin_scripts(struct MPContext *mpctx);
|
||||
int mp_load_script(struct MPContext *mpctx, const char *fname);
|
||||
|
||||
// sub.c
|
||||
void reset_subtitle_state(struct MPContext *mpctx);
|
||||
|
@ -100,7 +100,7 @@ static void wait_loaded(struct MPContext *mpctx)
|
||||
mp_wakeup_core(mpctx); // avoid lost wakeups during waiting
|
||||
}
|
||||
|
||||
static void mp_load_script(struct MPContext *mpctx, const char *fname)
|
||||
int mp_load_script(struct MPContext *mpctx, const char *fname)
|
||||
{
|
||||
char *ext = mp_splitext(fname, NULL);
|
||||
const struct mp_scripting *backend = NULL;
|
||||
@ -114,7 +114,7 @@ static void mp_load_script(struct MPContext *mpctx, const char *fname)
|
||||
|
||||
if (!backend) {
|
||||
MP_VERBOSE(mpctx, "Can't load unknown script: %s\n", fname);
|
||||
return;
|
||||
return -1;
|
||||
}
|
||||
|
||||
struct thread_arg *arg = talloc_ptrtype(NULL, arg);
|
||||
@ -129,7 +129,7 @@ static void mp_load_script(struct MPContext *mpctx, const char *fname)
|
||||
};
|
||||
if (!arg->client) {
|
||||
talloc_free(arg);
|
||||
return;
|
||||
return -1;
|
||||
}
|
||||
arg->log = mp_client_get_log(arg->client);
|
||||
|
||||
@ -139,13 +139,13 @@ static void mp_load_script(struct MPContext *mpctx, const char *fname)
|
||||
if (pthread_create(&thread, NULL, script_thread, arg)) {
|
||||
mpv_detach_destroy(arg->client);
|
||||
talloc_free(arg);
|
||||
return;
|
||||
return -1;
|
||||
}
|
||||
|
||||
wait_loaded(mpctx);
|
||||
MP_VERBOSE(mpctx, "Done loading %s.\n", fname);
|
||||
|
||||
return;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int compare_filename(const void *pa, const void *pb)
|
||||
|
Loading…
Reference in New Issue
Block a user