diff --git a/main.py b/main.py index 6bcb554..0927a1c 100644 --- a/main.py +++ b/main.py @@ -17,7 +17,7 @@ def main() -> None: config = RevancedConfig(env) patcher = Patches(config) - downloader = Downloader(config) + downloader = Downloader(patcher, config) parser = Parser(patcher, config) logger.info(f"Will Patch only {patcher.config.apps}") diff --git a/src/config.py b/src/config.py index bd96195..42ff6b0 100644 --- a/src/config.py +++ b/src/config.py @@ -20,6 +20,7 @@ class RevancedConfig: self.build_extended = env.bool("BUILD_EXTENDED", False) self.apk_mirror = "https://www.apkmirror.com" self.upto_down = ["spotify", "nyx-music-player", "icon-pack-studio", "twitch"] + self.apk_pure = ["pflotsh-ecmwf"] self.keystore_name = env.str("KEYSTORE_FILE_NAME", "revanced.keystore") self.apps = env.list("PATCH_APPS", default_build) self.extended_apps: List[str] = ["youtube", "youtube_music"] diff --git a/src/downloader.py b/src/downloader.py index 1f36f7c..2daeabf 100644 --- a/src/downloader.py +++ b/src/downloader.py @@ -13,18 +13,20 @@ from selectolax.lexbor import LexborHTMLParser from tqdm import tqdm from src.config import RevancedConfig -from src.utils import update_changelog +from src.patches import Patches +from src.utils import AppNotFound, update_changelog class Downloader(object): """Files downloader.""" - def __init__(self, config: RevancedConfig): + def __init__(self, patcher: Patches, config: RevancedConfig): self._CHUNK_SIZE = 10485760 self._QUEUE: PriorityQueue[Tuple[float, str]] = PriorityQueue() self._QUEUE_LENGTH = 0 self.config = config self.download_revanced() + self.patcher = patcher def _download(self, url: str, file_name: str) -> None: logger.debug(f"Trying to download {file_name} from {url}") @@ -99,6 +101,19 @@ class Downloader(object): logger.debug(f"Downloaded {app} apk from upto_down_downloader in rt") return app_version + def __apk_pure_downloader(self, app: str) -> str: + package_name = None + for package, app_tuple in self.patcher.revanced_app_ids.items(): + if app_tuple[0] == app: + package_name = package + if not package_name: + logger.info("Unable to download from apkpure") + raise AppNotFound() + download_url = f"https://d.apkpure.com/b/APK/{package_name}?version=latest" + self._download(download_url, f"{app}.apk") + logger.debug(f"Downloaded {app} apk from apk_pure_downloader in rt") + return "latest" + def apkmirror_specific_version(self, app: str, version: str) -> str: """Function to download the specified version of app from apkmirror. @@ -197,6 +212,14 @@ class Downloader(object): """ return self.__upto_down_downloader(app) + def apk_pure_downloader(self, app: str) -> str: + """Function to download from Apk Pure. + + :param app: Name of the application + :return: Version of downloaded APK + """ + return self.__apk_pure_downloader(app) + def download_from_apkmirror(self, version: str, app: str) -> str: """Function to download from apkmirror. @@ -218,5 +241,7 @@ class Downloader(object): """ if app in self.config.upto_down: return self.upto_down_downloader(app) + elif app in self.config.apk_pure: + return self.apk_pure_downloader(app) else: return self.download_from_apkmirror(version, app) diff --git a/src/patches.py b/src/patches.py index 35f799e..0aa1e6d 100644 --- a/src/patches.py +++ b/src/patches.py @@ -12,6 +12,23 @@ from src.utils import AppNotFound class Patches(object): """Revanced Patches.""" + revanced_app_ids = { + "com.reddit.frontpage": ("reddit", "_reddit"), + "com.ss.android.ugc.trill": ("tiktok", "_tiktok"), + "com.twitter.android": ("twitter", "_twitter"), + "de.dwd.warnapp": ("warnwetter", "_warnwetter"), + "com.spotify.music": ("spotify", "_spotify"), + "com.awedea.nyx": ("nyx-music-player", "_nyx"), + "ginlemon.iconpackstudio": ("icon-pack-studio", "_iconpackstudio"), + "com.ticktick.task": ("ticktick", "_ticktick"), + "tv.twitch.android.app": ("twitch", "_twitch"), + "com.garzotto.pflotsh.ecmwf_a": ("pflotsh-ecmwf", "_pflotsh"), + } + revanced_extended_app_ids = { + "com.google.android.youtube": ("youtube", "_yt"), + "com.google.android.apps.youtube.music": ("youtube-music", "_ytm"), + } + @staticmethod def check_java() -> None: """Check if Java17 is installed.""" @@ -43,27 +60,15 @@ class Patches(object): ) patches = resp.json() - revanced_app_ids = { - "com.reddit.frontpage": ("reddit", "_reddit"), - "com.ss.android.ugc.trill": ("tiktok", "_tiktok"), - "com.twitter.android": ("twitter", "_twitter"), - "de.dwd.warnapp": ("warnwetter", "_warnwetter"), - "com.spotify.music": ("spotify", "_spotify"), - "com.awedea.nyx": ("nyx-music-player", "_nyx"), - "ginlemon.iconpackstudio": ("icon-pack-studio", "_iconpackstudio"), - "com.ticktick.task": ("ticktick", "_ticktick"), - "tv.twitch.android.app": ("twitch", "_twitch"), - } - - for app_name in (revanced_app_ids[x][1] for x in revanced_app_ids): + for app_name in (self.revanced_app_ids[x][1] for x in self.revanced_app_ids): setattr(self, app_name, []) for patch in patches: for compatible_package, version in [ (x["name"], x["versions"]) for x in patch["compatiblePackages"] ]: - if compatible_package in revanced_app_ids: - app_name = revanced_app_ids[compatible_package][1] + if compatible_package in self.revanced_app_ids: + app_name = self.revanced_app_ids[compatible_package][1] p = {x: patch[x] for x in ["name", "description"]} p["app"] = compatible_package p["version"] = version[-1] if version else "all" @@ -75,12 +80,8 @@ class Patches(object): resp_extended = session.get(url) extended_patches = resp_extended.json() - revanced_extended_app_ids = { - "com.google.android.youtube": ("youtube", "_yt"), - "com.google.android.apps.youtube.music": ("youtube-music", "_ytm"), - } for app_name in ( - revanced_extended_app_ids[x][1] for x in revanced_extended_app_ids + self.revanced_extended_app_ids[x][1] for x in self.revanced_extended_app_ids ): setattr(self, app_name, []) @@ -88,17 +89,17 @@ class Patches(object): for compatible_package, version in [ (x["name"], x["versions"]) for x in patch["compatiblePackages"] ]: - if compatible_package in revanced_extended_app_ids: - app_name = revanced_extended_app_ids[compatible_package][1] + if compatible_package in self.revanced_extended_app_ids: + app_name = self.revanced_extended_app_ids[compatible_package][1] p = {x: patch[x] for x in ["name", "description"]} p["app"] = compatible_package p["version"] = version[-1] if version else "all" getattr(self, app_name).append(p) - for app_name, app_id in revanced_extended_app_ids.values(): + for app_name, app_id in self.revanced_extended_app_ids.values(): n_patches = len(getattr(self, app_id)) logger.debug(f"Total patches in {app_name} are {n_patches}") - for app_name, app_id in revanced_app_ids.values(): + for app_name, app_id in self.revanced_app_ids.values(): n_patches = len(getattr(self, app_id)) logger.debug(f"Total patches in {app_name} are {n_patches}") @@ -126,6 +127,7 @@ class Patches(object): "icon-pack-studio": "_iconpackstudio", "ticktick": "_ticktick", "twitch": "_twitch", + "pflotsh-ecmwf": "_pflotsh", } if not (app_name := app_names.get(app)): raise AppNotFound(app)