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
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