From 74a000216e2b4b69f8022a4da82fab9b5ffa54be Mon Sep 17 00:00:00 2001 From: Raphael Roberts Date: Tue, 2 Oct 2018 23:46:39 -0500 Subject: [PATCH] First draft Not tested, but starts to implement required features --- build.py | 17 ++++++++++++----- ext_open.py | 25 +++++++++++++++++++++++++ load_save.py | 35 +++++++++++++++++++++++++++++++++++ windowless.vbs | 5 +++++ 4 files changed, 77 insertions(+), 5 deletions(-) create mode 100644 ext_open.py create mode 100644 load_save.py create mode 100644 windowless.vbs diff --git a/build.py b/build.py index d49f6f6..9e6738c 100644 --- a/build.py +++ b/build.py @@ -1,8 +1,7 @@ import os import os.path as osp import datetime -from util import no_parents -from util import get_drives +from util import no_parents,get_drives def build(after,*starts): if isinstance(after,datetime.datetime): after = after.timestamp() @@ -21,6 +20,14 @@ def build(after,*starts): except: print('Error',root,sep= ': ') return ret -if __name__ == "__main__": - td = datetime.datetime.today() - ret = build(datetime.datetime(td.year,(td.month - 1 -1)%12+1,1),r'X:\Users\Ralphie') \ No newline at end of file + +def build_ext(ext,paths): + ret = {} + for path in paths: + if path.endswith(ext): + name = osp.basename(path) + try: + ret[name].append(path) + except KeyError: + ret[name] = [path] + return ret \ No newline at end of file diff --git a/ext_open.py b/ext_open.py new file mode 100644 index 0000000..03b4a76 --- /dev/null +++ b/ext_open.py @@ -0,0 +1,25 @@ +import subprocess +from binaryornot.check import is_binary +import os +EDITOR_PATH = +def edit(path,params=[]): + call_chain = [EDITOR_PATH] + params + if not is_binary(path): + call_chain.append(path) + subprocess.call(call_chain) + +def standalone(path,params=[],windowless =False,cwd = None): + + path2windowless = os.path.join(os.path.dirname(__file__),'windowless.vbs') + params = list(map(os.path.expandvars,params)) + if not cwd: + cwd = os.path.dirname(path) + else: + cwd = os.path.expandvars(cwd) + if windowless: + cmd = ' '.join('~{}~'.format(arg) if ' ' in arg else arg for arg in [fullpath]+params) + print(cmd) + subprocess.check_output(["cscript.exe",path2windowless,cmd,cwd]) + else: + + subprocess.Popen([fullpath]+params,cwd=cwd) \ No newline at end of file diff --git a/load_save.py b/load_save.py new file mode 100644 index 0000000..e7dc475 --- /dev/null +++ b/load_save.py @@ -0,0 +1,35 @@ +import json +from build import build, build_ext_list +import time +def full(ext,*starts): + stime = time.time() + paths = build(0,*starts) + names = build_ext_list(ext,paths) + return { + "meta" : { + "ext" : ext, + "time": stime, + }, + "data": names + } + +def save(ext_map): + ext = ext_map["meta"]["ext"] + with open(f"{ext}-cache.json","w") as file: + json.dump(ext_map,file) + +def load(ext): + with open(f"{ext}-cache.json") as file: + return json.load(file) + +def update(ext,*starts): + ext_map = load(ext) + prev_time = ext_map["meta"]["time"] + stime = time.time() + paths = build(prev_time,*starts) + names = build_ext_list(ext,paths) + ext_map.update(names) + ext_map["meta"]["time"] = stime + save(ext_map) + return ext_map + \ No newline at end of file diff --git a/windowless.vbs b/windowless.vbs new file mode 100644 index 0000000..bb83969 --- /dev/null +++ b/windowless.vbs @@ -0,0 +1,5 @@ +Const Quote = """" +Set Shell = CreateObject("WScript.Shell") +Shell.CurrentDirectory = WScript.Arguments(1) +command = Replace(WScript.Arguments(0),"~",Quote) +Shell.Run command, 0, False \ No newline at end of file