From 25e8ce2d37aa29c112f125f0c34767dece614de5 Mon Sep 17 00:00:00 2001 From: jcorporation Date: Sat, 28 Sep 2024 21:03:49 +0200 Subject: [PATCH] New command tagtypes available Shows the list of tag types configured by the ``metadata_to_use`` setting. --- NEWS | 1 + doc/protocol.rst | 6 ++++++ src/TagPrint.cxx | 8 ++++++++ src/TagPrint.hxx | 3 +++ src/command/ClientCommands.cxx | 3 +++ 5 files changed, 21 insertions(+) diff --git a/NEWS b/NEWS index bf3fba46d..f5834a1f8 100644 --- a/NEWS +++ b/NEWS @@ -16,6 +16,7 @@ ver 0.24 (not yet released) - "sticker find" supports sort and window parameter and new sticker compare operators "eq", "lt" and "gt" - consume only idle flags that were subscribed to - volume command is no longer deprecated + - new "available" subcommand for tagtypes * database - attribute "added" shows when each song was added to the database - fix integer overflows with 64-bit inode numbers diff --git a/doc/protocol.rst b/doc/protocol.rst index 6b9b59eac..024845210 100644 --- a/doc/protocol.rst +++ b/doc/protocol.rst @@ -1678,6 +1678,12 @@ Connection settings Announce that this client is interested in all tag types. This is the default setting for new clients. +.. _command_tagtypes_available: + +:command:`tagtypes available` + Shows the list of tag types configured + by the ``metadata_to_use`` setting. + .. _partition_commands: Partition commands diff --git a/src/TagPrint.cxx b/src/TagPrint.cxx index 812bdb452..fa638405a 100644 --- a/src/TagPrint.cxx +++ b/src/TagPrint.cxx @@ -18,6 +18,14 @@ tag_print_types(Response &r) noexcept r.Fmt(FMT_STRING("tagtype: {}\n"), tag_item_names[i]); } +void +tag_print_types_available(Response &r) noexcept +{ + for (unsigned i = 0; i < TAG_NUM_OF_ITEM_TYPES; i++) + if (global_tag_mask.Test(TagType(i))) + r.Fmt(FMT_STRING("tagtype: {}\n"), tag_item_names[i]); +} + void tag_print(Response &r, TagType type, std::string_view value) noexcept { diff --git a/src/TagPrint.hxx b/src/TagPrint.hxx index 539839bec..23b255168 100644 --- a/src/TagPrint.hxx +++ b/src/TagPrint.hxx @@ -15,6 +15,9 @@ class Response; void tag_print_types(Response &response) noexcept; +void +tag_print_types_available(Response &response) noexcept; + void tag_print(Response &response, TagType type, std::string_view value) noexcept; diff --git a/src/command/ClientCommands.cxx b/src/command/ClientCommands.cxx index 6be2bd76a..2c93c961b 100644 --- a/src/command/ClientCommands.cxx +++ b/src/command/ClientCommands.cxx @@ -104,6 +104,9 @@ handle_tagtypes(Client &client, Request request, Response &r) } else if (StringIsEqual(cmd, "disable")) { client.tag_mask &= ~ParseTagMask(request); return CommandResult::OK; + } else if (StringIsEqual(cmd, "available")) { + tag_print_types_available(r); + return CommandResult::OK; } else { r.Error(ACK_ERROR_ARG, "Unknown sub command"); return CommandResult::ERROR;