예제 #1
0
    def browse(self, uri):
        if uri == self.root_directory.uri:
            return self._root

        variant, identifier = translator.parse_uri(uri.lower())

        if variant == 'album':
            album = Link.from_string(uri).as_album()
            album_browser = self.backend.spotify.session.browse_album(album)
            utils.wait_for_object_to_load(album_browser, self._timeout)
            return [translator.to_mopidy_track_ref(t) for t in album_browser]

        if variant == 'user':
            playlist = Link.from_string(uri).as_playlist()
            utils.wait_for_object_to_load(playlist, self._timeout)
            return [translator.to_mopidy_track_ref(t) for t in playlist]

        if variant != 'toplist':
            return []

        if identifier == 'countries':
            return self._countries

        if identifier not in ('all', 'current'):
            identifier = identifier.upper()
            if identifier not in SPOTIFY_COUNTRIES:
                return []

        result = []
        done = threading.Event()

        def callback(browser, userdata):
            for track in browser:
                result.append(translator.to_mopidy_track_ref(track))
            done.set()

        logger.debug('Performing toplist browse for %s', identifier)
        ToplistBrowser(b'tracks', bytes(identifier), callback, None)
        if not done.wait(self._timeout):
            logger.warning('%s toplist browse timed out.', identifier)

        return result
예제 #2
0
    def browse(self, uri):
        if uri == self.root_directory.uri:
            return self._root

        variant, identifier = translator.parse_uri(uri.lower())

        if variant == 'album':
            album = Link.from_string(uri).as_album()
            album_browser = self.backend.spotify.session.browse_album(album)
            utils.wait_for_object_to_load(album_browser, self._timeout)
            return [translator.to_mopidy_track_ref(t) for t in album_browser]

        if variant == 'user':
            playlist = Link.from_string(uri).as_playlist()
            utils.wait_for_object_to_load(playlist, self._timeout)
            return [translator.to_mopidy_track_ref(t) for t in playlist]

        if variant != 'toplist':
            return []

        if identifier == 'countries':
            return self._countries

        if identifier not in ('all', 'current'):
            identifier = identifier.upper()
            if identifier not in SPOTIFY_COUNTRIES:
                return []

        result = []
        done = threading.Event()

        def callback(browser, userdata):
            for track in browser:
                result.append(translator.to_mopidy_track_ref(track))
            done.set()

        logger.debug('Performing toplist browse for %s', identifier)
        ToplistBrowser(b'tracks', bytes(identifier), callback, None)
        if not done.wait(self._timeout):
            logger.warning('%s toplist browse timed out.', identifier)

        return result
예제 #3
0
 def callback(browser, userdata):
     for track in browser:
         result.append(translator.to_mopidy_track_ref(track))
     done.set()
예제 #4
0
 def callback(browser, userdata):
     for track in browser:
         result.append(translator.to_mopidy_track_ref(track))
     done.set()