Beispiel #1
0
 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
Beispiel #2
0
 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
Beispiel #3
0
 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
Beispiel #4
0
 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
Beispiel #5
0
 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
Beispiel #6
0
 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
Beispiel #7
0
 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
Beispiel #8
0
 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
Beispiel #9
0
    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
Beispiel #10
0
    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
Beispiel #11
0
 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
Beispiel #12
0
 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
Beispiel #13
0
 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
Beispiel #14
0
 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
Beispiel #15
0
 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
Beispiel #16
0
 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