From e7b1e89ada3e523ebb937d0f2bbdd66c1f74c3b3 Mon Sep 17 00:00:00 2001 From: Howard Wu Date: Sun, 26 Mar 2023 12:00:04 +0800 Subject: [PATCH] Show more info when extracting WSA --- scripts/extractWSA.py | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/scripts/extractWSA.py b/scripts/extractWSA.py index 2d83c55..ea98964 100644 --- a/scripts/extractWSA.py +++ b/scripts/extractWSA.py @@ -31,15 +31,17 @@ arch = sys.argv[1] zip_name = "" wsa_zip_path_raw = sys.argv[2] -wsa_zip_path= Path(wsa_zip_path_raw).resolve() +wsa_zip_path = Path(wsa_zip_path_raw).resolve() rootdir = Path(sys.argv[3]).resolve() env_file_raw = sys.argv[4] -print(f"wsa_zip_path_raw: {wsa_zip_path_raw}, env_file_raw: {env_file_raw}", flush=True) +print( + f"wsa_zip_path_raw: {wsa_zip_path_raw}, env_file_raw: {env_file_raw}", flush=True) env_file = Path(env_file_raw).resolve() workdir = rootdir / "wsa" archdir = Path(workdir / arch) - +pridir = workdir / archdir / 'pri' +xmldir = workdir / archdir / 'xml' if not Path(rootdir).is_dir(): rootdir.mkdir() @@ -53,19 +55,16 @@ if not Path(workdir).is_dir(): if not Path(archdir).is_dir(): archdir.mkdir() -print(f"extracting {arch} from {wsa_zip_path} to {archdir}", flush=True) +uid = os.getuid() +workdir_rw = os.access(workdir, os.W_OK) +print(f"Uid {uid} can write to {workdir} {workdir_rw}", flush=True) with zipfile.ZipFile(wsa_zip_path) as zip: for f in zip.filelist: if arch in f.filename.lower(): zip_name = f.filename if not Path(workdir / zip_name).is_file(): - zip_path = workdir / zip_name print(f"unzipping {zip_name} to {workdir}", flush=True) - uid = os.getuid() - workdir_rw = os.access(workdir, os.W_OK) - print(f"Uid {uid} can write to \"{workdir}\"? : {workdir_rw}", flush=True) - extract_ret = zip.extract(f, workdir) - print(f"extract_ret: {extract_ret}", flush=True) + zip_path = zip.extract(f, workdir) ver_no = zip_name.split("_") long_ver = ver_no[1] ver = long_ver.split(".") @@ -76,18 +75,23 @@ with zipfile.ZipFile(wsa_zip_path) as zip: environ_file.write(f'WSA_VER={long_ver}\n') environ_file.write(f'WSA_MAIN_VER={main_ver}\n') environ_file.write(f'WSA_REL={rel_long}\n') - if 'language' in f.filename.lower() or 'scale' in f.filename.lower(): + filename_lower = f.filename.lower() + if 'language' in filename_lower or 'scale' in filename_lower: + print(f"unzipping {filename_lower}", flush=True) name = f.filename.split("_")[2].split(".")[0] zip.extract(f, workdir) with zipfile.ZipFile(workdir / f.filename) as l: for g in l.filelist: if g.filename == 'resources.pri': g.filename = f'resources.{name}.pri' - l.extract(g, workdir / archdir / 'pri') + print(f"extracting {g.filename}", flush=True) + l.extract(g, pridir) elif g.filename == 'AppxManifest.xml': g.filename = f'resources.{name}.xml' - l.extract(g, workdir / archdir / 'xml') + print(f"extracting {g.filename}", flush=True) + l.extract(g, xmldir) elif re.search(u'Images/.+\.png', g.filename): + print(f"extracting {g.filename}", flush=True) l.extract(g, archdir) with zipfile.ZipFile(zip_path) as zip: print(f"unzipping from {zip_path}", flush=True)