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.
This commit is contained in:
Max Kellermann 2018-08-10 18:31:05 +02:00
parent 0f19108ce3
commit c46483a4ab
4 changed files with 36 additions and 5 deletions

1
NEWS
View File

@ -1,6 +1,7 @@
ver 0.21 (not yet released) ver 0.21 (not yet released)
* configuration * configuration
- add "include" directive, allows including config files - add "include" directive, allows including config files
- incremental "metadata_to_use" setting
* protocol * protocol
- "tagtypes" can be used to hide tags - "tagtypes" can be used to hide tags
- "find" and "search" can sort - "find" and "search" can sort

View File

@ -111,6 +111,10 @@
# found in the user manual. # found in the user manual.
#metadata_to_use "artist,album,title,track,name,genre,date,composer,performer,disc" #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 # This setting enables automatic update of MPD's database when files in
# music_directory are changed. # music_directory are changed.
# #

View File

@ -494,7 +494,16 @@ Other Settings
setting can reduce the database size and :program:`MPD`'s setting can reduce the database size and :program:`MPD`'s
memory usage by omitting unused tags. By default, all tags but memory usage by omitting unused tags. By default, all tags but
comment are enabled. The special value "none" disables all 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 The State File
~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~

View File

@ -34,19 +34,36 @@ TagLoadConfig(const ConfigData &config)
if (value == nullptr) if (value == nullptr)
return; return;
if (StringEqualsCaseASCII(value, "none")) {
global_tag_mask = TagMask::None(); global_tag_mask = TagMask::None();
if (StringEqualsCaseASCII(value, "none"))
return; return;
}
bool plus = true;
if (*value != '+' && *value != '-')
/* no "+-": not incremental */
global_tag_mask = TagMask::None();
for (const auto &i : SplitString(value, ',')) { for (const auto &i : SplitString(value, ',')) {
const char *name = i.c_str(); 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); const auto type = tag_name_parse_i(name);
if (type == TAG_NUM_OF_ITEM_TYPES) if (type == TAG_NUM_OF_ITEM_TYPES)
throw FormatRuntimeError("error parsing metadata item \"%s\"", throw FormatRuntimeError("error parsing metadata item \"%s\"",
name); name);
global_tag_mask |= type; if (plus)
global_tag_mask.Set(type);
else
global_tag_mask.Unset(type);
} }
} }