Ejemplo n.º 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
Ejemplo n.º 2
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()
Ejemplo n.º 3
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