def chdir(self, path): parpath = util.unix_dirname(self.path) parfile = util.unix_basename(self.path) newpath = util.abspath(util.expanduser(path), self.path) if newpath == self.path: return self.list = None self.list_title = None if self.finder.active: self.finder.finish() self.mark_clear() try: os.chdir(newpath) except Exception as e: return message.exception(e) self.history.update(newpath) self.path = newpath self.diskread() self.sort() if self.path == parpath: self.setcursor(self.get_index(parfile)) else: self.setcursor(0)
def link(src, dst): try: if os.path.isdir(dst): dst = os.path.join(dst, util.unix_basename(src)) os.link(src, dst) message.puts("Created hard links: {0} -> {1}".format(src, dst)) except Exception as e: message.exception(e)
def zipeach(self, src, dst, wrap): threadlist = [] for f in src: path = os.path.join(dst, util.unix_basename(f)) threadlist.append(ZipThread(f, path, wrap)) for t in threadlist: self.thread_loop(t) message.puts("Finished 'zipeach'")
def tareach(self, src, dst, tarmode="gzip", wrap=""): threadlist = [] for f in src: path = os.path.join(dst, util.unix_basename(f)) threadlist.append(TarThread(f, path, tarmode, wrap)) for t in threadlist: self.thread_loop(t) message.puts("Finished 'tareach'")
def main(self): self.update("Delete starting...") goal = _get_file_length(self.path)[0] elapse = 1 for path in self.path: for f in self.generate(path): msg = "({0}/{1}): {2}".format(elapse, goal, util.unix_basename(f)) self.update("Deleting{0}".format(msg)) self.delete_file(f) self.notify("Deleted{0}".format(msg)) elapse += 1
def check_override(self, src, dst): if not os.path.lexists(dst) or \ util.unix_basename(src) != util.unix_basename(dst): return "Yes" checked = None if "Yes(all)" == self.confirm: checked = "Yes" elif "No(all)" == self.confirm: checked = "No" elif "Newer(all)" == self.confirm: if os.lstat(src).st_mtime > os.lstat(dst).st_mtime: checked = "Yes" else: checked = "No" elif "Importunate" == self.confirm: sstat, dstat = os.lstat(src), os.lstat(dst) stime = time.strftime("%c", time.localtime(sstat.st_mtime)) dtime = time.strftime("%c", time.localtime(dstat.st_mtime)) ret = message.confirm( "Override?", ["Yes", "No", "Newer", "Yes(all)", "No(all)", "Newer(all)", "Cancel"], ["Source", "Path: {0}".format(src), "Size: {0}".format(sstat.st_size), "Time: {0}".format(stime), "Destination", "Path: {0}".format(dst), "Size: {0}".format(dstat.st_size), "Time: {0}".format(dtime),]) if ret == "Yes" or ret == "No" or ret == "Cancel": checked = ret elif ret == "Newer": if sstat.st_mtime > dstat.st_mtime: checked = "Yes" else: checked = "No" elif ret == "Yes(all)" or ret == "No(all)" or ret == "Newer(all)": self.confirm = ret checked = ret[:-5] else: checked = "Cancel" return checked
def main(self): self.update("Move starting...") goal = _get_file_length(self.src)[0] fjg = FileJobGenerator() elapse = 1 mark = len(self.src) - 1 for f in self.src: for job in fjg.generate(f, self.dst, True, mark): if not self.active: raise FilectrlCancel(self.title) if job: msg = "({0}/{1}): {2}".format(elapse, goal, util.unix_basename(job.src)) self.update("Moving{0}".format(msg)) job.move() self.notify("Moved{0}".format(msg)) elapse += 1
def execute(self, path, action): filer = widgets.filer if filer.dir.ismark(): if not path.endswith(os.sep) and not os.path.isdir(path): return message.error("{0} - {1}".format(os.strerror(errno.ENOTDIR), path)) for f in filer.dir.get_mark_files(): dst = os.path.join(path, util.unix_basename(f)) filectrl.link(f, dst) filer.workspace.all_reload() elif self.src is None: if not path: return self.src = path return (filer.workspace.nextdir.path, -1) else: filectrl.link(self.src, path) filer.workspace.all_reload()
def generate(self, src, dst, moving, join=False): def _checkfile(src, dst): ret = self.check_override(src, dst) if ret == "Cancel": raise FilectrlCancel("Filejob canceled: {0} -> {1}".format(src, dst)) if ret == "Yes": return FileJob(src, dst) def _checkdir(src, dst): copypair = None if not os.path.isdir(dst): copypair = (os.stat(src), dst) for f in os.listdir(src): ssub = os.path.join(src, f) dsub = os.path.join(dst, f) if os.path.isdir(ssub) and not os.path.islink(ssub): for checked in _checkdir(ssub, dsub): yield checked else: yield _checkfile(ssub, dsub) if copypair: self.copydir(copypair) if moving: self.removedir(src) if join or os.path.isdir(dst) or dst.endswith(os.sep): dst = os.path.join(dst, util.unix_basename(src)) if util.unix_dirname(dst).startswith(src): raise FilectrlCancel("Cannot copy/move a directory, `{0}', into itself, `{1}'".format(src, dst)) if os.path.isdir(src) and not os.path.islink(src): for checked in _checkdir(src, dst): yield checked else: yield _checkfile(src, dst)
def execute(self, path, action): filer = widgets.filer filectrl.mkdir(path, self.dirmode) filer.workspace.all_reload() filer.dir.setcursor(filer.dir.get_index(util.unix_basename(path)))