mirror of
https://github.com/beetbox/beets.git
synced 2025-12-30 12:32:33 +01:00
fixed "search any" in bpd
This commit is contained in:
parent
27721b80b1
commit
844392f50d
1 changed files with 18 additions and 7 deletions
|
|
@ -962,31 +962,42 @@ class Server(BaseServer):
|
|||
return test_tag, key
|
||||
raise BPDError(ERROR_UNKNOWN, 'no such tagtype')
|
||||
|
||||
def _metadata_query(self, query_type, kv):
|
||||
def _metadata_query(self, query_type, any_query_type, kv):
|
||||
"""Helper function returns a query object that will find items
|
||||
according to the library query type provided and the key-value
|
||||
pairs specified.
|
||||
pairs specified. The any_query_type is used for queries of
|
||||
type "any"; if None, then an error is thrown.
|
||||
"""
|
||||
if kv: # At least one key-value pair.
|
||||
queries = []
|
||||
# Iterate pairwise over the arguments.
|
||||
it = iter(kv)
|
||||
for tag, value in zip(it, it):
|
||||
_, key = self._tagtype_lookup(tag)
|
||||
queries.append(query_type(key, value))
|
||||
if tag.lower() == 'any':
|
||||
if any_query_type:
|
||||
queries.append(any_query_type(value))
|
||||
else:
|
||||
raise BPDError(ERROR_UNKNOWN, 'no such tagtype')
|
||||
else:
|
||||
_, key = self._tagtype_lookup(tag)
|
||||
queries.append(query_type(key, value))
|
||||
return beets.library.AndQuery(queries)
|
||||
else: # No key-value pairs.
|
||||
return beets.library.TrueQuery()
|
||||
|
||||
def cmd_search(self, conn, *kv):
|
||||
"""Perform a substring match for items."""
|
||||
query = self._metadata_query(beets.library.SubstringQuery, kv)
|
||||
query = self._metadata_query(beets.library.SubstringQuery,
|
||||
beets.library.AnySubstringQuery,
|
||||
kv)
|
||||
for item in self.lib.items(query=query):
|
||||
conn.send(*self._item_info(item))
|
||||
|
||||
def cmd_find(self, conn, *kv):
|
||||
"""Perform an exact match for items."""
|
||||
query = self._metadata_query(beets.library.MatchQuery, kv)
|
||||
query = self._metadata_query(beets.library.MatchQuery,
|
||||
None,
|
||||
kv)
|
||||
for item in self.lib.items(query=query):
|
||||
conn.send(*self._item_info(item))
|
||||
|
||||
|
|
@ -995,7 +1006,7 @@ class Server(BaseServer):
|
|||
filtered by matching match_tag to match_term.
|
||||
"""
|
||||
show_tag_canon, show_key = self._tagtype_lookup(show_tag)
|
||||
query = self._metadata_query(beets.library.MatchQuery, kv)
|
||||
query = self._metadata_query(beets.library.MatchQuery, None, kv)
|
||||
|
||||
clause, subvals = query.clause()
|
||||
statement = 'SELECT DISTINCT ' + show_key + \
|
||||
|
|
|
|||
Loading…
Reference in a new issue