|
|
import ctypesimport osimport os.path as ospimport datetimefrom util import no_parents,get_drivesfrom config import config
FORCE_ADMIN = not config.getboolean('global','no_admin',fallback=False)
def is_admin(): return ctypes.windll.shell32.IsUserAnAdmin() != 0
EXE_PATH = os.path.expandvars(r"%userprofile%\portables" r"\foldertimeupdate" r"\FolderTimeUpdate.exe" )
def update_mtimes(starts): if not is_admin() and FORCE_ADMIN: raise Exception("Process must be admin") for start in starts: subprocess.check_call([EXE_PATH,'/stext','null','/BaseFolder',start])
def build(after,starts): if isinstance(after,datetime.datetime): after = after.timestamp() var_unsubbed = map(osp.expandvars,starts) abs_paths = map(osp.abspath,var_unsubbed) starts = list(no_parents(abs_paths)) ret = [] for path in starts: for root,dirs,files in os.walk(path,topdown=True): try: dirs[:] = list(filter( lambda p: osp.getmtime(osp.join(root,p)) > after, dirs )) ret += [osp.join(root,file) for file in files] except: print('Error',root,sep= ': ') return ret
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.append([name,path]) return ret
def update(after,*starts,update_mtimes = False): if update_mtimes: update_mtimes(starts) return build(after,starts)
|