mirror of
https://github.com/sotam0316/docker-py-revanced.git
synced 2026-04-25 03:48:37 +09:00
✨ Use Dict for storing patches (#304)
This commit is contained in:
@@ -5,8 +5,9 @@ import requests
|
||||
from bs4 import BeautifulSoup, Tag
|
||||
from loguru import logger
|
||||
|
||||
from src.app import APP
|
||||
from src.downloader.download import Downloader
|
||||
from src.downloader.sources import APK_MIRROR_BASE_URL, apk_sources
|
||||
from src.downloader.sources import APK_MIRROR_BASE_URL
|
||||
from src.exceptions import APKMirrorAPKDownloadFailure
|
||||
from src.utils import bs4_parser, contains_any_word, request_header
|
||||
|
||||
@@ -94,7 +95,7 @@ class ApkMirror(Downloader):
|
||||
return soup.find(class_=search_class)
|
||||
|
||||
def specific_version(
|
||||
self, app: str, version: str, main_page: str = ""
|
||||
self, app: APP, version: str, main_page: str = ""
|
||||
) -> Tuple[str, str]:
|
||||
"""Function to download the specified version of app from apkmirror.
|
||||
|
||||
@@ -105,13 +106,13 @@ class ApkMirror(Downloader):
|
||||
"""
|
||||
if not main_page:
|
||||
version = version.replace(".", "-")
|
||||
apk_main_page = apk_sources[app]
|
||||
apk_main_page = app.download_source
|
||||
version_page = apk_main_page + apk_main_page.split("/")[-2]
|
||||
main_page = f"{version_page}-{version}-release/"
|
||||
download_page = self.get_download_page(main_page)
|
||||
return self.extract_download_link(download_page, app)
|
||||
return self.extract_download_link(download_page, app.app_name)
|
||||
|
||||
def latest_version(self, app: str, **kwargs: Any) -> Tuple[str, str]:
|
||||
def latest_version(self, app: APP, **kwargs: Any) -> Tuple[str, str]:
|
||||
"""Function to download whatever the latest version of app from
|
||||
apkmirror.
|
||||
|
||||
@@ -119,7 +120,7 @@ class ApkMirror(Downloader):
|
||||
:return: Version of downloaded apk
|
||||
"""
|
||||
|
||||
app_main_page = apk_sources[app]
|
||||
app_main_page = app.download_source
|
||||
versions_div = self._extracted_search_div(
|
||||
app_main_page, "listWidget p-relative"
|
||||
)
|
||||
|
||||
@@ -1,23 +1,23 @@
|
||||
"""APK Pure Downloader Class."""
|
||||
from typing import Any, Tuple
|
||||
|
||||
from src.app import APP
|
||||
from src.downloader.download import Downloader
|
||||
from src.downloader.sources import apk_sources
|
||||
from src.patches import Patches
|
||||
|
||||
|
||||
class ApkPure(Downloader):
|
||||
"""Files downloader."""
|
||||
|
||||
def latest_version(self, app: str, **kwargs: Any) -> Tuple[str, str]:
|
||||
def latest_version(self, app: APP, **kwargs: Any) -> Tuple[str, str]:
|
||||
"""Function to download whatever the latest version of app from
|
||||
apkmirror.
|
||||
|
||||
:param app: Name of the application
|
||||
:return: Version of downloaded apk
|
||||
"""
|
||||
package_name = Patches.get_package_name(app)
|
||||
download_url = apk_sources[app].format(package_name)
|
||||
file_name = f"{app}.apk"
|
||||
package_name = Patches.get_package_name(app.app_name)
|
||||
download_url = app.download_source.format(package_name)
|
||||
file_name = f"{app.app_name}.apk"
|
||||
self._download(download_url, file_name)
|
||||
return file_name, download_url
|
||||
|
||||
@@ -4,8 +4,8 @@ from typing import Any, Tuple
|
||||
import requests
|
||||
from bs4 import BeautifulSoup
|
||||
|
||||
from src.app import APP
|
||||
from src.downloader.download import Downloader
|
||||
from src.downloader.sources import apk_sources
|
||||
from src.exceptions import APKSosAPKDownloadFailure
|
||||
from src.patches import Patches
|
||||
from src.utils import bs4_parser, request_header
|
||||
@@ -31,13 +31,13 @@ class ApkSos(Downloader):
|
||||
return file_name, possible_link["href"]
|
||||
raise APKSosAPKDownloadFailure(f"Unable to download {app}", url=page)
|
||||
|
||||
def latest_version(self, app: str, **kwargs: Any) -> Tuple[str, str]:
|
||||
def latest_version(self, app: APP, **kwargs: Any) -> Tuple[str, str]:
|
||||
"""Function to download whatever the latest version of app from
|
||||
apkmirror.
|
||||
|
||||
:param app: Name of the application
|
||||
:return: Version of downloaded apk
|
||||
"""
|
||||
package_name = Patches.get_package_name(app)
|
||||
download_url = apk_sources[app].format(package_name)
|
||||
return self.extract_download_link(download_url, app)
|
||||
package_name = Patches.get_package_name(app.app_name)
|
||||
download_url = app.download_source.format(package_name)
|
||||
return self.extract_download_link(download_url, app.app_name)
|
||||
|
||||
@@ -9,6 +9,7 @@ from typing import Any, Tuple
|
||||
from loguru import logger
|
||||
from tqdm import tqdm
|
||||
|
||||
from src.app import APP
|
||||
from src.config import RevancedConfig
|
||||
from src.downloader.utils import implement_method
|
||||
from src.exceptions import DownloadFailure
|
||||
@@ -74,7 +75,7 @@ class Downloader(object):
|
||||
"""Extract download link from web page."""
|
||||
raise NotImplementedError(implement_method)
|
||||
|
||||
def specific_version(self, app: str, version: str) -> Tuple[str, str]:
|
||||
def specific_version(self, app: APP, version: str) -> Tuple[str, str]:
|
||||
"""Function to download the specified version of app from apkmirror.
|
||||
|
||||
:param app: Name of the application
|
||||
@@ -83,7 +84,7 @@ class Downloader(object):
|
||||
"""
|
||||
raise NotImplementedError(implement_method)
|
||||
|
||||
def latest_version(self, app: str, **kwargs: Any) -> Tuple[str, str]:
|
||||
def latest_version(self, app: APP, **kwargs: Any) -> Tuple[str, str]:
|
||||
"""Function to download the latest version of app.
|
||||
|
||||
:param app: Name of the application
|
||||
@@ -121,7 +122,7 @@ class Downloader(object):
|
||||
base_name, _ = os.path.splitext(filename)
|
||||
return base_name + new_extension
|
||||
|
||||
def download(self, version: str, app: str, **kwargs: Any) -> Tuple[str, str]:
|
||||
def download(self, version: str, app: APP, **kwargs: Any) -> Tuple[str, str]:
|
||||
"""Public function to download apk to patch.
|
||||
|
||||
:param version: version to download
|
||||
@@ -130,8 +131,10 @@ class Downloader(object):
|
||||
if self.config.dry_run:
|
||||
return "", ""
|
||||
if app in self.config.existing_downloaded_apks:
|
||||
logger.debug(f"Will not download {app} -v{version} from the internet.")
|
||||
return app, f"local://{app}"
|
||||
logger.debug(
|
||||
f"Will not download {app.app_name} -v{version} from the internet."
|
||||
)
|
||||
return app.app_name, f"local://{app.app_name}"
|
||||
if version and version != "latest":
|
||||
file_name, app_dl = self.specific_version(app, version)
|
||||
else:
|
||||
|
||||
+10
-10
@@ -7,10 +7,9 @@ from src.downloader.download import Downloader
|
||||
from src.downloader.github import Github
|
||||
from src.downloader.sources import (
|
||||
APK_MIRROR_BASE_URL,
|
||||
APK_PURE_URL,
|
||||
APK_SOS_URL,
|
||||
APK_PURE_BASE_URL,
|
||||
APKS_SOS_BASE_URL,
|
||||
GITHUB_BASE_URL,
|
||||
apk_sources,
|
||||
)
|
||||
from src.downloader.uptodown import UptoDown
|
||||
from src.exceptions import DownloadFailure
|
||||
@@ -20,22 +19,23 @@ class DownloaderFactory(object):
|
||||
"""Downloader Factory."""
|
||||
|
||||
@staticmethod
|
||||
def create_downloader(app: str, config: RevancedConfig) -> Downloader:
|
||||
def create_downloader(config: RevancedConfig, apk_source: str) -> Downloader:
|
||||
"""Returns appropriate downloader.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
app : App Name
|
||||
config : Config
|
||||
apk_source : Source URL for APK
|
||||
"""
|
||||
if apk_sources[app].startswith(GITHUB_BASE_URL):
|
||||
if apk_source.startswith(GITHUB_BASE_URL):
|
||||
return Github(config)
|
||||
if apk_sources[app].startswith(APK_PURE_URL):
|
||||
if apk_source.startswith(APK_PURE_BASE_URL):
|
||||
return ApkPure(config)
|
||||
elif apk_sources[app].startswith(APK_SOS_URL):
|
||||
elif apk_source.startswith(APKS_SOS_BASE_URL):
|
||||
return ApkSos(config)
|
||||
elif apk_sources[app].endswith("en.uptodown.com/android"):
|
||||
elif apk_source.endswith("en.uptodown.com/android"):
|
||||
return UptoDown(config)
|
||||
elif apk_sources[app].startswith(APK_MIRROR_BASE_URL):
|
||||
elif apk_source.startswith(APK_MIRROR_BASE_URL):
|
||||
return ApkMirror(config)
|
||||
raise DownloadFailure(f"No download factory found for {app}")
|
||||
raise DownloadFailure("No download factory found.")
|
||||
|
||||
@@ -6,6 +6,7 @@ from urllib.parse import urlparse
|
||||
import requests
|
||||
from loguru import logger
|
||||
|
||||
from src.app import APP
|
||||
from src.config import RevancedConfig
|
||||
from src.downloader.download import Downloader
|
||||
from src.exceptions import DownloadFailure
|
||||
@@ -15,17 +16,17 @@ from src.utils import handle_request_response, update_changelog
|
||||
class Github(Downloader):
|
||||
"""Files downloader."""
|
||||
|
||||
def latest_version(self, app: str, **kwargs: Dict[str, str]) -> Tuple[str, str]:
|
||||
def latest_version(self, app: APP, **kwargs: Dict[str, str]) -> Tuple[str, str]:
|
||||
"""Function to download files from GitHub repositories.
|
||||
|
||||
:param app: App to download
|
||||
"""
|
||||
logger.debug(f"Trying to download {app} from github")
|
||||
if self.config.dry_run or app == "microg":
|
||||
logger.debug(f"Trying to download {app.app_name} from github")
|
||||
if self.config.dry_run:
|
||||
logger.debug(
|
||||
f"Skipping download of {app}. File already exists or dry running."
|
||||
f"Skipping download of {app.app_name}. File already exists or dry running."
|
||||
)
|
||||
return app, f"local://{app}"
|
||||
return app.app_name, f"local://{app.app_name}"
|
||||
owner = str(kwargs["owner"])
|
||||
repo_name = str(kwargs["name"])
|
||||
repo_url = f"https://api.github.com/repos/{owner}/{repo_name}/releases/latest"
|
||||
@@ -42,8 +43,8 @@ class Github(Downloader):
|
||||
else:
|
||||
download_url = response.json()["assets"][0]["browser_download_url"]
|
||||
update_changelog(f"{owner}/{repo_name}", response.json())
|
||||
self._download(download_url, file_name=app)
|
||||
return app, download_url
|
||||
self._download(download_url, file_name=app.app_name)
|
||||
return app.app_name, download_url
|
||||
|
||||
@staticmethod
|
||||
def _extract_repo_owner_and_tag(url: str) -> Tuple[str, str, str]:
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
APK_MIRROR_BASE_URL = "https://www.apkmirror.com"
|
||||
APK_MIRROR_BASE_APK_URL = f"{APK_MIRROR_BASE_URL}/apk"
|
||||
UPTODOWN_BASE_URL = "https://{}.en.uptodown.com/android"
|
||||
APK_PURE_URL = "https://d.apkpure.com/b/APK/{}?version=latest"
|
||||
APK_SOS_URL = "https://apksos.com/download-app/{}"
|
||||
APK_PURE_BASE_URL = "https://d.apkpure.com/b/APK"
|
||||
APK_PURE_URL = APK_PURE_BASE_URL + "/{}?version=latest"
|
||||
APKS_SOS_BASE_URL = "https://apksos.com/download-app"
|
||||
APK_SOS_URL = APKS_SOS_BASE_URL + "/{}"
|
||||
GITHUB_BASE_URL = "https://github.com"
|
||||
apk_sources = {
|
||||
"backdrops": f"{APK_MIRROR_BASE_APK_URL}/backdrops/backdrops-wallpapers/",
|
||||
|
||||
@@ -5,8 +5,8 @@ import requests
|
||||
from bs4 import BeautifulSoup
|
||||
from loguru import logger
|
||||
|
||||
from src.app import APP
|
||||
from src.downloader.download import Downloader
|
||||
from src.downloader.sources import apk_sources
|
||||
from src.exceptions import UptoDownAPKDownloadFailure
|
||||
from src.utils import bs4_parser, request_header
|
||||
|
||||
@@ -27,7 +27,7 @@ class UptoDown(Downloader):
|
||||
self._download(download_url, file_name)
|
||||
return file_name, download_url
|
||||
|
||||
def specific_version(self, app: str, version: str) -> Tuple[str, str]:
|
||||
def specific_version(self, app: APP, version: str) -> Tuple[str, str]:
|
||||
"""Function to download the specified version of app from apkmirror.
|
||||
|
||||
:param app: Name of the application
|
||||
@@ -35,7 +35,7 @@ class UptoDown(Downloader):
|
||||
:return: Version of downloaded apk
|
||||
"""
|
||||
logger.debug("downloading specified version of app from uptodown.")
|
||||
url = f"{apk_sources[app]}/versions"
|
||||
url = f"{app.download_source}/versions"
|
||||
html = self.config.session.get(url).text
|
||||
soup = BeautifulSoup(html, bs4_parser)
|
||||
versions_list = soup.find("section", {"id": "versions"})
|
||||
@@ -47,10 +47,10 @@ class UptoDown(Downloader):
|
||||
break
|
||||
if download_url is None:
|
||||
raise UptoDownAPKDownloadFailure(
|
||||
f"Unable to download {app} from uptodown.", url=url
|
||||
f"Unable to download {app.app_name} from uptodown.", url=url
|
||||
)
|
||||
return self.extract_download_link(download_url, app)
|
||||
return self.extract_download_link(download_url, app.app_name)
|
||||
|
||||
def latest_version(self, app: str, **kwargs: Any) -> Tuple[str, str]:
|
||||
page = f"{apk_sources[app]}/download"
|
||||
return self.extract_download_link(page, app)
|
||||
def latest_version(self, app: APP, **kwargs: Any) -> Tuple[str, str]:
|
||||
page = f"{app.download_source}/download"
|
||||
return self.extract_download_link(page, app.app_name)
|
||||
|
||||
Reference in New Issue
Block a user