feat: Implement supported versions listing feature

This commit is contained in:
cda2 2025-02-11 11:19:32 +09:00
parent 13d9c26a16
commit 6e2db60b7f
2 changed files with 42 additions and 1 deletions

View file

@ -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()

View file

@ -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)]