Compare commits

...

3 commits

2 changed files with 20 additions and 20 deletions

View file

@ -11,8 +11,8 @@ requires-python = ">=3.6"
keywords = ["revanced", "patch"] keywords = ["revanced", "patch"]
license = { file = "LICENSE" } license = { file = "LICENSE" }
classifiers = ["Programming Language :: Python :: 3"] classifiers = ["Programming Language :: Python :: 3"]
dependencies = ["requests", "packaging", "bs4"] dependencies = ["cloudscraper", "requests", "packaging", "bs4"]
version = "1.1" version = "1.2"
[project.scripts] [project.scripts]
ReVancedBuilder = "ReVancedBuilder:ReVancedBuilder" ReVancedBuilder = "ReVancedBuilder:ReVancedBuilder"

View file

@ -4,11 +4,9 @@
# SPDX-License-Identifier: GPL-3.0-only # SPDX-License-Identifier: GPL-3.0-only
import os import os
import sys
import json
from packaging.version import Version from packaging.version import Version
import requests as req import cloudscraper as scraper
from bs4 import BeautifulSoup as bs from bs4 import BeautifulSoup as bs
from ReVancedBuilder.Cleanup import err_exit from ReVancedBuilder.Cleanup import err_exit
@ -18,22 +16,24 @@ from ReVancedBuilder.Cleanup import err_exit
def apkpure_best_match(version, soup): def apkpure_best_match(version, soup):
try: try:
vers_list = [Version(x['data-dt-version']) vers_list_str = [x['data-dt-version'] for x in soup.css.select(f"a[data-dt-apkid^=\"b/APK/\"]")]
for x in soup.css.select(f"a[data-dt-apkid^=\"b/APK/\"]")]
except: except:
err_exit( err_exit(
f" There was some error getting list of versions of {apk}...", appstate) f" There was some error getting list of versions of {apk}...", appstate)
vers_list = map(lambda x: Version(x), vers_list_str)
if version != '0': if version != '0':
vers_list = filter(lambda x: x <= Version(version), vers_list) vers_list = filter(lambda x: x <= Version(version), vers_list)
return str(max(vers_list)) max_ver = max(vers_list)
return next(filter(lambda x: Version(x) == max_ver, vers_list_str))
# Download an apk from apkpure.net # Download an apk from apkpure.net
def apkpure_dl(apk, appname, version, hard_version, session, present_vers, flag): def apkpure_dl(apk, appname, version, hard_version, session, present_vers, flag):
res = session.get(f"https://apkpure.net/{appname}/{apk}/versions") res = session.get(f"https://apkpure.com/{appname}/{apk}/versions")
res.raise_for_status() res.raise_for_status()
soup = bs(res.text, 'html.parser') soup = bs(res.text, 'html.parser')
@ -74,7 +74,7 @@ def apkpure_dl(apk, appname, version, hard_version, session, present_vers, flag)
f" There was some error while downloading {apk}...", appname) f" There was some error while downloading {apk}...", appname)
res = session.get( res = session.get(
f"https://d.apkpure.net/b/APK/{apk}?versionCode={ver_code}", stream=True) f"https://d.apkpure.com/b/APK/{apk}?versionCode={ver_code}", stream=True)
res.raise_for_status() res.raise_for_status()
with open(apk+'.apk', 'wb') as f: with open(apk+'.apk', 'wb') as f:
for chunk in res.iter_content(chunk_size=8192): for chunk in res.iter_content(chunk_size=8192):
@ -90,19 +90,18 @@ def get_apks(appstate):
print('Downloading required apk files from APKPure...') print('Downloading required apk files from APKPure...')
# Create a cloudscraper session
session = scraper.create_scraper()
# Get latest patches using the ReVanced API # Get latest patches using the ReVanced API
try: try:
# Get the first result # Get the first result
patches_json = next(filter( patches_json = next(filter(
lambda x: x['repository'] == 'revanced/revanced-patches', appstate['tools'])) lambda x: x['repository'] == 'revanced/revanced-patches', appstate['tools']))
patches = req.get(patches_json['browser_download_url']).json() patches = session.get(patches_json['browser_download_url']).json()
except req.exceptions.RequestException as e: except session.exceptions.RequestException as e:
err_exit(f"Error fetching patches, {e}", appstate) err_exit(f"Error fetching patches, {e}", appstate)
session = req.Session()
session.headers.update(
{'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'})
for app in build_config: for app in build_config:
# Check if we need to build an app # Check if we need to build an app
if not build_config[app].getboolean('build'): if not build_config[app].getboolean('build'):
@ -118,7 +117,6 @@ def get_apks(appstate):
print(f"Checking {pretty_name}...") print(f"Checking {pretty_name}...")
try: try:
required_ver = build_config[app]['version'] required_ver = build_config[app]['version']
required_ver = Version(required_ver)
hard_version = True hard_version = True
print(f"Using version {required_ver} of {apk} from build_config.") print(f"Using version {required_ver} of {apk} from build_config.")
except: except:
@ -137,15 +135,17 @@ def get_apks(appstate):
required_ver = Version('0') required_ver = Version('0')
else: else:
required_ver = min(map(lambda x: Version(x), compatible_vers)) required_ver = min(map(lambda x: Version(x), compatible_vers))
required_ver = next(filter(lambda x: Version(x) == required_ver, compatible_vers))
print(f"Chosen required version of {apk} is {required_ver}.") print(f"Chosen required version of {apk} is {required_ver}.")
if appstate['present_vers'][apk] == str(required_ver): if appstate['present_vers'][apk] == required_ver:
print("It's already present on disk, so skipping download.") print("It's already present on disk, so skipping download.")
else: else:
apkpure_dl(apk, apkpure_appname, str(required_ver), apkpure_dl(apk, apkpure_appname, required_ver,
hard_version, session, present_vers, flag) hard_version, session, present_vers, flag)
present_vers.update({apk: str(required_ver)}) present_vers.update({apk: required_ver})
appstate['present_vers'] = present_vers appstate['present_vers'] = present_vers
return appstate return appstate