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
Exemple #2
0
    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']
Exemple #3
0
 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
Exemple #4
0
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
Exemple #5
0
 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
Exemple #6
0
 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
Exemple #8
0
 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
Exemple #9
0
 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'])
Exemple #10
0
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'
        })
Exemple #11
0
 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
Exemple #12
0
 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
Exemple #14
0
 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
Exemple #15
0
 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
Exemple #16
0
 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
Exemple #17
0
 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
Exemple #18
0
 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
Exemple #20
0
 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)
Exemple #21
0
 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
Exemple #22
0
 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)
Exemple #24
0
 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
Exemple #27
0
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))
Exemple #28
0
 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
Exemple #30
0
 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
Exemple #31
0
 def fetch(self, options=None):
     node = getNode(Flag.FRIEND)
     node.create('qobuz.com')
     return {}
Exemple #32
0
 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
Exemple #33
0
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
Exemple #34
0
 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