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
def callback(browser, userdata): for track in browser: result.append(translator.to_mopidy_track_ref(track)) done.set()