From 844392f50dffb5cd5d67a05ecd5885813d325fc9 Mon Sep 17 00:00:00 2001 From: Adrian Sampson Date: Sun, 15 Nov 2009 13:52:47 -0800 Subject: [PATCH] fixed "search any" in bpd --- beets/player/bpd.py | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/beets/player/bpd.py b/beets/player/bpd.py index e884aa9ae..b1e1708c4 100755 --- a/beets/player/bpd.py +++ b/beets/player/bpd.py @@ -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 + \