Skip to content

Commit

Permalink
Fix search
Browse files Browse the repository at this point in the history
  • Loading branch information
Janez Troha committed Apr 30, 2013
1 parent 470cdba commit 542146e
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 23 deletions.
2 changes: 1 addition & 1 deletion mopidy_beets/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
"""

__version__ = '1.0.1'
__version__ = '1.0.2'


class BeetsExtension(ext.Extension):
Expand Down
7 changes: 5 additions & 2 deletions mopidy_beets/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import logging
import requests
import time
import urllib

from requests.exceptions import RequestException
from mopidy.models import Track, Album, Artist
Expand Down Expand Up @@ -75,15 +76,17 @@ def get_track(self, id, remote_url=False):

@cache()
def get_item_by(self, name):
res = self._get('/item/query/%s' % name).get('results')
res = self._get('/item/query/%s' %
urllib.quote(name)).get('results')
try:
return self._parse_query(res)
except Exception:
return False

@cache()
def get_album_by(self, name):
res = self._get('/album/query/%s' % name).get('results')
res = self._get('/album/query/%s' %
urllib.quote(name)).get('results')
try:
return self._parse_query(res[0]['items'])
except Exception:
Expand Down
44 changes: 24 additions & 20 deletions mopidy_beets/library.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@


class BeetsLibraryProvider(base.BaseLibraryProvider):

def __init__(self, *args, **kwargs):
super(BeetsLibraryProvider, self).__init__(*args, **kwargs)
self.remote = self.backend.beets_api
Expand All @@ -17,42 +18,45 @@ def find_exact(self, query=None, uris=None):
return self.search(query=query, uris=uris)

def search(self, query=None, uris=None):
logger.debug('Query "%s":' % query)
if not self.remote.has_connection:
return []

if not query:
# Fetch all data(browse library)
return SearchResult(
uri='beets:search',
tracks=self.remote.get_tracks())

self._validate_query(query)
if 'any' in query:
return SearchResult(
uri='beets:search-any',
tracks=self.remote.get_item_by(query['any'][0]) or [])
else:
search = []
for (field, val) in query.iteritems():

for (field, val) in query.iteritems():
if field == "album":
return SearchResult(
uri='beets:search',
tracks=self.remote.get_album_by(val[0]) or [])
elif field == "artist":
return SearchResult(
uri='beets:search',
tracks=self.remote.get_item_by(val[0]) or [])
elif field == "any":
return SearchResult(
uri='beets:search',
tracks=self.remote.get_item_by(val[0]) or [])
else:
raise LookupError('Invalid lookup field: %s' % field)

return []
if field == "album":
search.append(val[0])
if field == "artist":
search.append(val[0])
if field == "track":
search.append(val[0])
if field == "date":
search.append(val[0])
logger.debug('Search query "%s":' % search)
return SearchResult(
uri='beets:search-' + '-'.join(search),
tracks=self.remote.get_item_by('/'.join(search)) or [])

def lookup(self, uri):
try:
id = uri.split(";")[1]
logger.debug(u'Beets track id for "%s": %s', id, uri)
logger.debug('Beets track id for "%s": %s' % (id, uri))
return [self.remote.get_track(id, True)]
except Exception as error:
logger.debug(u'Failed to lookup "%s": %s', uri, error)
logger.debug('Failed to lookup "%s": %s' % (uri, error))
return []

def _validate_query(self, query):
Expand Down

0 comments on commit 542146e

Please sign in to comment.