diff --git a/DOCS/interface-changes/cmd-set-metadata.txt b/DOCS/interface-changes/cmd-set-metadata.txt new file mode 100644 index 0000000000..34c8acf3c8 --- /dev/null +++ b/DOCS/interface-changes/cmd-set-metadata.txt @@ -0,0 +1 @@ +make the `metadata/by-key` property writable diff --git a/DOCS/man/input.rst b/DOCS/man/input.rst index f043580c8e..50033a64ba 100644 --- a/DOCS/man/input.rst +++ b/DOCS/man/input.rst @@ -2477,7 +2477,7 @@ Property list This has a number of sub-properties: - ``metadata/by-key/`` + ``metadata/by-key/`` (RW) Value of metadata entry ````. ``metadata/list/count`` diff --git a/player/command.c b/player/command.c index f1b11ac319..bbe6bbaef5 100644 --- a/player/command.c +++ b/player/command.c @@ -1329,18 +1329,22 @@ static int tag_property(int action, void *arg, struct mp_tags *tags) // Direct access without this prefix is allowed for compatibility. bstr k = bstr0(ka->key); bstr_eatstart0(&k, "by-key/"); - char *meta = mp_tags_get_bstr(tags, k); - if (!meta) - return M_PROPERTY_UNKNOWN; switch (ka->action) { - case M_PROPERTY_GET: + case M_PROPERTY_GET: { + char *meta = mp_tags_get_bstr(tags, k); + if (!meta) + return M_PROPERTY_UNKNOWN; *(char **)ka->arg = talloc_strdup(NULL, meta); return M_PROPERTY_OK; + } case M_PROPERTY_GET_TYPE: *(struct m_option *)ka->arg = (struct m_option){ .type = CONF_TYPE_STRING, }; return M_PROPERTY_OK; + case M_PROPERTY_SET: + mp_tags_set_bstr(tags, k, bstr0(*(char **)ka->arg)); + return M_PROPERTY_OK; } } }