Commit c46483a4 authored by Max Kellermann's avatar Max Kellermann

tag/Config: support incremental "metadata_to_use" setting

With a "+" or "-" prefix, the "metadata_to_use" setting can manipulate the existing default. This way, one can enable `TAG_COMMENT` without having to list all the other tags.
parent 0f19108c
ver 0.21 (not yet released)
* configuration
- add "include" directive, allows including config files
- incremental "metadata_to_use" setting
* protocol
- "tagtypes" can be used to hide tags
- "find" and "search" can sort
......
......@@ -111,6 +111,10 @@
# found in the user manual.
#metadata_to_use "artist,album,title,track,name,genre,date,composer,performer,disc"
#
# This example just enables the "comment" tag without disabling all
# the other supported tags:
#metadata_to_use "+comment"
#
# This setting enables automatic update of MPD's database when files in
# music_directory are changed.
#
......
......@@ -494,7 +494,16 @@ Other Settings
setting can reduce the database size and :program:`MPD`'s
memory usage by omitting unused tags. By default, all tags but
comment are enabled. The special value "none" disables all
tags. Section :ref:`tags` contains a list of supported tags.
tags.
If the setting starts with ``+`` or ``-``, then the following
tags will be added or remoted to/from the current set of tags.
This example just enables the "comment" tag without disabling all
the other supported tags
metadata_to_use "+comment"
Section :ref:`tags` contains a list of supported tags.
The State File
~~~~~~~~~~~~~~
......
......@@ -34,19 +34,36 @@ TagLoadConfig(const ConfigData &config)
if (value == nullptr)
return;
global_tag_mask = TagMask::None();
if (StringEqualsCaseASCII(value, "none"))
if (StringEqualsCaseASCII(value, "none")) {
global_tag_mask = TagMask::None();
return;
}
bool plus = true;
if (*value != '+' && *value != '-')
/* no "+-": not incremental */
global_tag_mask = TagMask::None();
for (const auto &i : SplitString(value, ',')) {
const char *name = i.c_str();
if (*name == '+') {
plus = true;
++name;
} else if (*name == '-') {
plus = false;
++name;
}
const auto type = tag_name_parse_i(name);
if (type == TAG_NUM_OF_ITEM_TYPES)
throw FormatRuntimeError("error parsing metadata item \"%s\"",
name);
global_tag_mask |= type;
if (plus)
global_tag_mask.Set(type);
else
global_tag_mask.Unset(type);
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment