diff --git a/src/ReVancedBuilder/APKPure_dl.py b/src/ReVancedBuilder/APKPure_dl.py index 9cc4e88..77c338d 100644 --- a/src/ReVancedBuilder/APKPure_dl.py +++ b/src/ReVancedBuilder/APKPure_dl.py @@ -14,33 +14,43 @@ from bs4 import BeautifulSoup as bs from ReVancedBuilder.Cleanup import err_exit # Determine the best version available to download + + def apkpure_best_match(version, soup): try: - vers_list = [Version(x['data-dt-version']) for x in soup.css.select(f"a[data-dt-apkid^=\"b/APK/\"]")] + vers_list = [Version(x['data-dt-version']) + for x in soup.css.select(f"a[data-dt-apkid^=\"b/APK/\"]")] except: - err_exit(f" There was some error getting list of versions of {apk}...", appstate) - + err_exit( + f" There was some error getting list of versions of {apk}...", appstate) + if version != '0': vers_list = filter(lambda x: x <= Version(version), vers_list) - + return str(max(vers_list)) # Download an apk from APKPure.com + + def apkpure_dl(apk, appname, version, hard_version, session, present_vers, flag): res = session.get(f"https://apkpure.com/{appname}/{apk}/versions") res.raise_for_status() soup = bs(res.text, 'html.parser') if not hard_version: - version = apkpure_best_match(version, soup) - + apkpure_version = apkpure_best_match(version, soup) + if version != apkpure_version: + print(f"Required version {version} not found in APKPure, choosing version {apkpure_version} instead.") + version=apkpure_version + if flag == 'checkonly' and present_vers[apk] != version: print(f"{apk} has an update ({present_vers[apk]} -> {version})") return try: if present_vers[apk] == version and flag != 'force' and os.path.isfile(apk+'.apk'): - print(f"Recommended version {version} of {apk} is already present.") + print( + f"Recommended version {version} of {apk} is already present.") return except KeyError: pass @@ -48,11 +58,14 @@ def apkpure_dl(apk, appname, version, hard_version, session, present_vers, flag) # Get the version code try: - ver_code = soup.css.select(f"a[data-dt-version=\"{version}\"][data-dt-apkid^=\"b/APK/\"]")[0]['data-dt-versioncode'] + ver_code=soup.css.select( + f"a[data-dt-version=\"{version}\"][data-dt-apkid^=\"b/APK/\"]")[0]['data-dt-versioncode'] except: - err_exit(f" There was some error while downloading {apk}...", appstate) - - res = session.get(f"https://d.apkpure.com/b/APK/{apk}?versionCode={ver_code}", stream=True) + err_exit( + f" There was some error while downloading {apk}...", appstate) + + res=session.get( + f"https://d.apkpure.com/b/APK/{apk}?versionCode={ver_code}", stream=True) res.raise_for_status() with open(apk+'.apk', 'wb') as f: for chunk in res.iter_content(chunk_size=8192): @@ -63,21 +76,24 @@ def apkpure_dl(apk, appname, version, hard_version, session, present_vers, flag) # Download apk files, if needed def get_apks(appstate): - present_vers = appstate['present_vers'] - build_config = appstate['build_config'] + present_vers=appstate['present_vers'] + build_config=appstate['build_config'] flag=appstate['flag'] print('Downloading required apk files from APKPure...') # Get latest patches using the ReVanced API try: - patches_json = next(filter(lambda x: x['repository'] == 'revanced/revanced-patches', appstate['tools'])) # Get the first result - patches = req.get(patches_json['browser_download_url']).json() + # Get the first result + patches_json=next(filter( + lambda x: x['repository'] == 'revanced/revanced-patches', appstate['tools'])) + patches=req.get(patches_json['browser_download_url']).json() except req.exceptions.RequestException as e: err_exit(f"Error fetching patches, {e}", appstate) - - session = req.Session() - session.headers.update({'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/116.0'}) + + session=req.Session() + session.headers.update( + {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/116.0'}) for app in build_config: # Check if we need to build an app @@ -85,21 +101,21 @@ def get_apks(appstate): continue try: - apk = build_config[app]['apk'] - pretty_name = build_config[app]['pretty_name'] - apkpure_appname = build_config[app]['apkpure_appname'] + apk=build_config[app]['apk'] + pretty_name=build_config[app]['pretty_name'] + apkpure_appname=build_config[app]['apkpure_appname'] except: err_exit(f"Invalid config for {app} in build_config!", appstate) print(f"Checking {pretty_name}...") try: - required_ver = build_config[app]['version'] + required_ver=build_config[app]['version'] required_ver[0] - hard_version = True - print(f"Using version {required_ver} of {app} from ") + hard_version=True + print(f"Using version {required_ver} of {app} from build_config.") except: - hard_version = False - compatible_vers = [] + hard_version=False + compatible_vers=[] for patch in patches: for pkg in patch['compatiblePackages']: if pkg['name'] == apk: @@ -109,13 +125,14 @@ def get_apks(appstate): pass if not compatible_vers: - required_ver = Version('0') + required_ver=Version('0') else: - required_ver = min(map(lambda x: Version(x), compatible_vers)) + required_ver=min(map(lambda x: Version(x), compatible_vers)) - apkpure_dl(apk, apkpure_appname, str(required_ver), hard_version, session, present_vers, flag) + apkpure_dl(apk, apkpure_appname, str(required_ver), + hard_version, session, present_vers, flag) present_vers.update({apk: str(required_ver)}) - - appstate['present_vers'] = present_vers - return appstate \ No newline at end of file + + appstate['present_vers']=present_vers + return appstate