def remove(self): name = self.get_parameter('query') if name == 'qobuz.com': return False if not name: return False user = self.get_user_data() if not user: return False friends = user['player_settings'] if 'friends' not in friends: notifyH('Qobuz', 'You don\'t have friend', 'icon-error-256') logger.warn('No friends in user/player_settings') return False friends = friends['friends'] if name not in friends: notifyH('Qobuz', 'You\'re not friend with %s' % name, 'icon-error-256') logger.warn('Friend ' + repr(name) + ' not in friends data') return False del friends[friends.index(name)] newdata = {'friends': friends} if not api.user_update(player_settings=json.dumps(newdata)): notifyH('Qobuz', 'Friend %s added' % name) notifyH('Qobuz', 'Cannot updata friend\'s list...', 'icon-error-256') return False notifyH('Qobuz', 'Friend %s removed' % name) self.delete_cache() executeBuiltin(containerRefresh()) return True
def remove(self): name = self.get_parameter('query') if name == 'qobuz.com': return False if not name: return False user = self.get_user_data() if not user: return False friends = user['player_settings'] if not 'friends' in friends: notifyH('Qobuz', "You don't have friend", 'icon-error-256') warn(self, "No friends in user/player_settings") return False friends = friends['friends'] if not name in friends: notifyH('Qobuz', "You're not friend with %s" % (name), 'icon-error-256') warn(self, "Friend " + repr(name) + " not in friends data") return False del friends[friends.index(name)] newdata = {'friends': friends} if not api.user_update(player_settings=json.dumps(newdata)): notifyH('Qobuz', 'Friend %s added' % (name)) notifyH('Qobuz', "Cannot updata friend's list...", 'icon-error-256') return False notifyH('Qobuz', 'Friend %s removed' % (name)) self.delete_cache() executeBuiltin(containerRefresh()) return True
def scan(self): import sys from qobuz.node.flag import Flag """Building tree when using Xbmc library scanning feature """ from qobuz.gui.directory import Directory if not self.set_root_node(): warn(self, "Cannot set root node ('%s')" % (str( self.node_type))) return False handle = qobuz.boot.handle Dir = Directory(self.root, self.nodes, withProgress=False) Dir.handle = int(sys.argv[1]) Dir.asList = False Dir.asLocalURL = True if self.root.nt & Flag.TRACK: self.root.fetch(None, None, Flag.TRACK, Flag.NONE) Dir.add_node(self.root) else: self.root.populating(Dir, self.depth, self.whiteFlag, self.blackFlag) Dir.set_content(self.root.content_type) Dir.end_of_directory() notifyH('Scanning results', str(Dir.total_put) + ' items where scanned', mstime=3000) return True
def cache_remove(cls): '''GUI/Removing all cached data ''' if not yesno(lang(30121), lang(30122)): logger.warn('Deleting cached data aborted') return False cleanfs_combined_covers() if clean_all(cache): notifyH(lang(30119), lang(30123)) else: notifyH(lang(30119), lang(30120), getImage('icon-error-256')) return True
def cache_remove(self): """GUI/Removing all cached data """ from qobuz.gui.util import yesno, notifyH, getImage from qobuz.debug import log if not yesno(lang(30121), lang(30122)): log(self, "Deleting cached data aborted") return False if clean_all(cache): notifyH(lang(30119), lang(30123)) else: notifyH(lang(30119), lang(30120), getImage('icon-error-256')) return True
def gui_create(self): name = self.get_parameter('query') if not name: from qobuz.gui.util import Keyboard kb = Keyboard('', str(lang(30181))) kb.doModal() name = '' if not kb.isConfirmed(): return False name = kb.getText().strip() if not name: return False if not self.create(name): notifyH('Qobuz', 'Cannot add friend %s' % name) return False notifyH('Qobuz', 'Friend %s added' % name) return True
def play(self, track_id, params={}): """Playing track given a track id """ track = getNode(Flag.TRACK, {'nid': track_id}) if not track.fetch(None, 1, Flag.TRACK, Flag.NONE): warn(self, "Cannot get track data") return False if not track.is_playable(): warn(self, "Cannot get streaming URL") return False if 'purchased' in params: track.parameters['purchased']= True item = track.makeListItem() track.item_add_playing_property(item) """Some tracks are not authorized for stream and a 60s sample is returned, in that case we overwrite the song duration """ if track.is_sample(): item.setInfo( 'music', infoLabels={ 'duration': 60, }) """Don't warn for free account (all songs except purchases are 60s limited) """ if not isFreeAccount(): notify_warn("Qobuz", "Sample returned") xbmcgui.Window(10000).setProperty(keyTrackId, track_id) """Notify """ if getSetting('notification_playingsong', asBool=True): notify_restriction(track) notifyH(lang(30132), track.get_label(), image=track.get_image()) """We are called from playlist... """ if config.app.handle == -1: super(QobuzPlayer, self).play(track.get_streaming_url(), item, False) else: setResolvedUrl(handle=config.app.handle, succeeded=True, listitem=item) return True
def play(self, track_id, params=None): """ Playing track given a track id """ params = {} if params is None else params track = getNode(Flag.TRACK, {'nid': track_id}) data = track.fetch(helper.TreeTraverseOpts( lvl=1, whiteFlag=Flag.TRACK, blackFlag=Flag.NONE)) if data is None: logger.warn('Cannot get track data') return False track.data = data if not track.is_playable(): logger.warn('Cannot get streaming URL') return False if 'purchased' in params: track.parameters['purchased'] = True item = track.makeListItem() track.item_add_playing_property(item) # Some tracks are not authorized for stream and a 60s sample is # returned, in that case we overwrite the song duration if track.is_sample(): item.setInfo('Music', infoLabels={'duration': 60, }) # Don't warn for free account (all songs except purchases are 60s # limited) if not isFreeAccount(): notify_warn("Qobuz / Free Account", "Sample returned") if track.is_uncredentialed(): notify_warn("Qobuz / Uncredentialed", "Sample returned") xbmcgui.Window(10000).setProperty(keyTrackId, track_id) # Notify if config.app.registry.get('notification_playingsong', to='bool'): notify_restriction(track) notifyH(lang(30132), track.get_label(), image=track.get_image()) # We are called from playlist... if config.app.handle == -1: super(QobuzPlayer, self).play(track.get_streaming_url(), item, False) else: setResolvedUrl( handle=config.app.handle, succeeded=True, listitem=item) return True
def gui_remove(self): qnt, qid = int(self.get_parameter('qnt')), self.get_parameter('qid') node = getNode(qnt, {'nid': qid}) ret = None if qnt & Flag.TRACK == Flag.TRACK: ret = self.del_track(node.nid) elif qnt & Flag.ALBUM == Flag.ALBUM: ret = self.del_album(node.nid) elif qnt & Flag.ARTIST == Flag.ARTIST: ret = self.del_artist(node.nid) else: raise exception.InvalidNodeType(self.nt) if not ret: notifyH(dialogHeading, 'Cannot remove item: %s' % (node.get_label())) return False notifyH(dialogHeading, 'Item successfully removed: %s' % (node.get_label())) url = self.make_url(nt=self.nt, nid=None, nm=None) executeBuiltin(containerUpdate(url, True)) return True
def gui_add_tracks(self): qnt, qid = int(self.get_parameter('qnt')), self.get_parameter('qid') nodes = self.list_tracks(qnt, qid) if len(nodes) == 0: notifyH(dialogHeading, lang(3600)) return False label = lang(30145) from qobuz.gui.dialog import DialogSelect for node in nodes: try: label = node.get_label() if label is not None: label = label.encode('utf8', errors='ignore') except Exception as e: logger.error(u'Error: %s', e) dialog = DialogSelect( label=label, items=[node.get_label() for node in nodes]) if dialog.open() == -1: return False track_ids = ','.join([str(node.nid) for node in nodes]) if not self.add_tracks(track_ids): notifyH(dialogHeading, 'Cannot add track(s) to favorite') return False self._delete_cache() notifyH(dialogHeading, 'Track(s) added to favorite') return True
def scan(self): '''Building tree when using Xbmc library scanning feature ''' if not self.set_root_node(): logger.warn('Cannot set root node (%s)', self.node_type) return False stats = Struct(**{ 'count': 0 }) with Directory(self.root, nodes=self.nodes, handle=config.app.handle, asLocalUrl=True, showProgress=True) as kodi_directory: kodi_directory.progress.heading = u'Scan' tracks = {} for track in list_track(kodi_directory, stats): tracks.update({track.nid: track}) if not tracks.keys(): logger.warn('NoTrackScannedError') kodi_directory.end_of_directory() return False for _nid, track in tracks.items(): if not is_track(track): continue if not track.get_displayable(): continue progress_update(kodi_directory, u'Add Track', track.get_label(default='Library scan'), cyclic_progress(stats)) kodi_directory.add_node(track) kodi_directory.set_content(self.root.content_type) kodi_directory.end_of_directory() notifyH('Scanning results', '%s items where scanned' % str(kodi_directory.total_put), mstime=3000) return True
def scan(self): '''Building tree when using Xbmc library scanning feature ''' if not self.set_root_node(): logger.warn('Cannot set root node (%s)', self.node_type) return False stats = Struct(**{'count': 0}) with Directory(self.root, nodes=self.nodes, handle=config.app.handle, asLocalUrl=True, showProgress=True) as kodi_directory: kodi_directory.progress.heading = u'Scan' tracks = {} for track in list_track(kodi_directory, stats): tracks.update({track.nid: track}) if not tracks.keys(): logger.warn('NoTrackScannedError') kodi_directory.end_of_directory() return False for _nid, track in tracks.items(): if not is_track(track): continue if not track.get_displayable(): continue progress_update(kodi_directory, u'Add Track', track.get_label(default='Library scan'), cyclic_progress(stats)) kodi_directory.add_node(track) kodi_directory.set_content(self.root.content_type) kodi_directory.end_of_directory() notifyH('Scanning results', '%s items where scanned' % str(kodi_directory.total_put), mstime=3000) return True
def gui_add_artists(self): qnt, qid = int(self.get_parameter('qnt')), self.get_parameter('qid') nodes = self.list_artists(qnt, qid) if not nodes: notifyH(dialogHeading, lang(30143)) return False ret = xbmcgui.Dialog().select( lang(30146), [node.get_label() for node in nodes]) if ret == -1: return False artist_ids = ','.join([str(node.nid) for node in nodes]) if not self.add_artists(artist_ids): notifyH(dialogHeading, 'Cannot add artist(s) to favorite') return False self._delete_cache() notifyH(dialogHeading, 'Artist(s) added to favorite') return True
def gui_add_tracks(self): qnt, qid = int(self.get_parameter('qnt')), self.get_parameter('qid') nodes = self.list_tracks(qnt, qid) if len(nodes) == 0: # ERROR: Missing translation for 3600 notifyH(dialogHeading, lang(3600)) return False ret = xbmcgui.Dialog().select(lang(30145), [ node.get_label() for node in nodes ]) if ret == -1: return False track_ids = ','.join([str(node.nid) for node in nodes]) if not self.add_tracks(track_ids): notifyH(dialogHeading, 'Cannot add track(s) to favorite') return False self._delete_cache() notifyH(dialogHeading, 'Track(s) added to favorite') return True