def populate(self, options=None): if self.method is not None: return True if self.search_type is None: for kind in all_kinds: self.add_child( getNode( Flag.FAVORITE, parameters={'search-type': kind})) self.add_child( getNode( Flag.FAVORITE, parameters={'search-type': 'all'})) return True result = False search_for = (self.search_type, ) if self.search_type == 'all': search_for = all_kinds for kind in search_for: if kind not in self.data: continue method = '_populate_%s' % kind if not hasattr(self, method): logger.warn('No method named %s', method) continue if getattr(self, method)(options): result = True return result
def populate(self, Dir, lvl, whiteFlag, blackFlag): node_artist = getNode(Flag.ARTIST, data=self.data) node_artist.label = '[ %s ]' % (node_artist.label) if not 'albums' in self.data: return True for data in self.data['albums']['items']: node = getNode(Flag.ALBUM, data=data) self.add_child(node) return True del self._data['tracks']
def populate(self, options=None): options = helper.get_tree_traverse_opts(options) result = False if options.lvl != -1: self.add_child(getNode(Flag.FRIENDS, parameters=self.parameters)) for playlist in self.data['playlists']['items']: node = getNode(Flag.PLAYLIST, data=playlist) if node.get_owner() == self.label: self.nid = node.get_owner_id() self.add_child(node) result = True return result
def is_purchased(track): purchases = getNode(Flag.PURCHASE, parameters={'search-type': 'all'}) purchases.data = purchases.fetch() if search(purchases, track): return True album = getNode( Flag.ALBUM, parameters={'nid': track.get_property('album/id')}) album.data = album.fetch() if album.data is None: return False if search(purchases, album, kind='albums'): return True return False
def populate(self, Dir, lvl, whiteFlag, blackFlag): data = api.get('/playlist/getUserPlaylists', username=self.name) if not data: warn(self, "No friend data") return False if lvl != -1: self.add_child(getNode(Flag.FRIENDS, self.parameters)) for pl in data['playlists']['items']: node = getNode(Flag.PLAYLIST) node.data = pl if node.get_owner() == self.label: self.nid = node.get_owner_id() self.add_child(node) return True
def __add_pagination_node(self, Dir, lvl=1, whiteFlag=Flag.NODE): """Helper/Called by build_down to add special node when pagination is required """ if self.pagination_next: colorItem = getSetting('color_item') params = config.app.bootstrap.params params['offset'] = self.pagination_next_offset params['nid'] = self.nid node = getNode(self.nt, params) node.data = self.data label = self.get_label() if label is None: if self.label2 is not None: label = self.label2 elif self.parent is not None: label = self.parent.get_label() else: label = '[no-label]' nextLabel = u'[ {} {} / {} ]'.format(color(colorItem, label), self.pagination_next_offset, self.pagination_total) node.label = nextLabel node.label2 = label self.add_child(node)
def _populate_artists(self, options): self.content_type = 'artists' for artist in self.data['artists']['items']: node = getNode(Flag.ARTIST, data=artist) node.data = node.fetch(helper.TreeTraverseOpts(noRemote=True)) self.add_child(node) return True if len(self.data['artists']['items']) > 0 else False
def gui_add_to_current(self): cid = self.get_current_playlist() qnt = int(self.get_parameter('qnt')) qid = self.get_parameter('qid') nodes = [] if qnt & Flag.SEARCH == Flag.SEARCH: self.del_parameter('query') if qnt & Flag.TRACK == Flag.TRACK: node = getNode(qnt, {'nid': qid}) node.fetch(None, None, None, Flag.NONE) nodes.append(node) else: render = renderer(qnt, self.parameters) render.depth = -1 render.whiteFlag = Flag.TRACK render.asList = True render.run() nodes = render.nodes ret = xbmcgui.Dialog().select('Add to current playlist', [ node.get_label() for node in nodes ]) if ret == -1: return False ret = self._add_tracks(cid, nodes) if not ret: notify_warn('Qobuz', 'Failed to add tracks') return False self.delete_cache(cid) notify_log('Qobuz / Tracks added', '%s added' % (len(nodes))) return True
def populate(self, Dir, lvl, whiteFlag, blackFlag): for track in self.data['tracks']['items']: node = getNode(Flag.TRACK, data=track) if 'image' not in track: track['image'] = self.get_image() self.add_child(node) return len(self.data['tracks']['items'])
def make_subscription_node(): return getNode( Flag.TEXT, parameters={ 'label': '(Free Account / Subscribe on qobuz.com)', 'image': 'http://static-www.qobuz.com/img/sprite/sprite-plans-option-2015.png' })
def list_albums(self, qnt, qid): ''' List albums givent a node type and a node id ''' album_ids = {} nodes = [] if qnt & Flag.ALBUM == Flag.ALBUM: node = getNode(Flag.ALBUM, {'nid': qid}) node.data = node.fetch() album_ids[str(node.nid)] = 1 nodes.append(node) elif qnt & Flag.TRACK == Flag.TRACK: render = renderer(qnt, self.parameters) render.depth = 1 render.whiteFlag = Flag.TRACK render.blackFlag = Flag.NONE render.asList = True render.run() if not render.nodes: node = getNode(Flag.ALBUM) node.data = render.nodes[0].data['album'] album_ids[str(node.nid)] = 1 nodes.append(node) else: render = renderer(qnt, self.parameters) render.depth = -1 render.whiteFlag = Flag.ALBUM render.blackFlag = Flag.STOPBUILD & Flag.TRACK render.asList = True render.run() for node in render.nodes: if node.nt & Flag.ALBUM and str(node.nid) not in album_ids: album_ids[str(node.nid)] = 1 nodes.append(node) if node.nt & Flag.TRACK: render = renderer(qnt, self.parameters) render.depth = 1 render.whiteFlag = Flag.TRACK render.blackFlag = Flag.NONE render.asList = True render.run() if not render.nodes: newnode = getNode( Flag.ALBUM, data=render.nodes[0].data['album']) if not str(newnode.nid) in album_ids: nodes.append(newnode) album_ids[str(newnode.nid)] = 1 return nodes
def populate(self, Dir, lvl, whiteFlag, blackFlag): if self.search_type == 'albums': for album in self.data['albums']['items']: node = getNode(Flag.ALBUM) node.data = album self.add_child(node) elif self.search_type == 'tracks': for track in self.data['tracks']['items']: node = getNode(Flag.TRACK) node.data = track self.add_child(node) elif self.search_type == 'artists': for artist in self.data['artists']['items']: node = getNode(Flag.ARTIST) node.data = artist self.add_child(node) return True
def set_root_node(self): '''Import correct node object based on node_type parameter, setting self.root ''' if self.root: return self.root self.root = getNode(self.node_type, self.parameters) return self.root
def _populate_artists(self, *a, **ka): for artist in self.data[self.search_type]['items']: self.add_child( getNode( Flag.ARTIST, parameters=self._get_parameters(), data=artist)) return True if len(self.data[self.search_type]['items']) > 0 else False
def __populate_type(self, Dir, lvl, whiteFlag, blackFlag): '''Populate type, we don't have genre_type nor genre_id ''' for genre_type_id in RECOS_TYPE_IDS: node = getNode(Flag.RECOMMENDATION, {'genre-type': genre_type_id}) node.set_label(self.label + ' - ' + RECOS_TYPES[genre_type_id]) self.add_child(node) return True
def _populate_tracks(self, Dir, lvl, whiteFlag, blackFlag): ret = False for track in self.data['tracks']['items']: node = getNode(Flag.TRACK) node.data = track node.data['purchased'] = True self.add_child(node) ret = True return ret
def _populate_albums(self, Dir, lvl, whiteFlag, blackFlag): ret = False if not 'albums' in self.data: return False for album in self.data['albums']['items']: node = getNode(Flag.ALBUM, data=album) self.add_child(node) ret = True return ret
def _populate_tracks(self, Dir, lvl, whiteFlag, blackFlag): ret = False if not 'tracks' in self.data: return False for track in self.data['tracks']['items']: node = getNode(Flag.TRACK, data=track) self.add_child(node) ret = True return ret
def __populate_type(self, options=None): '''Populate type, we don't have genre_type nor genre_id ''' for genre_type_id in RECOS_TYPE_IDS: node = getNode(Flag.RECOMMENDATION, {'genre-type': genre_type_id}) node.label2 = self.label node.label = RECOS_TYPES[genre_type_id] self.add_child(node) return True
def populate(self, options=None): if self.search_type is None: for search_type in data_search_type.keys(): self.add_child( getNode( Flag.SEARCH, parameters={'search-type': search_type})) return True self.content_type = data_search_type[self.search_type]['content_type'] return getattr(self, '_populate_%s' % self.search_type)(options)
def populate_reco(self, Dir, lvl, whiteFlag, blackFlag, genre_id): for genre_type in RECOS_TYPE_IDS: node = getNode(Flag.RECOMMENDATION, { 'parent': self, 'genre-id': genre_id, 'genre-type': genre_type }) node.populating(Dir, 1, Flag.ALBUM, blackFlag) return True
def _populate_albums(self, Dir, lvl, whiteFlag, blackFlag): ret = False for album in self.data['albums']['items']: node = getNode(Flag.ALBUM) node.data = album node.data['purchased'] = True self.add_child(node) ret = True return ret
def route_disc_image(album_id=None, track_id=None): node = getNode(Flag.ALBUM, parameters={'nid': album_id}) node.data = node.fetch() image = None if node.data is not None: image = node.get_image() if image is None: return http_error(404) return redirect(image, code=302)
def _populate_artists(self, Dir, lvl, whiteFlag, blackFlag): ret = False if not 'artists' in self.data: return False for artist in self.data['artists']['items']: node = getNode(Flag.ARTIST, data=artist) node.fetch(None, None, None, Flag.NONE) self.add_child(node) ret = True return ret
def route_track(album_id=None, track_id=None): if request.method == 'HEAD': return 'ok', 200 track = getNode(Flag.TRACK, parameters={'nid': track_id}) track.data = track.fetch() url = track.get_streaming_url() if url is None: return http_error(404) req = requests.get(url, stream=True) return Response(stream_with_context(req.iter_content(chunk_size=2048)), content_type=req.headers["content-type"])
def populate(self, options=None): cid = self.get_current_playlist_id() for data in self.data['playlists']['items']: node = getNode( Flag.PLAYLIST, data=data, parameters={'nt': self.nt}) if cid and cid == node.nid: node.set_is_current(True) if node.get_owner() == user.username: node.set_is_my_playlist(True) self.add_child(node) return True if self.data['playlists']['items'] else False
def _list_track_helper_populate_album(xdir, album_id): album = getNode(Flag.ALBUM, parameters={ 'nid': album_id, 'mode': Mode.SCAN }) album.populating(helper.TreeTraverseOpts( xdir=xdir, lvl=1, whiteFlag=Flag.TRACK, blackFlag=Flag.STOPBUILD))
def add_name(name): if name in friend_list: return None if name == user_data['user']['login']: return None if name == self.name: return None friend_list[name] = 1 node = getNode(Flag.FRIEND, {'query': str(name)}) node.label = 'Friend / %s' % node.label self.add_child(node) return node
def populate(self, options=None): skip_empty = not config.app.registry.get( 'display_artist_without_album', to='bool') for data in self.data['artists']['items']: if skip_empty and data['albums_count'] < 1: continue artist = getNode(Flag.ARTIST, data=data) cache = artist.fetch(helper.TreeTraverseOpts(lvl=3,noRemote=True)) if cache is not None: artist.data = cache self.add_child(artist) return True if len(self.data['artists']['items']) > 0 else False
def _populate_tracks(self, options): self.content_type = 'songs' for track in self.data['tracks']['items']: node = getNode(Flag.TRACK, data=track) if not node.get_displayable(): logger.warn( 'Track not displayable: %s (%s)', node.get_label().encode( 'ascii', errors='ignore'), node.nid) continue self.add_child(node) return True if len(self.data['tracks']['items']) > 0 else False
def fetch(self, options=None): node = getNode(Flag.FRIEND) node.create('qobuz.com') return {}
def populate(self, options=None): for item in self.data['playlists']['items']: self.add_child( getNode(Flag.PLAYLIST, data=item, parameters={'nt': self.nt})) return True if len(self.data['playlists']['items']) > 0 else False
def get_node_album(album): node = getNode(Flag.ALBUM, data=album) cache = node.fetch(TreeTraverseOpts(noRemote=True)) if cache is not None: node.data = cache return node
def populate(self, options=None): free = current_user.is_free_account() if free: self.add_child(make_subscription_node()) if not free: self.add_child(getNode(Flag.USER)) self.add_child(getNode(Flag.USERPLAYLISTS)) if config.app.registry.get('show_recommendations', to='bool'): self.add_child(getNode(Flag.RECOMMENDATION)) if not free: self.add_child(getNode(Flag.PURCHASE)) self.add_child(getNode(Flag.FAVORITE)) if config.app.registry.get('search_enabled', to='bool'): self.add_child(getNode(Flag.SEARCH)) if not free: self.add_child(getNode(Flag.FRIENDS)) self.add_child(getNode(Flag.PUBLIC_PLAYLISTS)) self.add_child( getNode( Flag.PUBLIC_PLAYLISTS, parameters={'type': 'editor-picks'})) if config.app.registry.get('show_experimental', to='bool'): self.add_child(getNode(Flag.LABEL)) self.add_child(getNode(Flag.ARTICLE)) self.add_child(getNode(Flag.GENRE)) if not free: self.add_child(getNode(Flag.COLLECTION)) if free: self.add_child(make_subscription_node()) return True