From 6e2db60b7f07f851fafb973c24bc600d16ca950c Mon Sep 17 00:00:00 2001 From: cda2 Date: Tue, 11 Feb 2025 11:19:32 +0900 Subject: [PATCH] feat: Implement supported versions listing feature --- pythonlib/camoufox/__main__.py | 22 +++++++++++++++++++++- pythonlib/camoufox/pkgman.py | 21 +++++++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/pythonlib/camoufox/__main__.py b/pythonlib/camoufox/__main__.py index 320195a..4900189 100644 --- a/pythonlib/camoufox/__main__.py +++ b/pythonlib/camoufox/__main__.py @@ -13,7 +13,13 @@ import click from .addons import DefaultAddons, maybe_download_addons from .locale import ALLOW_GEOIP, download_mmdb, remove_mmdb -from .pkgman import INSTALL_DIR, CamoufoxFetcher, installed_verstr, rprint +from .pkgman import ( + INSTALL_DIR, + CamoufoxFetcher, + installed_verstr, + list_available_versions, + rprint, +) try: from browserforge.download import download as update_browserforge @@ -175,5 +181,19 @@ def version() -> None: rprint("(Up to date!)", fg="yellow") +@cli.command(name='list') +def list_versions() -> None: + """ + List all available release versions for Camoufox. + """ + versions = list_available_versions() + if versions: + rprint("Available versions:", fg="green") + for ver in versions: + click.echo(ver) + else: + rprint("No available releases found.", fg="red") + + if __name__ == '__main__': cli() diff --git a/pythonlib/camoufox/pkgman.py b/pythonlib/camoufox/pkgman.py index fb82f35..0561365 100644 --- a/pythonlib/camoufox/pkgman.py +++ b/pythonlib/camoufox/pkgman.py @@ -641,3 +641,24 @@ def load_yaml(file: str) -> Dict[str, Any]: """ with open(LOCAL_DATA / file, 'r') as f: return load(f, Loader=CLoader) + + +def list_available_versions() -> List[str]: + """ + List the available versions of Camoufox on GitHub. + """ + + fetcher = CamoufoxFetcher() + + releases: list[dict] = fetcher.fetch_all_releases() + versions: List[Version] = [] + for release in releases: + for asset in release.get('assets', []): + try: + version = fetcher.convert_asset_to_version(asset) + if version.is_supported(): + versions.append(version) + except ValueError: + continue + + return [version.full_string for version in sorted(versions, reverse=True)]