summaryrefslogtreecommitdiffstats
path: root/player
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2020-08-07 19:39:46 +0200
committerwm4 <wm4@nowhere>2020-08-07 19:41:56 +0200
commit1f132c675a18f0b80fc3159a7b13b5b061f2d93c (patch)
treebb421d3c4dcae749c4161bd3e2abeb981c28ee44 /player
parentd5a02dd9342f5c61f3e3a9caf2082dd46b5099e3 (diff)
downloadmpv-1f132c675a18f0b80fc3159a7b13b5b061f2d93c.tar.bz2
mpv-1f132c675a18f0b80fc3159a7b13b5b061f2d93c.tar.xz
options: add some way to more or less "unapply" profiles
Make it possible to restore from profiles by backing up the option values before profile application. This is sort of like unapplying a profile. Since there might be multiple ways to do this, a profile needs to explicitly provide the "profile-restore" option, which specifies how exactly this should be done. This is a big mess. There is not natural way to do this. Profile application is "destructive" and simply changes the values of the options. Maybe one could argue that the option system should have hierarchical "overlays" of profiles instead, where unset options will use the value of the lower profiles. Options set interactively by the user would be the top profile. Default values would be in the lowest profile. You could unapply a profile by simply removing it from this overlay stack. But uh, let's not, so here's something stupid. It reuses some code used for file local options to reduce code size. At least the overlay idea would still be possible in theory, and could be added as another profile-restore mode. This is used by the following commit.
Diffstat (limited to 'player')
-rw-r--r--player/command.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/player/command.c b/player/command.c
index 8a546608eb..7b3e194f78 100644
--- a/player/command.c
+++ b/player/command.c
@@ -5647,8 +5647,12 @@ static void cmd_apply_profile(void *p)
struct MPContext *mpctx = cmd->mpctx;
char *profile = cmd->args[0].v.s;
- if (m_config_set_profile(mpctx->mconfig, profile, 0) < 0)
- cmd->success = false;
+ int mode = cmd->args[1].v.i;
+ if (mode == 0) {
+ cmd->success = m_config_set_profile(mpctx->mconfig, profile, 0) >= 0;
+ } else {
+ cmd->success = m_config_restore_profile(mpctx->mconfig, profile) >= 0;
+ }
}
static void cmd_load_script(void *p)
@@ -6138,7 +6142,11 @@ const struct mp_cmd_def mp_cmds[] = {
{ "keyup", cmd_key, { {"name", OPT_STRING(v.s), .flags = MP_CMD_OPT_ARG} },
.priv = &(const int){MP_KEY_STATE_UP}},
- { "apply-profile", cmd_apply_profile, {{"name", OPT_STRING(v.s)}} },
+ { "apply-profile", cmd_apply_profile, {
+ {"name", OPT_STRING(v.s)},
+ {"mode", OPT_CHOICE(v.i, {"apply", 0}, {"restore", 1}),
+ .flags = MP_CMD_OPT_ARG}, }
+ },
{ "load-script", cmd_load_script, {{"filename", OPT_STRING(v.s)}} },