Beispiel #1
0
    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)
Beispiel #2
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)
Beispiel #3
0
 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'")
Beispiel #4
0
 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'")
Beispiel #5
0
 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
Beispiel #6
0
 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
Beispiel #7
0
 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
Beispiel #8
0
 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()
Beispiel #9
0
    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)
Beispiel #10
0
 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)))