Ejemplo n.º 1
0
class CommandLineRunner(object):
    def __init__(self, amzs):
        self.tree_model = None
        self.downloader = None        
        self.current_node = None
        self.tab = '    '
        self.load_new_amz_files(amzs)        
        
    def run(self):
        for line in self.get_printable_download_list():
            print line
        print
        print 'Download these items? (Yes/No)'
        res = raw_input()
        if res in ['Yes', 'Y', 'y', 'yes', 'YES']:
            self.download_tracks()
        
    def load_new_amz_files(self, amz_files):
        parser = AmzParser()
        for f in amz_files:
            parser.parse(f)
        objects = parser.get_parsed_objects()        
        self.tree_model = TreeModel()
        self.tree_model.create_tree(objects)
        
    def finished_cb(self):
        finished = pymazon_finished.format(settings.save_dir, 
                                           settings.name_template)
        print
        print finished
    
    def update_cb(self, node):
        if isinstance(node.elem.obj, Track):
            artist = node.parent.elem.data()
            title = node.elem.data()
            status = node.elem.status()[1]
            if not node is self.current_node:
                self.current_node = node                
                print                
            else:
                txt = u'\r{0} {1} - {2}'.format(artist, title, status).encode('UTF-8', 'ignore')                
                sys.stdout.write(txt)
                sys.stdout.flush()                
            
    def download_tracks(self):
        settings.num_threads = 1 # until this printer becomes more sophisticated
        if not self.tree_model:
            return
        save_dir = settings.save_dir        
        if not os.access(save_dir, os.W_OK):
            msg = 'No write access to save directory. '
            msg += 'Choose a new directory with write privileges.'
            raise IOError(msg)        
        
        self.downloader = Downloader(self.tree_model, self.update_cb, 
                                     self.finished_cb)
        print 
        print '##############################################'
        self.downloader.start()
        self.downloader.join()     

    def get_printable_download_list(self):
        if not self.tree_model:
            return
        root_nodes = self.tree_model.get_root_nodes()
        lines = []
        def add_lines(node, ntabs):
            txt = node.elem.data()
            lines.append(ntabs * self.tab + txt)
            for snode in node.subnodes:
                add_lines(snode, ntabs+1)
        for node in root_nodes:
            add_lines(node, 0)
        return lines
Ejemplo n.º 2
0
class CommandLineRunner(object):
    def __init__(self, amzs):
        self.tree_model = None
        self.downloader = None
        self.current_node = None
        self.tab = '    '
        self.load_new_amz_files(amzs)

    def run(self):
        for line in self.get_printable_download_list():
            print line
        print
        print 'Download these items? (Yes/No)'
        res = raw_input()
        if res in ['Yes', 'Y', 'y', 'yes', 'YES']:
            self.download_tracks()

    def load_new_amz_files(self, amz_files):
        parser = AmzParser()
        for f in amz_files:
            parser.parse(f)
        objects = parser.get_parsed_objects()
        self.tree_model = TreeModel()
        self.tree_model.create_tree(objects)

    def finished_cb(self):
        finished = pymazon_finished.format(settings.save_dir,
                                           settings.name_template)
        print
        print finished

    def update_cb(self, node):
        if isinstance(node.elem.obj, Track):
            artist = node.parent.elem.data()
            title = node.elem.data()
            status = node.elem.status()[1]
            if not node is self.current_node:
                self.current_node = node
                print
            else:
                txt = u'\r{0} {1} - {2}'.format(artist, title, status).encode(
                    'UTF-8', 'ignore')
                sys.stdout.write(txt)
                sys.stdout.flush()

    def download_tracks(self):
        settings.num_threads = 1  # until this printer becomes more sophisticated
        if not self.tree_model:
            return
        save_dir = settings.save_dir
        if not os.access(save_dir, os.W_OK):
            msg = 'No write access to save directory. '
            msg += 'Choose a new directory with write privileges.'
            raise IOError(msg)

        self.downloader = Downloader(self.tree_model, self.update_cb,
                                     self.finished_cb)
        print
        print '##############################################'
        self.downloader.start()
        self.downloader.join()

    def get_printable_download_list(self):
        if not self.tree_model:
            return
        root_nodes = self.tree_model.get_root_nodes()
        lines = []

        def add_lines(node, ntabs):
            txt = node.elem.data()
            lines.append(ntabs * self.tab + txt)
            for snode in node.subnodes:
                add_lines(snode, ntabs + 1)

        for node in root_nodes:
            add_lines(node, 0)
        return lines