Example #1
0
 def create(self, name=None):
     friendpl = api.get('/playlist/getUserPlaylists',
                        username=name,
                        type='last-created')
     if not friendpl:
         return False
     data = api.get('/user/login',
                    username=user.username,
                    password=user.password)
     if not data:
         return False
     if data['user']['login'] == name:
         return False
     friends = data['user']['player_settings']
     if 'friends' not in friends:
         friends = []
     else:
         friends = friends['friends']
     if name in friends:
         return False
     friends.append(name)
     newdata = {'friends': friends}
     if not api.user_update(player_settings=json.dumps(newdata)):
         return False
     self.delete_cache()
     executeBuiltin(containerRefresh())
     return True
Example #2
0
 def create(self, name=None):
     friendpl = api.get('/playlist/getUserPlaylists',
                        username=name,
                        type='last-created')
     if not friendpl:
         return False
     data = api.get('/user/login',
                    username=user.username,
                    password=user.password)
     if not data:
         return False
     if data['user']['login'] == name:
         return False
     friends = data['user']['player_settings']
     if 'friends' not in friends:
         friends = []
     else:
         friends = friends['friends']
     if name in friends:
         return False
     friends.append(name)
     newdata = {'friends': friends}
     if not api.user_update(player_settings=json.dumps(newdata)):
         return False
     self.delete_cache()
     executeBuiltin(containerRefresh())
     return True
Example #3
0
 def fetch(self, Dir, lvl, whiteFlag, blackFlag):
     limit = getSetting('pagination_limit', asInt=True)
     self.data = None
     query = self.query
     if not query:
         from gui.util import Keyboard
         k = Keyboard('', 'My %s' % self.search_type)
         k.doModal()
         if not k.isConfirmed():
             return False
         query = k.getText()
     query.strip()
     info(self, 'search_type: %s, query: %s' % (self.search_type, query))
     source = self.source
     kwargs = {'query': query,
               'limit': limit,
               }
     if source is not None:
         kwargs['source'] = source
     data = None
     if self.search_type == 'albums':
         data = api.get('/collection/getAlbums', **kwargs)
     elif self.search_type == 'artists':
         data = api.get('/collection/getArtists', **kwargs)
     elif self.search_type == 'tracks':
         data = api.get('/collection/getTracks', **kwargs)
     if data is None:
         return False
     self.data = data
     return True
Example #4
0
 def fetch(self, options=None):
     if self.nid is None:
         return api.get('/genre/list', offset=self.offset, limit=self.limit)
     return api.get('/genre/list',
                    parent_id=self.nid,
                    offset=self.offset,
                    limit=self.limit)
Example #5
0
def route_nfo_artist(album_id=None):
    album = api.get('/album/get', album_id=album_id)
    response = None
    if album is not None:
        response = api.get('/artist/get', artist_id=album['artist']['id'])
    if response is None:
        return http_error(404)
    if 'biography' in response:
        response['biography']['content'] = converter.strip_html(
            response['biography']['content'], default='')
    response['image_default_size'] = qobuzApp.registry.get(
        'image_default_size')
    return render_template('artist.nfo.j2', **response)
Example #6
0
 def fetch(self, options=None):
     if self.search_type is None:
         return {}
     if self.search_type != 'all':
         return api.get('/favorite/getUserFavorites',
                        user_id=user.get_id(),
                        type=self.search_type,
                        limit=self.limit,
                        offset=self.offset)
     return api.get('/favorite/getUserFavorites',
                    user_id=user.get_id(),
                    limit=self.limit,
                    offset=self.offset)
Example #7
0
def route_nfo_artist(album_id=None):
    album = api.get('/album/get', album_id=album_id)
    response = None
    if album is not None:
        response = api.get('/artist/get', artist_id=album['artist']['id'])
    if response is None:
        return http_error(404)
    if 'biography' in response:
        response['biography']['content'] = converter.strip_html(
            response['biography']['content'], default='')
    response['image_default_size'] = qobuzApp.registry.get(
        'image_default_size')
    return render_template('artist.nfo.j2', **response)
Example #8
0
 def gui_remove(self, playlist_id=None):
     playlist_id = self._get_playlist_id(playlist_id=playlist_id)
     if not playlist_id:
         notify_error(dialogHeading,
                      'Invalid playlist %s' % (str(playlist_id)))
         return False
     data = api.get('/playlist/get',
                    playlist_id=playlist_id,
                    limit=self.limit,
                    offset=self.offset)
     if data is None:
         logger.error('Cannot get playlist with id %s', playlist_id)
         return False
     name = ''
     if 'name' in data:
         name = data['name']
     ok = xbmcgui.Dialog().yesno(
         lang(30166), lang(30054), color('FFFF0000', name))
     if not ok:
         return False
     if data['owner']['name'] == user.username:
         res = api.playlist_delete(playlist_id=playlist_id)
     else:
         res = api.playlist_unsubscribe(playlist_id=playlist_id)
     if not res:
         logger.warn('Cannot delete playlist with id ' + str(playlist_id))
         notify_error(lang(30183), lang(30186) + name)
         return False
     self.delete_cache(playlist_id)
     executeBuiltin(containerRefresh())
     notify_log(lang(30183), (lang(30184) + ' %s ' + lang(30185)) % name)
     return True
Example #9
0
 def fetch(self, options=None):
     if self.search_type is None:
         return {}
     return api.get('/purchase/getUserPurchases',
                    limit=self.limit,
                    offset=self.offset,
                    user_id=user.get_id())
Example #10
0
 def fetch(self, options=None):
     if self.search_type is None:
         return {}
     return api.get('/purchase/getUserPurchases',
                    limit=self.limit,
                    offset=self.offset,
                    user_id=user.get_id())
Example #11
0
 def get_user_data(cls):
     data = api.get('/user/login',
                    username=current_user.username,
                    password=current_user.password)
     if not data:
         return None
     return data['user']
Example #12
0
 def fetch(self, Dir, lvl, whiteFlag, blackFlag):
     data = api.get('/album/get', album_id=self.nid)
     if not data:
         warn(self, "Cannot fetch product data")
         return False
     self.data = data
     return True
Example #13
0
 def gui_rename(self, playlist_id=None):
     if not playlist_id:
         playlist_id = self.nid
     if not playlist_id:
         warn(self, "Can't rename playlist without id")
         return False
     from qobuz.gui.util import Keyboard
     data = api.get('/playlist/get', playlist_id=playlist_id)
     if not data:
         warn(self, "Something went wrong while renaming playlist")
         return False
     self.data = data
     currentname = self.get_name()
     k = Keyboard(currentname, lang(30080))
     k.doModal()
     if not k.isConfirmed():
         return False
     newname = k.getText()
     newname = newname.strip()
     if not newname:
         notify_error(dialogHeading, "Don't u call ure child something?")
         return False
     if newname == currentname:
         return True
     res = api.playlist_update(playlist_id=playlist_id, name=newname)
     if not res:
         warn(self, "Cannot rename playlist with name %s" % (newname))
         return False
     self.delete_cache(playlist_id)
     notify_log(lang(30080), (u"%s: %s") % (lang(30165), currentname))
     executeBuiltin(containerRefresh())
     return True
Example #14
0
 def get_user_data(cls):
     data = api.get('/user/login',
                    username=current_user.username,
                    password=current_user.password)
     if not data:
         return None
     return data['user']
Example #15
0
 def fetch(self, Dir, lvl, whiteFlag, blackFlag):
     limit = getSetting('pagination_limit')
     data = api.get('/artist/getSimilarArtists', artist_id=self.nid,
                    offset=self.offset, limit=limit)
     if not data:
         return False
     self.data = data
     return len(data['artists']['items'])
Example #16
0
 def fetch(self, options=None):
     if self.genre_type is None or self.genre_id is None:
         return {}
     return api.get('/album/getFeatured',
                    type=RECOS_TYPE_IDS[int(self.genre_type)],
                    genre_id=self.genre_id,
                    limit=self.limit,
                    offset=self.offset)
 def fetch(self, options=None):
     if self.genre_type is None or self.genre_id is None:
         return {}
     return api.get('/album/getFeatured',
                    type=RECOS_TYPE_IDS[int(self.genre_type)],
                    genre_id=self.genre_id,
                    limit=self.limit,
                    offset=self.offset)
Example #18
0
 def fetch(self, Dir, lvl, whiteFlag, blackFlag):
     if blackFlag & Flag.STOPBUILD == Flag.STOPBUILD:
         return False
     data = api.get('/track/get', track_id=self.nid)
     if not data:
         return False
     self.data = data
     return True
Example #19
0
 def fetch(self, Dir, lvl, whiteFlag, blackFlag):
     limit = getSetting('pagination_limit')
     data = api.get('/purchase/getUserPurchases', limit=limit,
                    offset=self.offset, user_id=api.user_id)
     if not data:
         warn(self, "Cannot fetch purchases data")
         return False
     self.data = data
     return True
Example #20
0
 def fetch(self, Dir, lvl, whiteFlag, blackFlag):
     limit = getSetting('pagination_limit')
     data = api.get('/artist/getSimilarArtist', artist_id=self.nid,
                    limit=limit, offset=self.offset, extra='albums')
     if not data:
         warn(self, "Cannot fetch albums for artist: " + self.get_label())
         return False
     self.data = data
     return True
Example #21
0
 def fetch(self, Dir, lvl, whiteFlag, blackFlag):
     limit = getSetting('pagination_limit')
     data = api.get('/artist/get', artist_id=self.nid, limit=limit,
                    offset=self.offset, extra='albums')
     if not data:
         warn(self, "Build-down: Cannot fetch artist data")
         return False
     self.data = data
     return True
Example #22
0
 def fetch(self, Dir, lvl, whiteFlag, blackFlag):
     limit = getSetting('pagination_limit')
     data = None
     if self.search_type != 'all':
         data = api.get('/favorite/getUserFavorites',
                        user_id=api.user_id,
                        type=self.search_type,
                        limit=limit,
                        offset=self.offset)
     else:
         data = api.get('/favorite/getUserFavorites',
                        user_id=api.user_id,
                        limit=limit,
                        offset=self.offset)
     if not data:
         warn(self, "Build-down: Cannot fetch favorites data")
         return False
     self.data = data
     return True
Example #23
0
 def fetch(self, Dir, lvl, whiteFlag, blackFlag):
     limit = getSetting('pagination_limit', asInt=True)
     data = api.get('/playlist/get', playlist_id=self.nid,
                    offset=self.offset, limit=limit, extra='tracks')
     if not data:
         warn(self, "Build-down: Cannot fetch playlist data")
         return False
     self.data = data
     self.get_image() # Buld thumbnail if neeeded
     return True
Example #24
0
    def populate(self, options=None):
        user_data = api.get('/user/login',
                            username=user.username,
                            password=user.password)
        if 'user' not in user_data:
            return False
        friend_data = user_data['user']['player_settings']['friends']
        if self.name is not None:
            data = api.get('/playlist/getUserPlaylists',
                           username=self.name,
                           limit=self.limit,
                           offset=self.offset,
                           type='last-created')
        else:
            data = api.get('/playlist/getUserPlaylists',
                           user_id=user.get_id(),
                           limit=self.limit,
                           offset=self.offset,
                           type='last-created')
        if data is None:
            logger.warn('No friend data')
            return False
        friend_list = {}

        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

        for item in data['playlists']['items']:
            add_name(item['owner']['name'])
        for name in friend_data:
            add_name(name)
        return True
Example #25
0
    def populate(self, options=None):
        user_data = api.get('/user/login',
                            username=user.username,
                            password=user.password)
        if 'user' not in user_data:
            return False
        friend_data = user_data['user']['player_settings']['friends']
        if self.name is not None:
            data = api.get('/playlist/getUserPlaylists',
                           username=self.name,
                           limit=self.limit,
                           offset=self.offset,
                           type='last-created')
        else:
            data = api.get('/playlist/getUserPlaylists',
                           user_id=user.get_id(),
                           limit=self.limit,
                           offset=self.offset,
                           type='last-created')
        if data is None:
            logger.warn('No friend data')
            return False
        friend_list = {}

        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

        for item in data['playlists']['items']:
            add_name(item['owner']['name'])
        for name in friend_data:
            add_name(name)
        return True
Example #26
0
 def populate(self, xbmc_directory, lvl, whiteFlag, blackFlag):
     username = api.username
     password = api.password
     user_id = api.user_id
     user_data = api.get('/user/login', username=username,
                         password=password)
     if not 'user' in user_data:
         return False
     friend_data = user_data['user']['player_settings']['friends']
     info(self, "Build-down friends list " + repr(self.name))
     if self.name:
         data = api.get('/playlist/getUserPlaylists',
                        username=self.name, limit=0)
     else:
         data = api.get('/playlist/getUserPlaylists',
                        user_id=user_id, limit=0)
     if not data:
         warn(self, "No friend data")
         return False
     # extract all owner names from the list
     friend_list = []
     for item in data['playlists']['items']:
         if item['owner']['name'] == user_data['user']['login']:
             continue
         friend_list.append(item['owner']['name'])
     # add previously stored
     if (not self.name):
         for name in friend_data:
             friend_list.append(str(name))
     # remove duplicates
     keys = {}
     for e in friend_list:
         keys[e] = 1
     friend_list = keys.keys()
     # and add them to the directory
     for name in friend_list:
         node = getNode(Flag.FRIEND, {'query': str(name)})
         if name == self.name:
             continue
         if name in friend_data:
             node.label = 'Friend / %s' % (node.label)
         self.add_child(node)
 def fetch(self, Dir, lvl, whiteFlag, blackFlag):
     limit = getSetting("pagination_limit")
     data = api.get("/playlist/getPublicPlaylists", offset=self.offset, limit=limit, type="last-created")
     if not data:
         return False
     # @bug: we use pagination_limit as limit for the search so we don't
     # need offset... (Fixed if qobuz fix it :p)
     if not "total" in data["playlists"]:
         data["playlists"]["total"] = data["playlists"]["limit"]
     self.data = data
     return True
Example #28
0
 def fetch(self, Dir, lvl, whiteFlag, blackFlag):
     limit = getSetting('pagination_limit')
     data = api.get('/playlist/getUserPlaylists',
                    limit=limit,
                    offset=self.offset,
                    user_id=api.user_id)
     if data is None:
         warn(self, "Build-down: Cannot fetch user playlists data")
         return False
     self.data = data
     return True
Example #29
0
def route_album(album_id=None, track_id=None):
    response = api.get('/album/get', album_id=album_id)
    if response is None:
        response = api.get('/track/get', track_id=track_id)
    if response is None:
        return http_error(404)
    response['album_id'] = album_id
    if request.method == 'HEAD':
        return '', 200
    if 'description' in response:
        response['description'] = converter.strip_html(
            response['description'], default='')
    if 'catchline' in response:
        response['catchline'] = converter.strip_html(
            response['catchline'], default='')
    response['image_default_size'] = qobuzApp.registry.get(
        'image_default_size')
    if 'duration' in response:
        response['duration'] = round(response['duration'])
    return render_template('dir.j2', **response)
Example #30
0
def isFreeAccount():
    """Check if account if it's a Qobuz paid account
    """
    from qobuz.api import api
    data = api.get('/user/login', username=api.username,
                   password=api.password)
    if not data:
        return True
    if not data['user']['credential']['id']:
        return True
    return False
Example #31
0
def route_album(album_id=None, track_id=None):
    response = api.get('/album/get', album_id=album_id)
    if response is None:
        response = api.get('/track/get', track_id=track_id)
    if response is None:
        return http_error(404)
    response['album_id'] = album_id
    if request.method == 'HEAD':
        return '', 200
    if 'description' in response:
        response['description'] = converter.strip_html(response['description'],
                                                       default='')
    if 'catchline' in response:
        response['catchline'] = converter.strip_html(response['catchline'],
                                                     default='')
    response['image_default_size'] = qobuzApp.registry.get(
        'image_default_size')
    if 'duration' in response:
        response['duration'] = round(response['duration'])
    return render_template('dir.j2', **response)
Example #32
0
 def fetch(self, Dir, lvl, whiteFlag, blackFlag):
     limit = getSetting('pagination_limit')
     data = api.get('/genre/list', parent_id=self.nid, offset=self.offset,
                    limit=limit)
     if not data:
         self.data = None
         return True  # Nothing returned trigger reco build in build_down
     self.data = data
     genres = self.data['genres']
     if 'parent' in genres and int(genres['parent']['level']) > 1:
         self.populate_reco(Dir, lvl, whiteFlag, blackFlag,
                            genres['parent']['id'])
     return True
Example #33
0
 def __getFileUrl(self):
     if self._intent is None:
         self._intent = user.stream_format(track=self)
     format_id, intent, _description = self._intent
     data = api.get('/track/getFileUrl',
                    format_id=format_id,
                    track_id=self.nid,
                    user_id=user.get_id(),
                    intent=intent)
     if not data:
         logger.warn('Cannot get stream type for track (network problem?)')
         return None
     return data
Example #34
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
Example #35
0
 def __getFileUrl(self):
     hires = getSetting('hires_enabled', asBool=True)
     format_id = 6 if getSetting('streamtype') == 'flac' else 5
     if hires and self.get_hires():
         format_id = 27
     if self.get_property('purchased') or self.get_parameter('purchased') == '1' or self.purchased:
         intent = "download"
     else:
         intent = "stream"
     data = api.get('/track/getFileUrl', format_id=format_id,
                    track_id=self.nid, user_id=api.user_id, intent=intent)
     if not data:
         warn(self, "Cannot get stream type for track (network problem?)")
         return None
     return data
Example #36
0
 def create(self, name=None):
     username = api.username
     password = api.password
     friendpl = api.get('/playlist/getUserPlaylists', username=name)
     if not friendpl:
         return False
     user = api.get('/user/login', username=username, password=password)
     if user['user']['login'] == name:
         return False
     if not user:
         return False
     friends = user['user']['player_settings']
     if not 'friends' in friends:
         friends = []
     else:
         friends = friends['friends']
     if name in friends:
         return False
     friends.append(name)
     newdata = {'friends': friends}
     if not api.user_update(player_settings=json.dumps(newdata)):
         return False
     executeBuiltin(containerRefresh())
     return True
Example #37
0
 def fetch(self, Dir, lvl, whiteFlag, blackFlag):
     if self.genre_type is  None or self.genre_id is None:
         return True
     offset = self.offset or 0
     limit = getSetting('pagination_limit')
     data = api.get('/album/getFeatured',
                    type=RECOS_TYPE_IDS[int(self.genre_type)],
                    genre_id=self.genre_id,
                    limit=10,
                    offset=offset)
     if data is None:
         warn(self, 'Cannot fetch data for recommendation')
         return False
     self.data = data
     return True
Example #38
0
 def fetch(self, options=None):
     if self.search_type is None:
         return {}
     query = self.get_parameter('query', to='unquote')
     if not query:
         from qobuz.gui.util import Keyboard
         k = Keyboard('', 'My %s' % self.search_type)
         k.doModal()
         if not k.isConfirmed():
             return None
         query = k.getText().strip()
     if query == '':
         return None
     kwargs = {'query': converter.quote(query)}
     if self.source is not None:
         kwargs['source'] = self.source
     logger.info('SEARCH %s', kwargs)
     if self.search_type == 'albums':
         return api.get('/collection/getAlbums', **kwargs)
     elif self.search_type == 'artists':
         return api.get('/collection/getArtists', **kwargs)
     elif self.search_type == 'tracks':
         return api.get('/collection/getTracks', **kwargs)
     return None
Example #39
0
 def fetch(self, options=None):
     if self.search_type is None:
         return {}
     query = self.get_parameter('query', to='unquote')
     if not query:
         from qobuz.gui.util import Keyboard
         k = Keyboard('', 'My %s' % self.search_type)
         k.doModal()
         if not k.isConfirmed():
             return None
         query = k.getText().strip()
     if query == '':
         return None
     kwargs = {'query': converter.quote(query)}
     if self.source is not None:
         kwargs['source'] = self.source
     logger.info('SEARCH %s', kwargs)
     if self.search_type == 'albums':
         return api.get('/collection/getAlbums', **kwargs)
     elif self.search_type == 'artists':
         return api.get('/collection/getArtists', **kwargs)
     elif self.search_type == 'tracks':
         return api.get('/collection/getTracks', **kwargs)
     return None
Example #40
0
 def fetch(self, options=None):
     if self.search_type is None:
         return {}
     query = self.get_parameter('query', to='unquote')
     if query is None:
         from qobuz.gui.util import Keyboard
         k = Keyboard('', self.search_type)
         k.doModal()
         if not k.isConfirmed():
             return None
         query = k.getText().strip()
         if query is None or query == '':
             return None
         self.set_parameter('query', query, quote=True)
     return api.get('/search/getResults',
                    query=query,
                    type=self.search_type,
                    limit=self.limit,
                    offset=self.offset)
Example #41
0
 def fetch(self, options=None):
     node = getNode(Flag.FRIEND)
     node.create('qobuz.com')
     return api.get('/playlist/getUserPlaylists',
                    type='last-created',
                    username=self.name)
 def fetch(self, options=None):
     return api.get('/artist/get',
                    artist_id=self.nid,
                    limit=self.limit,
                    offset=self.offset,
                    extra='albums')
Example #43
0
 def fetch(self, _=None):
     method, args = self._fetch_args()
     return api.get(method, **args)
Example #44
0
 def fetch(self, options=None):
     if self.nid is None:
         return api.get('/label/list', limit=self.limit, offset=self.offset)
     return api.get('/label/get', label_id=self.nid)
Example #45
0
 def fetch(self, options=None):
     options = helper.get_tree_traverse_opts(options)
     if (options.blackFlag is not None) and (
             options.blackFlag & Flag.STOPBUILD == Flag.STOPBUILD):
         return None
     return api.get('/track/get', track_id=self.nid)
Example #46
0
 def fetch(self, options=None):
     return api.get('/artist/get', artist_id=self.nid, extra='albums')
Example #47
0
 def fetch(self, options=None):
     return api.get('/playlist/getUserPlaylists',
                    limit=self._get_limit(),
                    offset=self.offset,
                    user_id=user.get_id(),
                    type='last-created')
Example #48
0
 def fetch(self, options=None):
     if self.nid is None:
         return api.get('/article/listLastArticles',
                        offset=self.offset,
                        limit=self.limit)
     return api.get('/article/get', article_id=self.nid)
Example #49
0
 def fetch(self, options=None):
     return api.get('/artist/getSimilarArtists',
                    artist_id=self.nid,
                    offset=self.offset,
                    limit=self.limit)
Example #50
0
 def fetch(self, options=None):
     options = helper.get_tree_traverse_opts(options)
     return api.get('/album/get',
                    album_id=self.nid,
                    noRemote=options.noRemote)
Example #51
0
 def fetch(self, options=None):
     return api.get('/playlist/getFeatured',
                    offset=self.offset,
                    limit=self._get_limit(),
                    type=self.type)