Remove debug, make track_no more robust

This commit is contained in:
Lasse Bigum 2013-11-02 03:25:57 +01:00 committed by Stein Magnus Jodal
parent efc9fc75b5
commit e7746dac1b
2 changed files with 22 additions and 10 deletions

View File

@ -21,6 +21,12 @@ class LocalLibraryProvider(base.BaseLibraryProvider):
self._tag_cache_file = self.backend.config['local']['tag_cache_file']
self.refresh()
def _convert_to_int(self, string):
try:
return int(string)
except ValueError:
return object()
def refresh(self, uri=None):
logger.debug(
'Loading local tracks from %s using %s',
@ -60,7 +66,10 @@ class LocalLibraryProvider(base.BaseLibraryProvider):
values = [values]
# FIXME this is bound to be slow for large libraries
for value in values:
q = value.strip()
if field == 'track_no':
q = self._convert_to_int(value)
else:
q = value.strip()
uri_filter = lambda t: q == t.uri
track_filter = lambda t: q == t.name
@ -70,7 +79,7 @@ class LocalLibraryProvider(base.BaseLibraryProvider):
albumartist_filter = lambda t: any([
q == a.name
for a in getattr(t.album, 'artists', [])])
track_no_filter = lambda t: int(q) == t.track_no
track_no_filter = lambda t: q == t.track_no
date_filter = lambda t: q == t.date
any_filter = lambda t: (
uri_filter(t) or
@ -88,14 +97,8 @@ class LocalLibraryProvider(base.BaseLibraryProvider):
result_tracks = filter(album_filter, result_tracks)
elif field == 'artist':
result_tracks = filter(artist_filter, result_tracks)
#import logging
#logger = logging.getLogger('mopidy.backends.local')
#logger.debug("==find_exact=artist - q: {} - tracks: {}".format(q, result_tracks))
elif field == 'albumartist':
result_tracks = filter(albumartist_filter, result_tracks)
#import logging
#logger = logging.getLogger('mopidy.backends.local')
#logger.debug("==find_exact=albumartist - q: {} - tracks: {}".format(q, result_tracks))
elif field == 'track_no':
result_tracks = filter(track_no_filter, result_tracks)
elif field == 'date':
@ -120,7 +123,10 @@ class LocalLibraryProvider(base.BaseLibraryProvider):
values = [values]
# FIXME this is bound to be slow for large libraries
for value in values:
q = value.strip().lower()
if field == 'track_no':
q = self._convert_to_int(value)
else:
q = value.strip().lower()
uri_filter = lambda t: q in t.uri.lower()
track_filter = lambda t: q in t.name.lower()
@ -131,7 +137,7 @@ class LocalLibraryProvider(base.BaseLibraryProvider):
albumartist_filter = lambda t: any([
q in a.name.lower()
for a in getattr(t.album, 'artists', [])])
track_no_filter = lambda t: int(q) == t.track_no
track_no_filter = lambda t: q == t.track_no
date_filter = lambda t: t.date and t.date.startswith(q)
any_filter = lambda t: (
uri_filter(t) or

View File

@ -117,6 +117,9 @@ class LocalLibraryProviderTest(unittest.TestCase):
result = self.library.find_exact(track_no=['9'])
self.assertEqual(list(result[0].tracks), [])
result = self.library.find_exact(track_no=['no_match'])
self.assertEqual(list(result[0].tracks), [])
result = self.library.find_exact(uri=['fake uri'])
self.assertEqual(list(result[0].tracks), [])
@ -250,6 +253,9 @@ class LocalLibraryProviderTest(unittest.TestCase):
result = self.library.search(track_no=['9'])
self.assertEqual(list(result[0].tracks), [])
result = self.library.search(track_no=['no_match'])
self.assertEqual(list(result[0].tracks), [])
result = self.library.search(date=['unknown date'])
self.assertEqual(list(result[0].tracks), [])