mirror of
https://github.com/sotam0316/docker-py-revanced.git
synced 2026-04-25 03:48:37 +09:00
Added apkeep support
This commit is contained in:
committed by
Nikhil Badyal
parent
bb05ec0f6f
commit
05ca33164c
@@ -0,0 +1,66 @@
|
||||
"""Apkeep Downloader Class."""
|
||||
|
||||
import subprocess
|
||||
from time import perf_counter
|
||||
from typing import Any, Self
|
||||
|
||||
from loguru import logger
|
||||
|
||||
from src.app import APP
|
||||
from src.downloader.download import Downloader
|
||||
from src.exceptions import DownloadError
|
||||
|
||||
|
||||
class Apkeep(Downloader):
|
||||
"""Apkeep-based Downloader."""
|
||||
|
||||
def _run_apkeep(self: Self, package_name: str, version: str = "") -> str:
|
||||
"""Run apkeep CLI to fetch APK from Google Play."""
|
||||
email = self.config.env.str("APKEEP_EMAIL")
|
||||
token = self.config.env.str("APKEEP_TOKEN")
|
||||
|
||||
if not email or not token:
|
||||
msg = "APKEEP_EMAIL and APKEEP_TOKEN must be set in environment."
|
||||
raise DownloadError(msg)
|
||||
|
||||
file_name = f"{package_name}.apk"
|
||||
file_path = self.config.temp_folder / file_name
|
||||
|
||||
if file_path.exists():
|
||||
logger.debug(f"{file_name} already downloaded.")
|
||||
return file_name
|
||||
|
||||
cmd = [
|
||||
"apkeep",
|
||||
"-a",
|
||||
f"{package_name}@{version}" if version and version != "latest" else package_name,
|
||||
"-d",
|
||||
"google-play",
|
||||
"-e",
|
||||
email,
|
||||
"-t",
|
||||
token,
|
||||
self.config.temp_folder_name,
|
||||
]
|
||||
logger.debug(f"Running command: {cmd}")
|
||||
|
||||
start = perf_counter()
|
||||
process = subprocess.Popen(cmd, stdout=subprocess.PIPE)
|
||||
output = process.stdout
|
||||
if not output:
|
||||
msg = "Failed to send request for patching."
|
||||
raise DownloadError(msg)
|
||||
for line in output:
|
||||
logger.debug(line.decode(), flush=True, end="")
|
||||
process.wait()
|
||||
if process.returncode != 0:
|
||||
msg = f"Command failed with exit code {process.returncode} for app {package_name}"
|
||||
raise DownloadError(msg)
|
||||
logger.info(f"Downloading completed for app {package_name} in {perf_counter() - start:.2f} seconds.")
|
||||
return file_name
|
||||
|
||||
def latest_version(self: Self, app: APP, **kwargs: Any) -> tuple[str, str]:
|
||||
"""Download latest version from Google Play via Apkeep."""
|
||||
file_name = self._run_apkeep(app.package_name)
|
||||
logger.info(f"Got file name as {file_name}")
|
||||
return file_name, f"apkeep://google-play/{app.package_name}"
|
||||
@@ -1,6 +1,7 @@
|
||||
"""Downloader Factory."""
|
||||
|
||||
from src.config import RevancedConfig
|
||||
from src.downloader.apkkeep import Apkeep
|
||||
from src.downloader.apkmirror import ApkMirror
|
||||
from src.downloader.apkmonk import ApkMonk
|
||||
from src.downloader.apkpure import ApkPure
|
||||
@@ -12,6 +13,7 @@ from src.downloader.sources import (
|
||||
APK_MIRROR_BASE_URL,
|
||||
APK_MONK_BASE_URL,
|
||||
APK_PURE_BASE_URL,
|
||||
APKEEP,
|
||||
APKS_SOS_BASE_URL,
|
||||
DRIVE_DOWNLOAD_BASE_URL,
|
||||
GITHUB_BASE_URL,
|
||||
@@ -47,5 +49,7 @@ class DownloaderFactory(object):
|
||||
return ApkMonk(config)
|
||||
if apk_source.startswith(DRIVE_DOWNLOAD_BASE_URL):
|
||||
return GoogleDrive(config)
|
||||
if apk_source.startswith(APKEEP):
|
||||
return Apkeep(config)
|
||||
msg = "No download factory found."
|
||||
raise DownloadError(msg, url=apk_source)
|
||||
|
||||
@@ -35,7 +35,7 @@ class Github(Downloader):
|
||||
}
|
||||
if self.config.personal_access_token:
|
||||
logger.debug("Using personal access token")
|
||||
headers["Authorization"] = f"token {self.config.personal_access_token}"
|
||||
headers["Authorization"] = f"Bearer {self.config.personal_access_token}"
|
||||
response = requests.get(repo_url, headers=headers, timeout=request_timeout)
|
||||
handle_request_response(response, repo_url)
|
||||
if repo_name == "revanced-patches":
|
||||
@@ -80,7 +80,7 @@ class Github(Downloader):
|
||||
"Content-Type": "application/vnd.github.v3+json",
|
||||
}
|
||||
if config.personal_access_token:
|
||||
headers["Authorization"] = f"token {config.personal_access_token}"
|
||||
headers["Authorization"] = f"Bearer {config.personal_access_token}"
|
||||
response = requests.get(api_url, headers=headers, timeout=request_timeout)
|
||||
handle_request_response(response, api_url)
|
||||
update_changelog(f"{github_repo_owner}/{github_repo_name}", response.json())
|
||||
|
||||
@@ -19,6 +19,7 @@ APK_COMBO_GENERIC_URL = APK_COMBO_BASE_URL + "/genericApp/{}"
|
||||
not_found_icon = "https://img.icons8.com/bubbles/500/android-os.png"
|
||||
revanced_api = "https://api.revanced.app/v2/patches/latest"
|
||||
APK_MONK_BASE_URL = "https://www.apkmonk.com"
|
||||
APKEEP = "apkeep"
|
||||
APK_MONK_APK_URL = APK_MONK_BASE_URL + "/app/{}/"
|
||||
APK_MONK_ICON_URL = "https://cdn.apkmonk.com/logos/{}"
|
||||
DRIVE_BASE_URL = "https://drive.google.com"
|
||||
|
||||
Reference in New Issue
Block a user