local: Make search filters more robust (fixes #635)

This commit is contained in:
Stein Magnus Jodal 2014-01-17 23:43:43 +01:00
parent b38d3dba79
commit 06856851f7
3 changed files with 16 additions and 12 deletions

View File

@ -101,25 +101,26 @@ def search(tracks, query=None, uris=None):
else:
q = value.strip().lower()
uri_filter = lambda t: q in t.uri.lower()
track_name_filter = lambda t: q in t.name.lower()
album_filter = lambda t: q in getattr(
t, 'album', Album()).name.lower()
artist_filter = lambda t: filter(
lambda a: q in a.name.lower(), t.artists)
uri_filter = lambda t: bool(t.uri and q in t.uri.lower())
track_name_filter = lambda t: bool(t.name and q in t.name.lower())
album_filter = lambda t: bool(
t.album and t.album.name and q in t.album.name.lower())
artist_filter = lambda t: bool(filter(
lambda a: bool(a.name and q in a.name.lower()), t.artists))
albumartist_filter = lambda t: any([
q in a.name.lower()
a.name and q in a.name.lower()
for a in getattr(t.album, 'artists', [])])
composer_filter = lambda t: any([
q in a.name.lower()
a.name and q in a.name.lower()
for a in getattr(t, 'composers', [])])
performer_filter = lambda t: any([
q in a.name.lower()
a.name and q in a.name.lower()
for a in getattr(t, 'performers', [])])
track_no_filter = lambda t: q == t.track_no
genre_filter = lambda t: t.genre and q in t.genre.lower()
date_filter = lambda t: t.date and t.date.startswith(q)
comment_filter = lambda t: t.comment and q in t.comment.lower()
genre_filter = lambda t: bool(t.genre and q in t.genre.lower())
date_filter = lambda t: bool(t.date and t.date.startswith(q))
comment_filter = lambda t: bool(
t.comment and q in t.comment.lower())
any_filter = lambda t: (
uri_filter(t) or
track_name_filter(t) or

Binary file not shown.

View File

@ -24,6 +24,7 @@ class LocalLibraryProviderTest(unittest.TestCase):
Artist(name='artist4'),
Artist(name='artist5'),
Artist(name='artist6'),
Artist(),
]
albums = [
@ -31,6 +32,7 @@ class LocalLibraryProviderTest(unittest.TestCase):
Album(name='album2', artists=[artists[1]]),
Album(name='album3', artists=[artists[2]]),
Album(name='album4'),
Album(artists=[artists[-1]]),
]
tracks = [
@ -57,6 +59,7 @@ class LocalLibraryProviderTest(unittest.TestCase):
Track(
uri='local:track:path6', name='track6', genre='genre2',
album=albums[3], length=4000, performers=[artists[5]]),
Track(uri='local:track:nameless', album=albums[-1]),
]
config = {