DatabaseCommands: "list" allows grouping
This commit is contained in:
@@ -85,12 +85,13 @@ LazyDatabase::Visit(const DatabaseSelection &selection,
|
||||
|
||||
bool
|
||||
LazyDatabase::VisitUniqueTags(const DatabaseSelection &selection,
|
||||
TagType tag_type,
|
||||
VisitString visit_string,
|
||||
TagType tag_type, uint32_t group_mask,
|
||||
VisitTag visit_tag,
|
||||
Error &error) const
|
||||
{
|
||||
return EnsureOpen(error) &&
|
||||
db->VisitUniqueTags(selection, tag_type, visit_string, error);
|
||||
db->VisitUniqueTags(selection, tag_type, group_mask, visit_tag,
|
||||
error);
|
||||
}
|
||||
|
||||
bool
|
||||
|
@@ -52,8 +52,8 @@ public:
|
||||
Error &error) const override;
|
||||
|
||||
virtual bool VisitUniqueTags(const DatabaseSelection &selection,
|
||||
TagType tag_type,
|
||||
VisitString visit_string,
|
||||
TagType tag_type, uint32_t group_mask,
|
||||
VisitTag visit_tag,
|
||||
Error &error) const override;
|
||||
|
||||
virtual bool GetStats(const DatabaseSelection &selection,
|
||||
|
@@ -112,8 +112,8 @@ public:
|
||||
Error &error) const override;
|
||||
|
||||
virtual bool VisitUniqueTags(const DatabaseSelection &selection,
|
||||
TagType tag_type,
|
||||
VisitString visit_string,
|
||||
TagType tag_type, uint32_t group_mask,
|
||||
VisitTag visit_tag,
|
||||
Error &error) const override;
|
||||
|
||||
virtual bool GetStats(const DatabaseSelection &selection,
|
||||
@@ -715,7 +715,8 @@ ProxyDatabase::Visit(const DatabaseSelection &selection,
|
||||
bool
|
||||
ProxyDatabase::VisitUniqueTags(const DatabaseSelection &selection,
|
||||
TagType tag_type,
|
||||
VisitString visit_string,
|
||||
gcc_unused uint32_t group_mask,
|
||||
VisitTag visit_tag,
|
||||
Error &error) const
|
||||
{
|
||||
// TODO: eliminate the const_cast
|
||||
@@ -734,6 +735,8 @@ ProxyDatabase::VisitUniqueTags(const DatabaseSelection &selection,
|
||||
if (!SendConstraints(connection, selection))
|
||||
return CheckError(connection, error);
|
||||
|
||||
// TODO: use group_mask
|
||||
|
||||
if (!mpd_search_commit(connection))
|
||||
return CheckError(connection, error);
|
||||
|
||||
@@ -742,7 +745,9 @@ ProxyDatabase::VisitUniqueTags(const DatabaseSelection &selection,
|
||||
struct mpd_pair *pair;
|
||||
while (result &&
|
||||
(pair = mpd_recv_pair_tag(connection, tag_type2)) != nullptr) {
|
||||
result = visit_string(pair->value, error);
|
||||
TagBuilder tag;
|
||||
tag.AddItem(tag_type, pair->value);
|
||||
result = visit_tag(tag.Commit(), error);
|
||||
mpd_return_pair(connection, pair);
|
||||
}
|
||||
|
||||
|
@@ -334,11 +334,12 @@ SimpleDatabase::Visit(const DatabaseSelection &selection,
|
||||
|
||||
bool
|
||||
SimpleDatabase::VisitUniqueTags(const DatabaseSelection &selection,
|
||||
TagType tag_type,
|
||||
VisitString visit_string,
|
||||
TagType tag_type, uint32_t group_mask,
|
||||
VisitTag visit_tag,
|
||||
Error &error) const
|
||||
{
|
||||
return ::VisitUniqueTags(*this, selection, tag_type, visit_string,
|
||||
return ::VisitUniqueTags(*this, selection, tag_type, group_mask,
|
||||
visit_tag,
|
||||
error);
|
||||
}
|
||||
|
||||
|
@@ -116,8 +116,8 @@ public:
|
||||
Error &error) const override;
|
||||
|
||||
virtual bool VisitUniqueTags(const DatabaseSelection &selection,
|
||||
TagType tag_type,
|
||||
VisitString visit_string,
|
||||
TagType tag_type, uint32_t group_mask,
|
||||
VisitTag visit_tag,
|
||||
Error &error) const override;
|
||||
|
||||
virtual bool GetStats(const DatabaseSelection &selection,
|
||||
|
@@ -94,8 +94,8 @@ public:
|
||||
Error &error) const override;
|
||||
|
||||
virtual bool VisitUniqueTags(const DatabaseSelection &selection,
|
||||
TagType tag_type,
|
||||
VisitString visit_string,
|
||||
TagType tag_type, uint32_t group_mask,
|
||||
VisitTag visit_tag,
|
||||
Error &error) const override;
|
||||
|
||||
virtual bool GetStats(const DatabaseSelection &selection,
|
||||
@@ -721,11 +721,13 @@ UpnpDatabase::Visit(const DatabaseSelection &selection,
|
||||
|
||||
bool
|
||||
UpnpDatabase::VisitUniqueTags(const DatabaseSelection &selection,
|
||||
TagType tag,
|
||||
VisitString visit_string,
|
||||
TagType tag, gcc_unused uint32_t group_mask,
|
||||
VisitTag visit_tag,
|
||||
Error &error) const
|
||||
{
|
||||
if (!visit_string)
|
||||
// TODO: use group_mask
|
||||
|
||||
if (!visit_tag)
|
||||
return true;
|
||||
|
||||
std::vector<ContentDirectoryService> servers;
|
||||
@@ -754,9 +756,12 @@ UpnpDatabase::VisitUniqueTags(const DatabaseSelection &selection,
|
||||
}
|
||||
}
|
||||
|
||||
for (const auto& value : values)
|
||||
if (!visit_string(value.c_str(), error))
|
||||
for (const auto& value : values) {
|
||||
TagBuilder builder;
|
||||
builder.AddItem(tag, value.c_str());
|
||||
if (!visit_tag(builder.Commit(), error))
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
Reference in New Issue
Block a user