mirror of https://github.com/mpv-player/mpv
command: allow accessing metadata entries as list
Not sure about these deep path-names. Maybe "metadata/0" should work instead of "metadata/list/0". I'm so unsure about it, that I'm leaving it open.
This commit is contained in:
parent
844efa5431
commit
bda0e7da13
|
@ -654,10 +654,22 @@ an option at runtime.
|
|||
``metadata/by-key/<key>``
|
||||
Value of metadata entry ``<key>``.
|
||||
|
||||
``metadata/list/count``
|
||||
Number of metadata entries.
|
||||
|
||||
``metadata/list/N/name``
|
||||
Key name of the Nth metadata entry. (The first entry is ``0``).
|
||||
|
||||
``metadata/list/N/value``
|
||||
Value of the Nth metadata entry.
|
||||
|
||||
``metadata/<key>``
|
||||
Old version of ``metadata/by-key/<key>``. Use is discouraged, because
|
||||
the metadata key string could conflict with other sub-properties.
|
||||
|
||||
The layout of this property might be subject to change. Suggestions are
|
||||
welcome how exactly this property should work.
|
||||
|
||||
``chapter-metadata``
|
||||
Metadata of current chapter. Works similar to ``metadata`` property. This
|
||||
also allows referring to a key directly.
|
||||
|
|
|
@ -770,6 +770,19 @@ static int mp_property_angle(m_option_t *prop, int action, void *arg,
|
|||
return M_PROPERTY_NOT_IMPLEMENTED;
|
||||
}
|
||||
|
||||
static int get_tag_entry(int item, int action, void *arg, void *ctx)
|
||||
{
|
||||
struct mp_tags *tags = ctx;
|
||||
|
||||
struct m_sub_property props[] = {
|
||||
{"key", SUB_PROP_STR(tags->keys[item])},
|
||||
{"value", SUB_PROP_STR(tags->values[item])},
|
||||
{0}
|
||||
};
|
||||
|
||||
return m_property_read_sub(props, action, arg);
|
||||
}
|
||||
|
||||
static int tag_property(m_option_t *prop, int action, void *arg,
|
||||
struct mp_tags *tags)
|
||||
{
|
||||
|
@ -802,6 +815,12 @@ static int tag_property(m_option_t *prop, int action, void *arg,
|
|||
case M_PROPERTY_KEY_ACTION: {
|
||||
struct m_property_action_arg *ka = arg;
|
||||
bstr key = bstr0(ka->key);
|
||||
if (bstr_eatstart0(&key, "list/")) {
|
||||
struct m_property_action_arg nka = *ka;
|
||||
nka.key = key.start; // ok because slice ends with \0
|
||||
return m_property_read_list(action, &nka, tags->num_keys,
|
||||
get_tag_entry, tags);
|
||||
}
|
||||
// Direct access without this prefix is allowed for compatibility.
|
||||
bstr_eatstart0(&key, "by-key/");
|
||||
char *meta = mp_tags_get_bstr(tags, key);
|
||||
|
|
Loading…
Reference in New Issue