fixed "search any" in bpd

This commit is contained in:
Adrian Sampson 2009-11-15 13:52:47 -08:00
parent 27721b80b1
commit 844392f50d

View file

@ -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 + \