mirror of
https://forge.fsky.io/oneflux/omegafox.git
synced 2026-02-10 07:02:03 -08:00
No progress bar on addon download #65
- Removed progress bars on addon download (shows as percent instead) - Default addons are downloaded on `camoufox fetch`
This commit is contained in:
parent
3a5c47d3dd
commit
ca7c3e3aa8
3 changed files with 41 additions and 12 deletions
|
|
@ -10,10 +10,17 @@ from os import environ
|
|||
from typing import Optional
|
||||
|
||||
import click
|
||||
from browserforge.download import download as update_browserforge
|
||||
|
||||
from .addons import DefaultAddons
|
||||
from .locale import ALLOW_GEOIP, download_mmdb, remove_mmdb
|
||||
from .pkgman import INSTALL_DIR, CamoufoxFetcher, installed_verstr, rprint
|
||||
from .xpi_dl import maybe_download_addons
|
||||
|
||||
try:
|
||||
from browserforge.download import download as update_browserforge
|
||||
except ImportError:
|
||||
# Account for other Browserforge versions
|
||||
from browserforge.download import Download as update_browserforge
|
||||
|
||||
|
||||
class CamoufoxUpdate(CamoufoxFetcher):
|
||||
|
|
@ -70,16 +77,21 @@ def cli() -> None:
|
|||
|
||||
|
||||
@cli.command(name='fetch')
|
||||
@click.option('--browserforge', is_flag=True, help='Update browserforge\'s header and fingerprint definitions')
|
||||
@click.option(
|
||||
'--browserforge', is_flag=True, help='Update browserforge\'s header and fingerprint definitions'
|
||||
)
|
||||
def fetch(browserforge=False) -> None:
|
||||
"""
|
||||
Fetch the latest version of Camoufox and optionally update the browserforge's database
|
||||
Fetch the latest version of Camoufox and optionally update Browserforge's database
|
||||
"""
|
||||
CamoufoxUpdate().update()
|
||||
# Fetch the GeoIP database
|
||||
if ALLOW_GEOIP:
|
||||
download_mmdb()
|
||||
|
||||
# Download default addons
|
||||
maybe_download_addons(list(DefaultAddons))
|
||||
|
||||
if browserforge:
|
||||
update_browserforge(headers=True, fingerprints=True)
|
||||
|
||||
|
|
|
|||
|
|
@ -389,6 +389,7 @@ def webdl(
|
|||
url: str,
|
||||
desc: Optional[str] = None,
|
||||
buffer: Optional[DownloadBuffer] = None,
|
||||
bar: bool = True,
|
||||
) -> DownloadBuffer:
|
||||
"""
|
||||
Download a file from the given URL and return it as BytesIO.
|
||||
|
|
@ -396,6 +397,7 @@ def webdl(
|
|||
Args:
|
||||
url (str): The URL to download the file from
|
||||
buffer (Optional[BytesIO]): A BytesIO object to store the downloaded file
|
||||
bar (bool): Whether to show the progress bar
|
||||
|
||||
Returns:
|
||||
DownloadBuffer: The downloaded file content as a BytesIO object
|
||||
|
|
@ -411,7 +413,13 @@ def webdl(
|
|||
if buffer is None:
|
||||
buffer = BytesIO()
|
||||
|
||||
with tqdm(total=total_size, unit='iB', unit_scale=True, desc=desc) as progress_bar:
|
||||
with tqdm(
|
||||
total=total_size,
|
||||
unit='iB',
|
||||
bar_format=None if bar else '{desc}: {percentage:3.0f}%',
|
||||
unit_scale=True,
|
||||
desc=desc,
|
||||
) as progress_bar:
|
||||
for data in response.iter_content(block_size):
|
||||
size = buffer.write(data)
|
||||
progress_bar.update(size)
|
||||
|
|
@ -424,6 +432,7 @@ def unzip(
|
|||
zip_file: DownloadBuffer,
|
||||
extract_path: str,
|
||||
desc: Optional[str] = None,
|
||||
bar: bool = True,
|
||||
) -> None:
|
||||
"""
|
||||
Extract the contents of a zip file to the installation directory.
|
||||
|
|
@ -436,7 +445,9 @@ def unzip(
|
|||
OSError: If there's an error creating directories or writing files
|
||||
"""
|
||||
with ZipFile(zip_file) as zf:
|
||||
for member in tqdm(zf.infolist(), desc=desc):
|
||||
for member in tqdm(
|
||||
zf.infolist(), desc=desc, bar_format=None if bar else '{desc}: {percentage:3.0f}%'
|
||||
):
|
||||
zf.extract(member, extract_path)
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
import os
|
||||
from multiprocessing import Lock
|
||||
from typing import List, Optional
|
||||
|
||||
from .addons import DefaultAddons
|
||||
|
|
@ -17,6 +18,7 @@ def add_default_addons(
|
|||
|
||||
addons = [addon for addon in DefaultAddons if addon not in exclude_list]
|
||||
|
||||
with Lock():
|
||||
maybe_download_addons(addons, addons_list)
|
||||
|
||||
|
||||
|
|
@ -25,8 +27,8 @@ def download_and_extract(url: str, extract_path: str, name: str) -> None:
|
|||
Downloads and extracts an addon from a given URL to a specified path
|
||||
"""
|
||||
# Create a temporary file to store the downloaded zip
|
||||
buffer = webdl(url, desc=f"Downloading addon ({name})")
|
||||
unzip(buffer, extract_path, f"Extracting addon ({name})")
|
||||
buffer = webdl(url, desc=f"Downloading addon ({name})", bar=False)
|
||||
unzip(buffer, extract_path, f"Extracting addon ({name})", bar=False)
|
||||
|
||||
|
||||
def get_addon_path(addon_name: str) -> str:
|
||||
|
|
@ -36,7 +38,9 @@ def get_addon_path(addon_name: str) -> str:
|
|||
return get_path(os.path.join("addons", addon_name))
|
||||
|
||||
|
||||
def maybe_download_addons(addons: List[DefaultAddons], addons_list: List[str]) -> None:
|
||||
def maybe_download_addons(
|
||||
addons: List[DefaultAddons], addons_list: Optional[List[str]] = None
|
||||
) -> None:
|
||||
"""
|
||||
Downloads and extracts addons from a given dictionary to a specified list
|
||||
Skips downloading if the addon is already downloaded
|
||||
|
|
@ -48,6 +52,7 @@ def maybe_download_addons(addons: List[DefaultAddons], addons_list: List[str]) -
|
|||
# Check if the addon is already extracted
|
||||
if os.path.exists(addon_path):
|
||||
# Add the existing addon path to addons_list
|
||||
if addons_list is not None:
|
||||
addons_list.append(addon_path)
|
||||
continue
|
||||
|
||||
|
|
@ -56,6 +61,7 @@ def maybe_download_addons(addons: List[DefaultAddons], addons_list: List[str]) -
|
|||
os.makedirs(addon_path, exist_ok=True)
|
||||
download_and_extract(addon.value, addon_path, addon.name)
|
||||
# Add the new addon directory path to addons_list
|
||||
if addons_list is not None:
|
||||
addons_list.append(addon_path)
|
||||
except Exception as e:
|
||||
print(f"Failed to download and extract {addon.name}: {e}")
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue