예제 #1
0
def list_track(kodi_directory, stats):
    root = kodi_directory.root
    total = 0
    tmp_directory = Directory(None, asList=True)
    final_directory = Directory(None, asList=True)
    if is_track(root):
        tmp_directory.add_node(root)
    else:
        options = helper.TreeTraverseOpts(xdir=tmp_directory,
                                          lvl=3,
                                          whiteFlag=Flag.ALL,
                                          blackFlag=Flag.STOPBUILD)
        populate_node(root, options)
    total = len(tmp_directory.nodes)
    if not total:
        logger.info('NoTrack')
        return []

    progress_update(kodi_directory, 'Begin', '', cyclic_progress(stats))
    seen = Struct(**{'albums': {}, 'tracks': {}})
    for node in tmp_directory.nodes:
        progress_update(kodi_directory, u'Scanning', node.get_label(),
                        cyclic_progress(stats))
        node.set_parameter('mode', Mode.SCAN)
        if is_track(node):
            _list_track_process_node_track(final_directory, seen, node)
        else:
            _list_track_process_node_other(final_directory, seen, node)

    return final_directory.nodes
예제 #2
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
예제 #3
0
 def run(self):
     '''Building our tree, creating root node based on our node_type
     '''
     if not self.set_root_node():
         logger.warn('Cannot set root node (%s, %s)', self.node_type,
                     self.root.get_parameter('nid'))
         return False
     if self.has_method_parameter():
         return self.execute_method_parameter()
     with Directory(self.root,
                    self.nodes,
                    handle=config.app.handle,
                    showProgress=True,
                    asList=self.asList) as kodi_directory:
         if config.app.registry.get('contextmenu_replaceitems', to='bool'):
             kodi_directory.replaceItems = True
         try:
             options = helper.TreeTraverseOpts(xdir=kodi_directory,
                                               lvl=self.depth,
                                               whiteFlag=self.whiteFlag,
                                               blackFlag=self.blackFlag)
             _ret = populate_node(self.root, options)
         except exception.QobuzError as e:
             kodi_directory.end_of_directory(False)
             logger.warn('Error while populating our directory: %s', e)
             return False
         if not self.asList:
             helper_kodi_directory_setup(kodi_directory,
                                         self.root.content_type)
         return kodi_directory.end_of_directory()
예제 #4
0
 def run(self):
     """Building our tree, creating root node based on our node_type
     """
     if not self.set_root_node():
         warn(self,
              ("Cannot set root node (%s, %s)") %
              (str(self.node_type), str(self.root.get_parameter('nid'))))
         return False
     if self.root.hasWidget:
         return self.root.displayWidget()
     if self.has_method_parameter():
         return self.execute_method_parameter()
     from qobuz.gui.directory import Directory
     Dir = Directory(self.root, self.nodes,
                     withProgress=self.enable_progress)
     Dir.asList = self.asList
     Dir.handle = config.app.handle
     if getSetting('contextmenu_replaceitems', asBool=True):
         Dir.replaceItems = True
     try:
         ret = self.root.populating(Dir, self.depth,
                                    self.whiteFlag, self.blackFlag)
     except Qerror as e:
         Dir.end_of_directory(False)
         Dir = None
         warn(self,
              "Error while populating our directory: %s" % (repr(e)))
         return False
     if not self.asList:
         import xbmcplugin  # @UnresolvedImport
         Dir.set_content(self.root.content_type)
         methods = [
             xbmcplugin.SORT_METHOD_UNSORTED,
             xbmcplugin.SORT_METHOD_LABEL,
             xbmcplugin.SORT_METHOD_DATE,
             xbmcplugin.SORT_METHOD_TITLE,
             xbmcplugin.SORT_METHOD_VIDEO_YEAR,
             xbmcplugin.SORT_METHOD_GENRE,
             xbmcplugin.SORT_METHOD_ARTIST,
             xbmcplugin.SORT_METHOD_ALBUM,
             xbmcplugin.SORT_METHOD_PLAYLIST_ORDER,
             xbmcplugin.SORT_METHOD_TRACKNUM, ]
         [xbmcplugin.addSortMethod(handle=config.app.handle,
                                   sortMethod=method) for method in methods]
     return Dir.end_of_directory()
예제 #5
0
def list_track(kodi_directory, stats):
    root = kodi_directory.root
    total = 0
    tmp_directory = Directory(None, asList=True)
    final_directory = Directory(None, asList=True)
    if is_track(root):
        tmp_directory.add_node(root)
    else:
        options = helper.TreeTraverseOpts(
            xdir=tmp_directory,
            lvl=3,
            whiteFlag=Flag.ALL,
            blackFlag=Flag.STOPBUILD)
        populate_node(root, options)
    total = len(tmp_directory.nodes)
    if not total:
        logger.info('NoTrack')
        return []

    progress_update(kodi_directory, 'Begin', '', cyclic_progress(stats))
    seen = Struct(**{
        'albums': {},
        'tracks': {}
    })
    for node in tmp_directory.nodes:
        progress_update(kodi_directory,
                        u'Scanning',
                        node.get_label(),
                        cyclic_progress(stats))
        node.set_parameter('mode', Mode.SCAN)
        if is_track(node):
            _list_track_process_node_track(final_directory, seen, node)
        else:
            _list_track_process_node_other(final_directory, seen, node)

    return final_directory.nodes
예제 #6
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