Check WSA download link version

I don't know why Microsoft's server returns multiple versions at the same time
This commit is contained in:
Howard Wu 2023-06-20 12:14:42 +08:00
parent aefda92b20
commit 9a4f25e538
4 changed files with 43 additions and 27 deletions

View file

@ -477,13 +477,13 @@ update_gapps_zip_name() {
fi fi
GAPPS_PATH=$DOWNLOAD_DIR/$GAPPS_ZIP_NAME GAPPS_PATH=$DOWNLOAD_DIR/$GAPPS_ZIP_NAME
} }
WSA_MAIN_VER=0 WSA_MAJOR_VER=0
update_ksu_zip_name() { update_ksu_zip_name() {
KERNEL_VER="5.15.78.1" KERNEL_VER="5.15.78.1"
if [ "$WSA_MAIN_VER" -lt "2303" ]; then if [ "$WSA_MAJOR_VER" -lt "2303" ]; then
abort "KernelSU is not supported on WSA version below 2303" abort "KernelSU is not supported on WSA version below 2303"
fi fi
if [ "$WSA_MAIN_VER" -ge "2304" ]; then if [ "$WSA_MAJOR_VER" -ge "2304" ]; then
KERNEL_VER="5.15.94.4" KERNEL_VER="5.15.94.4"
fi fi
KERNELSU_ZIP_NAME=kernelsu-$ARCH-$KERNEL_VER.zip KERNELSU_ZIP_NAME=kernelsu-$ARCH-$KERNEL_VER.zip
@ -498,9 +498,9 @@ if [ -z ${OFFLINE+x} ]; then
# shellcheck disable=SC1090 # shellcheck disable=SC1090
source "$WSA_WORK_ENV" || abort source "$WSA_WORK_ENV" || abort
else else
WSA_MAIN_VER=$(python3 getWSAMainVersion.py "$ARCH" "$WSA_ZIP_PATH") WSA_MAJOR_VER=$(python3 getWSAMainVersion.py "$ARCH" "$WSA_ZIP_PATH")
fi fi
if [[ "$WSA_MAIN_VER" -lt 2211 ]]; then if [[ "$WSA_MAJOR_VER" -lt 2211 ]]; then
ANDROID_API=32 ANDROID_API=32
fi fi
if [ "$ROOT_SOL" = "magisk" ] || [ "$GAPPS_BRAND" != "none" ]; then if [ "$ROOT_SOL" = "magisk" ] || [ "$GAPPS_BRAND" != "none" ]; then
@ -527,8 +527,8 @@ if [ -z ${OFFLINE+x} ]; then
exit 1 exit 1
fi fi
else # Offline mode else # Offline mode
WSA_MAIN_VER=$(python3 getWSAMainVersion.py "$ARCH" "$WSA_ZIP_PATH") WSA_MAJOR_VER=$(python3 getWSAMainVersion.py "$ARCH" "$WSA_ZIP_PATH")
if [[ "$WSA_MAIN_VER" -lt 2211 ]]; then if [[ "$WSA_MAJOR_VER" -lt 2211 ]]; then
ANDROID_API=32 ANDROID_API=32
fi fi
declare -A FILES_CHECK_LIST=([WSA_ZIP_PATH]="$WSA_ZIP_PATH" [xaml_PATH]="$xaml_PATH" [vclibs_PATH]="$vclibs_PATH" [UWPVCLibs_PATH]="$UWPVCLibs_PATH") declare -A FILES_CHECK_LIST=([WSA_ZIP_PATH]="$WSA_ZIP_PATH" [xaml_PATH]="$xaml_PATH" [vclibs_PATH]="$vclibs_PATH" [UWPVCLibs_PATH]="$UWPVCLibs_PATH")
@ -639,7 +639,7 @@ if [ "$GAPPS_BRAND" != 'none' ]; then
echo -e "Extract done\n" echo -e "Extract done\n"
fi fi
if [[ "$WSA_MAIN_VER" -ge 2302 ]]; then if [[ "$WSA_MAJOR_VER" -ge 2302 ]]; then
echo "Convert vhdx to RAW image" echo "Convert vhdx to RAW image"
vhdx_to_raw_img "$WORK_DIR/wsa/$ARCH/system_ext.vhdx" "$WORK_DIR/wsa/$ARCH/system_ext.img" || abort vhdx_to_raw_img "$WORK_DIR/wsa/$ARCH/system_ext.vhdx" "$WORK_DIR/wsa/$ARCH/system_ext.img" || abort
vhdx_to_raw_img "$WORK_DIR/wsa/$ARCH/product.vhdx" "$WORK_DIR/wsa/$ARCH/product.img" || abort vhdx_to_raw_img "$WORK_DIR/wsa/$ARCH/product.vhdx" "$WORK_DIR/wsa/$ARCH/product.img" || abort
@ -648,7 +648,7 @@ if [[ "$WSA_MAIN_VER" -ge 2302 ]]; then
echo -e "Convert vhdx to RAW image done\n" echo -e "Convert vhdx to RAW image done\n"
fi fi
if [[ "$WSA_MAIN_VER" -ge 2304 ]]; then if [[ "$WSA_MAJOR_VER" -ge 2304 ]]; then
echo "Mount images" echo "Mount images"
sudo mkdir -p -m 755 "$ROOT_MNT_RO" || abort sudo mkdir -p -m 755 "$ROOT_MNT_RO" || abort
sudo chown "0:0" "$ROOT_MNT_RO" || abort sudo chown "0:0" "$ROOT_MNT_RO" || abort
@ -664,7 +664,7 @@ if [[ "$WSA_MAIN_VER" -ge 2304 ]]; then
mk_overlayfs product "$PRODUCT_MNT_RO" "$PRODUCT_MNT_RW" "$PRODUCT_MNT" || abort mk_overlayfs product "$PRODUCT_MNT_RO" "$PRODUCT_MNT_RW" "$PRODUCT_MNT" || abort
mk_overlayfs system_ext "$SYSTEM_EXT_MNT_RO" "$SYSTEM_EXT_MNT_RW" "$SYSTEM_EXT_MNT" || abort mk_overlayfs system_ext "$SYSTEM_EXT_MNT_RO" "$SYSTEM_EXT_MNT_RW" "$SYSTEM_EXT_MNT" || abort
echo -e "Create overlayfs for EROFS done\n" echo -e "Create overlayfs for EROFS done\n"
elif [[ "$WSA_MAIN_VER" -ge 2302 ]]; then elif [[ "$WSA_MAJOR_VER" -ge 2302 ]]; then
echo "Remove read-only flag for read-only EXT4 image" echo "Remove read-only flag for read-only EXT4 image"
ro_ext4_img_to_rw "$WORK_DIR/wsa/$ARCH/system_ext.img" || abort ro_ext4_img_to_rw "$WORK_DIR/wsa/$ARCH/system_ext.img" || abort
ro_ext4_img_to_rw "$WORK_DIR/wsa/$ARCH/product.img" || abort ro_ext4_img_to_rw "$WORK_DIR/wsa/$ARCH/product.img" || abort
@ -672,7 +672,7 @@ elif [[ "$WSA_MAIN_VER" -ge 2302 ]]; then
ro_ext4_img_to_rw "$WORK_DIR/wsa/$ARCH/vendor.img" || abort ro_ext4_img_to_rw "$WORK_DIR/wsa/$ARCH/vendor.img" || abort
echo -e "Remove read-only flag for read-only EXT4 image done\n" echo -e "Remove read-only flag for read-only EXT4 image done\n"
fi fi
if [[ "$WSA_MAIN_VER" -lt 2304 ]]; then if [[ "$WSA_MAJOR_VER" -lt 2304 ]]; then
echo "Calculate the required space" echo "Calculate the required space"
EXTRA_SIZE=10240 EXTRA_SIZE=10240
@ -906,7 +906,7 @@ if [ "$GAPPS_BRAND" != 'none' ]; then
fi fi
fi fi
if [[ "$WSA_MAIN_VER" -ge 2304 ]]; then if [[ "$WSA_MAJOR_VER" -ge 2304 ]]; then
echo "Create EROFS images" echo "Create EROFS images"
mk_erofs_umount "$VENDOR_MNT" "$WORK_DIR/wsa/$ARCH/vendor.img" "$VENDOR_MNT_RW" || abort mk_erofs_umount "$VENDOR_MNT" "$WORK_DIR/wsa/$ARCH/vendor.img" "$VENDOR_MNT_RW" || abort
mk_erofs_umount "$PRODUCT_MNT" "$WORK_DIR/wsa/$ARCH/product.img" "$PRODUCT_MNT_RW" || abort mk_erofs_umount "$PRODUCT_MNT" "$WORK_DIR/wsa/$ARCH/product.img" "$PRODUCT_MNT_RW" || abort
@ -935,7 +935,7 @@ else
echo -e "Shrink images done\n" echo -e "Shrink images done\n"
fi fi
if [[ "$WSA_MAIN_VER" -ge 2302 ]]; then if [[ "$WSA_MAJOR_VER" -ge 2302 ]]; then
echo "Convert images to vhdx" echo "Convert images to vhdx"
qemu-img convert -q -f raw -o subformat=fixed -O vhdx "$WORK_DIR/wsa/$ARCH/system_ext.img" "$WORK_DIR/wsa/$ARCH/system_ext.vhdx" || abort qemu-img convert -q -f raw -o subformat=fixed -O vhdx "$WORK_DIR/wsa/$ARCH/system_ext.img" "$WORK_DIR/wsa/$ARCH/system_ext.vhdx" || abort
qemu-img convert -q -f raw -o subformat=fixed -O vhdx "$WORK_DIR/wsa/$ARCH/product.img" "$WORK_DIR/wsa/$ARCH/product.vhdx" || abort qemu-img convert -q -f raw -o subformat=fixed -O vhdx "$WORK_DIR/wsa/$ARCH/product.img" "$WORK_DIR/wsa/$ARCH/product.vhdx" || abort

View file

@ -82,13 +82,13 @@ with zipfile.ZipFile(wsa_zip_path) as zip:
ver_no = zip_name.split("_") ver_no = zip_name.split("_")
long_ver = ver_no[1] long_ver = ver_no[1]
ver = long_ver.split(".") ver = long_ver.split(".")
main_ver = ver[0] major_ver = ver[0]
rel = ver_no[3].split(".") rel = ver_no[3].split(".")
rel_long = str(rel[0]) rel_long = str(rel[0])
with open(env_file, 'r') as environ_file: with open(env_file, 'r') as environ_file:
env = Prop(environ_file.read()) env = Prop(environ_file.read())
env.WSA_VER = long_ver env.WSA_VER = long_ver
env.WSA_MAIN_VER = main_ver env.WSA_MAJOR_VER = major_ver
env.WSA_REL = rel_long env.WSA_REL = rel_long
with open(env_file, 'w') as environ_file: with open(env_file, 'w') as environ_file:
environ_file.write(str(env)) environ_file.write(str(env))

View file

@ -30,6 +30,7 @@ from typing import Any, OrderedDict
from xml.dom import minidom from xml.dom import minidom
from requests import Session from requests import Session
from packaging import version
class Prop(OrderedDict): class Prop(OrderedDict):
@ -124,9 +125,10 @@ if not download_dir.is_dir():
download_dir.mkdir() download_dir.mkdir()
tmpdownlist = open(download_dir/tempScript, 'a') tmpdownlist = open(download_dir/tempScript, 'a')
download_files = {}
def send_req(i, v, out_file, out_file_name): def send_req(i, v, out_file_name):
out = session.post( out = session.post(
'https://fe3.delivery.mp.microsoft.com/ClientWebService/client.asmx/secured', 'https://fe3.delivery.mp.microsoft.com/ClientWebService/client.asmx/secured',
data=FE3_file_content.format(user, i, v, release_type), data=FE3_file_content.format(user, i, v, release_type),
@ -136,13 +138,11 @@ def send_req(i, v, out_file, out_file_name):
for l in doc.getElementsByTagName("FileLocation"): for l in doc.getElementsByTagName("FileLocation"):
url = l.getElementsByTagName("Url")[0].firstChild.nodeValue url = l.getElementsByTagName("Url")[0].firstChild.nodeValue
if len(url) != 99: if len(url) != 99:
print(f"download link: {url}\npath: {out_file}\n", flush=True) download_files[out_file_name] = url
tmpdownlist.writelines(url + '\n')
tmpdownlist.writelines(f' dir={download_dir}\n')
tmpdownlist.writelines(f' out={out_file_name}\n')
threads = [] threads = []
wsa_build_ver = 0
for filename, values in identities.items(): for filename, values in identities.items():
if re.match(f"Microsoft\.UI\.Xaml\..*_{arch}_.*\.appx", filename): if re.match(f"Microsoft\.UI\.Xaml\..*_{arch}_.*\.appx", filename):
out_file_name = f"{values[1]}_{arch}.appx" out_file_name = f"{values[1]}_{arch}.appx"
@ -154,24 +154,39 @@ for filename, values in identities.items():
out_file_name = f"{values[1]}_{arch}.appx" out_file_name = f"{values[1]}_{arch}.appx"
out_file = download_dir / out_file_name out_file = download_dir / out_file_name
elif re.match(f"MicrosoftCorporationII\.WindowsSubsystemForAndroid_.*\.msixbundle", filename): elif re.match(f"MicrosoftCorporationII\.WindowsSubsystemForAndroid_.*\.msixbundle", filename):
wsa_long_ver = re.search(u'\d{4}.\d{5}.\d{1,}.\d{1,}', filename).group() tmp_wsa_build_ver = re.search(u'\d{4}.\d{5}.\d{1,}.\d{1,}', filename).group()
print(f'WSA Version={wsa_long_ver}\n', flush=True) if(wsa_build_ver == 0):
main_ver = wsa_long_ver.split(".")[0] wsa_build_ver = tmp_wsa_build_ver
else:
if version.parse(wsa_build_ver) < version.parse(tmp_wsa_build_ver):
wsa_build_ver = tmp_wsa_build_ver
else:
continue
version_splited = wsa_build_ver.split(".")
major_ver = version_splited[0]
minor_ver = version_splited[1]
build_ver = version_splited[2]
revision_ver = version_splited[3]
with open(os.environ['WSA_WORK_ENV'], 'r') as environ_file: with open(os.environ['WSA_WORK_ENV'], 'r') as environ_file:
env = Prop(environ_file.read()) env = Prop(environ_file.read())
env.WSA_VER = wsa_long_ver env.WSA_VER = wsa_build_ver
env.WSA_MAIN_VER = main_ver env.WSA_MAJOR_VER = major_ver
with open(os.environ['WSA_WORK_ENV'], 'w') as environ_file: with open(os.environ['WSA_WORK_ENV'], 'w') as environ_file:
environ_file.write(str(env)) environ_file.write(str(env))
out_file_name = f"wsa-{release_type}.zip" out_file_name = f"wsa-{release_type}.zip"
out_file = download_dir / out_file_name out_file = download_dir / out_file_name
else: else:
continue continue
th = Thread(target=send_req, args=(values[0][0], values[0][1], out_file, out_file_name)) th = Thread(target=send_req, args=(values[0][0], values[0][1], out_file_name))
threads.append(th) threads.append(th)
th.daemon = True th.daemon = True
th.start() th.start()
for th in threads: for th in threads:
th.join() th.join()
print(f'WSA Build Version={wsa_build_ver}\n', flush=True)
for key, value in download_files.items():
print(f"download link: {value}\npath: {download_dir / key}\n", flush=True)
tmpdownlist.writelines(value + '\n')
tmpdownlist.writelines(f' dir={download_dir}\n')
tmpdownlist.writelines(f' out={key}\n')
tmpdownlist.close() tmpdownlist.close()

View file

@ -1 +1,2 @@
requests requests
packaging