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:
parent
0f19108ce3
commit
c46483a4ab
1
NEWS
1
NEWS
|
@ -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
|
||||||
|
|
|
@ -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.
|
||||||
#
|
#
|
||||||
|
|
11
doc/user.rst
11
doc/user.rst
|
@ -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
|
||||||
~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue