From 5a81c775f4a07630174778b5658e8e13d8cf4dbb Mon Sep 17 00:00:00 2001 From: Nikhil Badyal Date: Fri, 2 Dec 2022 10:33:03 +0530 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20Added=20apksos=20downloader?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/config.py | 1 + src/downloader.py | 28 ++++++++++++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/src/config.py b/src/config.py index b6bc946..1709f0a 100644 --- a/src/config.py +++ b/src/config.py @@ -30,6 +30,7 @@ class RevancedConfig: "sleep-as-android", ] self.apk_pure = ["pflotsh-ecmwf", "hex-editor", "anytracker"] + self.apk_sos = ["expensemanager"] 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 2daeabf..3c3a1b8 100644 --- a/src/downloader.py +++ b/src/downloader.py @@ -114,6 +114,24 @@ class Downloader(object): logger.debug(f"Downloaded {app} apk from apk_pure_downloader in rt") return "latest" + def __apk_sos_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 apkcombo") + raise AppNotFound() + download_url = f"https://apksos.com/download-app/{package_name}" + parser = LexborHTMLParser(self.config.session.get(download_url).text) + download_url = parser.css_first( + r"body > div > div > div > div > div.col-sm-12.col-md-8 > div.card.fluid.\.idma > " + "div.section.row > div.col-sm-12.col-md-8.text-center > p > a" + ).attributes["href"] + self._download(download_url, f"{app}.apk") + logger.debug(f"Downloaded {app} apk from apk_combo_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. @@ -232,6 +250,14 @@ class Downloader(object): else: return self.apkmirror_latest_version(app) + def apk_sos_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_sos_downloader(app) + def download_apk_to_patch(self, version: str, app: str) -> str: """Public function to download apk to patch. @@ -243,5 +269,7 @@ class Downloader(object): return self.upto_down_downloader(app) elif app in self.config.apk_pure: return self.apk_pure_downloader(app) + elif app in self.config.apk_sos: + return self.apk_sos_downloader(app) else: return self.download_from_apkmirror(version, app)