[+] Download files
This commit is contained in:
+19
-7
@@ -17,6 +17,13 @@ from .interaction import print_updates, sizeof_fmt
|
|||||||
from .models import Kext, Release
|
from .models import Kext, Release
|
||||||
|
|
||||||
|
|
||||||
|
try:
|
||||||
|
term_len = os.get_terminal_size().columns
|
||||||
|
bar_len = int(term_len * 0.4)
|
||||||
|
except Exception:
|
||||||
|
bar_len = 20
|
||||||
|
|
||||||
|
|
||||||
def get_latest_release(kext: Kext, repos: dict, pre: bool):
|
def get_latest_release(kext: Kext, repos: dict, pre: bool):
|
||||||
# Lowercase keys
|
# Lowercase keys
|
||||||
repos = {k.lower(): v for k, v in repos['Repos'].items()}
|
repos = {k.lower(): v for k, v in repos['Repos'].items()}
|
||||||
@@ -39,7 +46,7 @@ def get_latest_release(kext: Kext, repos: dict, pre: bool):
|
|||||||
headers = {}
|
headers = {}
|
||||||
if 'GH_TOKEN' in os.environ:
|
if 'GH_TOKEN' in os.environ:
|
||||||
headers['Authorization'] = f'token {os.environ["GH_TOKEN"]}'
|
headers['Authorization'] = f'token {os.environ["GH_TOKEN"]}'
|
||||||
releases = requests.get(f'https://api.github.com/repos/{repo}/releases').json()
|
releases = requests.get(f'https://api.github.com/repos/{repo}/releases', headers=headers).json()
|
||||||
if not pre:
|
if not pre:
|
||||||
releases = [r for r in releases if not r['prerelease']]
|
releases = [r for r in releases if not r['prerelease']]
|
||||||
latest = releases[0]
|
latest = releases[0]
|
||||||
@@ -54,13 +61,16 @@ def download_file(url: str, file: str | Path):
|
|||||||
|
|
||||||
https://stackoverflow.com/a/42071418/7346633
|
https://stackoverflow.com/a/42071418/7346633
|
||||||
"""
|
"""
|
||||||
|
file = Path(file)
|
||||||
|
|
||||||
chunk_size = 1024
|
chunk_size = 1024
|
||||||
r = requests.get(url, stream=True)
|
r = requests.get(url, stream=True)
|
||||||
with open(file, 'wb') as f:
|
with open(file, 'wb') as f:
|
||||||
pbar = tqdm.tqdm(unit="B", total=int(r.headers['Content-Length']))
|
pbar = tqdm.tqdm(unit=" MB", total=int(r.headers['Content-Length']) / 1024 / 1024,
|
||||||
|
bar_format='{desc} {rate_fmt} {remaining} [{bar}] {percentage:.0f}%', ascii=' #', desc=file.name[:bar_len].ljust(bar_len))
|
||||||
for chunk in r.iter_content(chunk_size=chunk_size):
|
for chunk in r.iter_content(chunk_size=chunk_size):
|
||||||
if chunk:
|
if chunk:
|
||||||
pbar.update(len(chunk))
|
pbar.update(len(chunk) / 1024 / 1024)
|
||||||
f.write(chunk)
|
f.write(chunk)
|
||||||
return file
|
return file
|
||||||
|
|
||||||
@@ -71,8 +81,11 @@ def download_updates(updates: list[tuple[Kext, Release]]):
|
|||||||
tmp = Path(tmp)
|
tmp = Path(tmp)
|
||||||
|
|
||||||
print('Downloading zip files...')
|
print('Downloading zip files...')
|
||||||
for k, r in updates:
|
files = [download_file(r.artifact.url, tmp / r.artifact.name) for k, r in updates]
|
||||||
download_file(r.artifact.url, r.artifact.name)
|
|
||||||
|
print()
|
||||||
|
print('Extracting kexts')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def run():
|
def run():
|
||||||
@@ -110,8 +123,6 @@ def run():
|
|||||||
except AssertionError:
|
except AssertionError:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
term_len = os.get_terminal_size().columns
|
|
||||||
bar_len = int(term_len * 0.4)
|
|
||||||
latests = thread_map(get_latest, kexts, desc='Fetching Updates'.ljust(bar_len), max_workers=32, bar_format='{desc} {rate_fmt} {remaining} [{bar}] {percentage:.0f}%', ascii=' #', unit=' pkg')
|
latests = thread_map(get_latest, kexts, desc='Fetching Updates'.ljust(bar_len), max_workers=32, bar_format='{desc} {rate_fmt} {remaining} [{bar}] {percentage:.0f}%', ascii=' #', unit=' pkg')
|
||||||
|
|
||||||
# Compare versions
|
# Compare versions
|
||||||
@@ -132,6 +143,7 @@ def run():
|
|||||||
print('😕 Huh, okay')
|
print('😕 Huh, okay')
|
||||||
exit(0)
|
exit(0)
|
||||||
|
|
||||||
|
print()
|
||||||
download_updates(updates)
|
download_updates(updates)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user