]> kaliko git repositories - mpd-sima.git/blobdiff - sima/lib/player.py
Enhanced queuing behavior in random mode (Closes #16)
[mpd-sima.git] / sima / lib / player.py
index 473c9dfa097dea5f18579c9df0d8dc3d8f03dc89..1d1f69315301e681933ea73a376118cacfd3876c 100644 (file)
 
 # standard library import
 import logging
-from difflib import get_close_matches
 from itertools import dropwhile
 
 # local import
-from .meta import Artist
-from .simastr import SimaStr
-from ..utils.leven import levenshtein_ratio
 
 def blacklist(artist=False, album=False, track=False):
     #pylint: disable=C0111,W0212
@@ -48,7 +44,7 @@ def blacklist(artist=False, album=False, track=False):
             results = list()
             for elem in func(*args, **kwargs):
                 if bl_getter(elem, add_not=True):
-                    cls.log.debug('Blacklisted "{0}"'.format(elem))
+                    #cls.log.debug('Blacklisted "{0}"'.format(elem))
                     continue
                 if track and cls.database.get_bl_album(elem, add_not=True):
                     # filter album as well in track mode
@@ -60,28 +56,6 @@ def blacklist(artist=False, album=False, track=False):
         return wrapper
     return decorated
 
-def bl_artist(func):
-    def wrapper(*args, **kwargs):
-        cls = args[0]
-        if not args[0].database:
-            return func(*args, **kwargs)
-        result = func(*args, **kwargs)
-        if not result:
-            return
-        names = list()
-        for art in result.names:
-            if cls.database.get_bl_artist(art, add_not=True):
-                cls.log.debug('Blacklisted "{0}"'.format(art))
-                continue
-            names.append(art)
-        if not names:
-            return
-        resp = Artist(name=names.pop(), mbid=result.mbid)
-        for name in names:
-            resp.add_alias(name)
-        return resp
-    return wrapper
-
 
 class Player(object):
     """Player interface to inherit from.
@@ -123,8 +97,8 @@ class Player(object):
     def find_track(self, artist, title=None):
         """
         Find tracks for a specific artist or filtering with a track title
-            >>> player.find_track('The Beatles')
-            >>> player.find_track('Nirvana', title='Smells Like Teen Spirit')
+            >>> player.find_track(Artist('The Beatles'))
+            >>> player.find_track(Artist('Nirvana'), title='Smells Like Teen Spirit')
 
         Returns a list of Track objects
         """
@@ -149,55 +123,17 @@ class Player(object):
         """
         raise NotImplementedError
 
-    @bl_artist
     def search_artist(self, artist):
         """
         Search artists based on a fuzzy search in the media library
-            >>> bea = player.search_artist('The beatles')
+            >>> art = Artist(name='the beatles', mbid=<UUID4>) # mbid optional
+            >>> bea = player.search_artist(art)
             >>> print(bea.names)
             >>> ['The Beatles', 'Beatles', 'the beatles']
 
-        Returns a list of strings (artist names)
+        Returns an Artist object
         """
-        found = False
-        # Then proceed with fuzzy matching if got nothing
-        match = get_close_matches(artist.name, self.artists, 50, 0.73)
-        if not match:
-            return
-        if len(match) > 1:
-            self.log.debug('found close match for "%s": %s' %
-                           (artist, '/'.join(match)))
-        # Does not perform fuzzy matching on short and single word strings
-        # Only lowercased comparison
-        if ' ' not in artist.name and len(artist.name) < 8:
-            for fuzz_art in match:
-                # Regular lowered string comparison
-                if artist.name.lower() == fuzz_art.lower():
-                    artist.add_alias(fuzz_art)
-                    return artist
-        fzartist = SimaStr(artist.name)
-        for fuzz_art in match:
-            # Regular lowered string comparison
-            if artist.name.lower() == fuzz_art.lower():
-                found = True
-                if artist.name != fuzz_art:
-                    artist.add_alias(fuzz_art)
-                    self.log.debug('"%s" matches "%s".' % (fuzz_art, artist))
-                continue
-            # SimaStr string __eq__ (not regular string comparison here)
-            if fzartist == fuzz_art:
-                found = True
-                artist.add_alias(fuzz_art)
-                self.log.info('"%s" quite probably matches "%s" (SimaStr)' %
-                              (fuzz_art, artist))
-            #else:
-                #self.log.debug('FZZZ: "%s" does not match "%s"' %
-                               #(fuzz_art, artist))
-        if found:
-            if artist.aliases:
-                self.log.debug('Found: {}'.format('/'.join(artist.names)))
-            return artist
-        return
+        raise NotImplementedError
 
     def disconnect(self):
         """Closing client connection with the Player
@@ -211,22 +147,42 @@ class Player(object):
 
     @property
     def artists(self):
+        #pylint: disable=C0111
         raise NotImplementedError
 
     @property
     def state(self):
+        """Returns (play|stop|pause)"""
+        #pylint: disable=C0111
+        raise NotImplementedError
+
+    @property
+    def playmode(self):
+        """Returns a mapping
+        {
+            'repeat': boolean,
+            'random': boolean,
+            'single': boolean,
+            'consume': boolean,
+            …
+            }
+        """
+        #pylint: disable=C0111
         raise NotImplementedError
 
     @property
     def current(self):
+        #pylint: disable=C0111
         raise NotImplementedError
 
     @property
     def queue(self):
+        #pylint: disable=C0111
         raise NotImplementedError
 
     @property
     def playlist(self):
+        #pylint: disable=C0111
         raise NotImplementedError
 
 # VIM MODLINE