🎨 Output app dl (#301)

This commit is contained in:
Nikhil Badyal
2023-08-22 22:19:01 +05:30
committed by GitHub
parent 07b01bb3a1
commit b2023cc5fe
8 changed files with 36 additions and 31 deletions
+1
View File
@@ -40,6 +40,7 @@ class APP(object):
f"{app_name}_ARCHS_TO_BUILD".upper(), config.global_archs_to_build
)
self.download_file_name = None
self.download_dl = None
self.download_patch_resources(config)
def get_output_file_name(self) -> str:
+8 -6
View File
@@ -1,5 +1,5 @@
"""Downloader Class."""
from typing import Any, Dict
from typing import Any, Dict, Tuple
import requests
from bs4 import BeautifulSoup, Tag
@@ -14,7 +14,7 @@ from src.utils import bs4_parser, contains_any_word, request_header
class ApkMirror(Downloader):
"""Files downloader."""
def _extract_force_download_link(self, link: str, app: str) -> str:
def _extract_force_download_link(self, link: str, app: str) -> Tuple[str, str]:
"""Extract force download link."""
notes_divs = self._extracted_search_div(link, "tab-pane")
apk_type = self._extracted_search_div(link, "apkm-badge").get_text()
@@ -26,12 +26,12 @@ class ApkMirror(Downloader):
):
file_name = f"{app}.{extension}"
self._download(APK_MIRROR_BASE_URL + possible_link["href"], file_name)
return file_name
return file_name, APK_MIRROR_BASE_URL + possible_link["href"]
raise APKMirrorAPKDownloadFailure(
f"Unable to extract force download for {app}", url=link
)
def extract_download_link(self, page: str, app: str) -> str:
def extract_download_link(self, page: str, app: str) -> Tuple[str, str]:
"""Function to extract the download link from apkmirror html page.
:param page: Url of the page
@@ -93,7 +93,9 @@ class ApkMirror(Downloader):
soup = BeautifulSoup(r.text, bs4_parser)
return soup.find(class_=search_class)
def specific_version(self, app: str, version: str, main_page: str = "") -> str:
def specific_version(
self, app: str, version: str, main_page: str = ""
) -> Tuple[str, str]:
"""Function to download the specified version of app from apkmirror.
:param app: Name of the application
@@ -109,7 +111,7 @@ class ApkMirror(Downloader):
download_page = self.get_download_page(main_page)
return self.extract_download_link(download_page, app)
def latest_version(self, app: str, **kwargs: Any) -> str:
def latest_version(self, app: str, **kwargs: Any) -> Tuple[str, str]:
"""Function to download whatever the latest version of app from
apkmirror.
+3 -3
View File
@@ -1,5 +1,5 @@
"""APK Pure Downloader Class."""
from typing import Any
from typing import Any, Tuple
from src.downloader.download import Downloader
from src.downloader.sources import apk_sources
@@ -9,7 +9,7 @@ from src.patches import Patches
class ApkPure(Downloader):
"""Files downloader."""
def latest_version(self, app: str, **kwargs: Any) -> str:
def latest_version(self, app: str, **kwargs: Any) -> Tuple[str, str]:
"""Function to download whatever the latest version of app from
apkmirror.
@@ -20,4 +20,4 @@ class ApkPure(Downloader):
download_url = apk_sources[app].format(package_name)
file_name = f"{app}.apk"
self._download(download_url, file_name)
return file_name
return file_name, download_url
+4 -4
View File
@@ -1,5 +1,5 @@
"""APK SOS Downloader Class."""
from typing import Any
from typing import Any, Tuple
import requests
from bs4 import BeautifulSoup
@@ -13,7 +13,7 @@ from src.utils import bs4_parser, request_header
class ApkSos(Downloader):
"""Files downloader."""
def extract_download_link(self, page: str, app: str) -> str:
def extract_download_link(self, page: str, app: str) -> Tuple[str, str]:
"""Function to extract the download link from apkmirror html page.
:param page: Url of the page
@@ -27,10 +27,10 @@ class ApkSos(Downloader):
if possible_link.get("href"):
file_name = f"{app}.apk"
self._download(possible_link["href"], file_name)
return file_name
return file_name, possible_link["href"]
raise APKSosAPKDownloadFailure(f"Unable to download {app}", url=page)
def latest_version(self, app: str, **kwargs: Any) -> str:
def latest_version(self, app: str, **kwargs: Any) -> Tuple[str, str]:
"""Function to download whatever the latest version of app from
apkmirror.
+9 -9
View File
@@ -72,11 +72,11 @@ class Downloader(object):
self._QUEUE.put((perf_counter() - start, file_name))
logger.debug(f"Downloaded {file_name}")
def extract_download_link(self, page: str, app: str) -> str:
def extract_download_link(self, page: str, app: str) -> Tuple[str, str]:
"""Extract download link from web page."""
raise NotImplementedError(implement_method)
def specific_version(self, app: str, version: str) -> str:
def specific_version(self, app: str, version: str) -> Tuple[str, str]:
"""Function to download the specified version of app from apkmirror.
:param app: Name of the application
@@ -85,7 +85,7 @@ class Downloader(object):
"""
raise NotImplementedError(implement_method)
def latest_version(self, app: str, **kwargs: Any) -> str:
def latest_version(self, app: str, **kwargs: Any) -> Tuple[str, str]:
"""Function to download the latest version of app.
:param app: Name of the application
@@ -123,22 +123,22 @@ class Downloader(object):
base_name, _ = os.path.splitext(filename)
return base_name + new_extension
def download(self, version: str, app: str, **kwargs: Any) -> str:
def download(self, version: str, app: str, **kwargs: Any) -> Tuple[str, str]:
"""Public function to download apk to patch.
:param version: version to download
:param app: App to download
"""
if self.config.dry_run:
return ""
return "", ""
if app in self.config.existing_downloaded_apks:
logger.debug(f"Will not download {app} -v{version} from the internet.")
return app
return app, f"local://{app}"
if version and version != "latest":
file_name = self.specific_version(app, version)
file_name, app_dl = self.specific_version(app, version)
else:
file_name = self.latest_version(app, **kwargs)
return self.convert_to_apk(file_name)
file_name, app_dl = self.latest_version(app, **kwargs)
return self.convert_to_apk(file_name), app_dl
def direct_download(self, dl: str, file_name: str) -> None:
"""Download from DL."""
+3 -3
View File
@@ -15,7 +15,7 @@ from src.utils import handle_request_response, update_changelog
class Github(Downloader):
"""Files downloader."""
def latest_version(self, app: str, **kwargs: Dict[str, str]) -> str:
def latest_version(self, app: str, **kwargs: Dict[str, str]) -> Tuple[str, str]:
"""Function to download files from GitHub repositories.
:param app: App to download
@@ -25,7 +25,7 @@ class Github(Downloader):
logger.debug(
f"Skipping download of {app}. File already exists or dry running."
)
return app
return app, f"local://{app}"
owner = str(kwargs["owner"])
repo_name = str(kwargs["name"])
repo_url = f"https://api.github.com/repos/{owner}/{repo_name}/releases/latest"
@@ -43,7 +43,7 @@ class Github(Downloader):
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
return app, download_url
@staticmethod
def _extract_repo_owner_and_tag(url: str) -> Tuple[str, str, str]:
+5 -5
View File
@@ -1,5 +1,5 @@
"""Upto Down Downloader."""
from typing import Any
from typing import Any, Tuple
import requests
from bs4 import BeautifulSoup
@@ -14,7 +14,7 @@ from src.utils import bs4_parser, request_header
class UptoDown(Downloader):
"""Files downloader."""
def extract_download_link(self, page: str, app: str) -> str:
def extract_download_link(self, page: str, app: str) -> Tuple[str, str]:
r = requests.get(page, headers=request_header, allow_redirects=True, timeout=60)
soup = BeautifulSoup(r.text, bs4_parser)
soup = soup.find(id="detail-download-button")
@@ -25,9 +25,9 @@ class UptoDown(Downloader):
)
file_name = f"{app}.apk"
self._download(download_url, file_name)
return file_name
return file_name, download_url
def specific_version(self, app: str, version: str) -> str:
def specific_version(self, app: str, version: str) -> Tuple[str, str]:
"""Function to download the specified version of app from apkmirror.
:param app: Name of the application
@@ -51,6 +51,6 @@ class UptoDown(Downloader):
)
return self.extract_download_link(download_url, app)
def latest_version(self, app: str, **kwargs: Any) -> str:
def latest_version(self, app: str, **kwargs: Any) -> Tuple[str, str]:
page = f"{apk_sources[app]}/download"
return self.extract_download_link(page, app)