From 0505cb8f7e2f96f2fc7c993d0673b54648d52582 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Wed, 25 Jul 2018 11:18:45 +0200 Subject: [PATCH] db/Print: move code to PrintSongUris() --- src/command/DatabaseCommands.cxx | 7 +++++-- src/db/DatabasePrint.cxx | 35 +++++++++++++++++++------------- src/db/DatabasePrint.hxx | 4 ++++ 3 files changed, 30 insertions(+), 16 deletions(-) diff --git a/src/command/DatabaseCommands.cxx b/src/command/DatabaseCommands.cxx index 746dfcb50..d9ff60316 100644 --- a/src/command/DatabaseCommands.cxx +++ b/src/command/DatabaseCommands.cxx @@ -285,8 +285,11 @@ handle_list(Client &client, Request args, Response &r) return CommandResult::ERROR; } - PrintUniqueTags(r, client.GetPartition(), - tagType, group_mask, filter.get()); + if (tagType == LOCATE_TAG_FILE_TYPE) + PrintSongUris(r, client.GetPartition(), filter.get()); + else + PrintUniqueTags(r, client.GetPartition(), + tagType, group_mask, filter.get()); return CommandResult::OK; } diff --git a/src/db/DatabasePrint.cxx b/src/db/DatabasePrint.cxx index f166e4a17..89172299d 100644 --- a/src/db/DatabasePrint.cxx +++ b/src/db/DatabasePrint.cxx @@ -273,6 +273,20 @@ PrintSongURIVisitor(Response &r, const LightSong &song) noexcept song_print_uri(r, song); } +void +PrintSongUris(Response &r, Partition &partition, + const SongFilter *filter) +{ + const Database &db = partition.GetDatabaseOrThrow(); + + const DatabaseSelection selection("", true, filter); + + using namespace std::placeholders; + const auto f = std::bind(PrintSongURIVisitor, + std::ref(r), _1); + db.Visit(selection, f); +} + static void PrintUniqueTag(Response &r, TagType tag_type, const Tag &tag) noexcept @@ -292,22 +306,15 @@ PrintUniqueTags(Response &r, Partition &partition, unsigned type, TagMask group_mask, const SongFilter *filter) { + assert(type < TAG_NUM_OF_ITEM_TYPES); + const Database &db = partition.GetDatabaseOrThrow(); const DatabaseSelection selection("", true, filter); - if (type == LOCATE_TAG_FILE_TYPE) { - using namespace std::placeholders; - const auto f = std::bind(PrintSongURIVisitor, - std::ref(r), _1); - db.Visit(selection, f); - } else { - assert(type < TAG_NUM_OF_ITEM_TYPES); - - using namespace std::placeholders; - const auto f = std::bind(PrintUniqueTag, std::ref(r), - (TagType)type, _1); - db.VisitUniqueTags(selection, (TagType)type, - group_mask, f); - } + using namespace std::placeholders; + const auto f = std::bind(PrintUniqueTag, std::ref(r), + (TagType)type, _1); + db.VisitUniqueTags(selection, (TagType)type, + group_mask, f); } diff --git a/src/db/DatabasePrint.hxx b/src/db/DatabasePrint.hxx index 7026308b7..ab462de9e 100644 --- a/src/db/DatabasePrint.hxx +++ b/src/db/DatabasePrint.hxx @@ -49,6 +49,10 @@ db_selection_print(Response &r, Partition &partition, TagType sort, bool descending, unsigned window_start, unsigned window_end); +void +PrintSongUris(Response &r, Partition &partition, + const SongFilter *filter); + void PrintUniqueTags(Response &r, Partition &partition, unsigned type, TagMask group_mask,