Ejemplo n.º 1
0
 def init_app(self, app):
     self.app = app
     self.index = AudioIndex(app=app, filter_keys=self.filter_keys, text_keys=self.text_keys)
     self.index.start()
     self.stream = AudioStream(app, self.index)
     self.stream.start()
Ejemplo n.º 2
0
class AudioPlayer(object):
    filter_keys = ['title', 'artist', 'genre', 'album']
    text_keys = ['title', 'artist', 'album']
    
    def __init__(self, app=None):
        if app is not None:
            self.init_app(app)
        else:
            self.app = None
            self.stream = None

    def init_app(self, app):
        self.app = app
        self.index = AudioIndex(app=app, filter_keys=self.filter_keys, text_keys=self.text_keys)
        self.index.start()
        self.stream = AudioStream(app, self.index)
        self.stream.start()

    def __getattr__(self, attr):
        if attr in self.__dict__:
            if not self.stream.is_ready():
                return

            return self.__dict__[attr]
        else:
            return getattr(self.stream, attr)

    def get_num_songs(self):
        return len(self.index.files)

    def get_num_playlist_songs(self):
        return len(self.stream.queue)

    def get_song_pos(self):
        return (self.stream.pos_cur, self.stream.pos_end)

    def get_current_song(self):
        if not self.is_ready():
            return

        return self.stream.get_current_song()

    def play_random(self):
        if not self.is_ready():
            return
        
        name = self.index.files.values()[random.randint(0, len(self.index.files))]

        return self.play_filename(name)

    def find_song(self, query):
        if not self.is_ready():
            return

        return self.index.search(query) or []
    
    def get_metadata(self, filename):
        return self.index.metadata[filename]
    
    def play_filename(self, filename):
        if not self.is_ready():
            return

        if not os.path.exists(filename):
            raise ValueError

        self.stream.queue.add(filename)

    def list_by_metadata(self, key, value=None, limit=None):
        data = self.index.filters[key]
        if value:
            data = data[value]

        for item in data:
            yield item