diff --git a/scripts/launch_sdio.py b/scripts/launch_sdio.py index fbeaa4c0..f9d8f357 100644 --- a/scripts/launch_sdio.py +++ b/scripts/launch_sdio.py @@ -1,91 +1,15 @@ """WizardKit: Launch Snappy Driver Installer Origin""" # vim: sts=2 sw=2 ts=2 -from subprocess import CompletedProcess - import wk -from wk.cfg.net import SDIO_SERVER -# STATIC VARIABLES -MOUNT_EXCEPTIONS = ( - RuntimeError, - wk.exe.subprocess.CalledProcessError, - ) -SDIO_LOCAL_PATH = wk.kit.tools.get_tool_path("SDIO", "SDIO") -SDIO_REMOTE_PATH = wk.io.get_path_obj( - ( - fr'\\{SDIO_SERVER["Address"]}\{SDIO_SERVER["Share"]}\{SDIO_SERVER["Path"]}' - fr'\SDIO{"64" if wk.os.win.ARCH == "64" else ""}.exe' - ), - resolve=False, - ) - # Functions -def try_again() -> bool: - """Ask to try again or quit.""" - if wk.ui.cli.ask(' Try again?'): - return True - if not wk.ui.cli.ask(' Use local version?'): - wk.ui.cli.abort() - return False - - -def use_network_sdio() -> bool: - """Try to mount SDIO server.""" - use_network = False - def _mount_server() -> CompletedProcess: - print('Connecting to server... (Press CTRL+c to use local copy)') - return wk.net.mount_network_share(SDIO_SERVER, read_write=False) - - # Bail early - if not SDIO_SERVER['Address']: - return use_network - - # Main loop - while True: - try: - proc = _mount_server() - except KeyboardInterrupt: - break - except MOUNT_EXCEPTIONS as err: - wk.ui.cli.print_error(f' {err}') - if not try_again(): - break - else: - if proc.returncode == 0: - # Network copy available - use_network = True - break - - # Failed to mount - wk.ui.cli.print_error(' Failed to mount server') - if not try_again(): - break - - # Done - return use_network - - if __name__ == '__main__': wk.ui.cli.set_title( f'{wk.cfg.main.KIT_NAME_FULL}: Snappy Driver Installer Origin Launcher', ) log_dir = wk.log.format_log_path(tool=True).parent - USE_NETWORK = False - - # Try to mount server - try: - USE_NETWORK = use_network_sdio() - except KeyboardInterrupt: - wk.ui.cli.abort() - - # Run SDIO - EXE_PATH = SDIO_LOCAL_PATH - if USE_NETWORK: - EXE_PATH = SDIO_REMOTE_PATH - print('Using network copy!') - else: - print('Using local copy!') - cmd = [EXE_PATH, '-log_dir', log_dir] - wk.exe.run_program(cmd, check=False, cwd=EXE_PATH.parent) + sdio_path = wk.kit.tools.get_sdio_path(interactive=True) + cmd = [sdio_path, '-log_dir', log_dir] + wk.exe.run_program(cmd, check=False, cwd=sdio_path.parent) diff --git a/scripts/wk/kit/tools.py b/scripts/wk/kit/tools.py index 8d7251f0..3fb770d9 100644 --- a/scripts/wk/kit/tools.py +++ b/scripts/wk/kit/tools.py @@ -6,14 +6,18 @@ import pathlib import platform from datetime import datetime, timedelta -from subprocess import CompletedProcess, Popen +from subprocess import CalledProcessError, CompletedProcess, Popen import requests from wk.cfg.main import ARCHIVE_PASSWORD +from wk.cfg.net import SDIO_SERVER from wk.cfg.sources import DOWNLOAD_FREQUENCY, SOURCES from wk.exe import popen_program, run_program +from wk.io import get_path_obj +from wk.net import mount_network_share from wk.std import GenericError, sleep +from wk.ui.cli import abort, ask, print_error # STATIC VARIABLES @@ -25,6 +29,14 @@ HEADERS = { 'Gecko/20100101 Firefox/97.0' ), } +MOUNT_EXCEPTIONS = (RuntimeError, CalledProcessError) +SDIO_REMOTE_PATH = get_path_obj( + ( + fr'\\{SDIO_SERVER["Address"]}\{SDIO_SERVER["Share"]}\{SDIO_SERVER["Path"]}' + fr'\SDIO{"64" if ARCH == "64" else ""}.exe' + ), + resolve=False, + ) # "GLOBAL" VARIABLES @@ -203,6 +215,51 @@ def get_tool_path(folder, name, check=True, suffix=None) -> pathlib.Path: return tool_path +def get_sdio_path(interactive: bool) -> pathlib.Path: + """Try to mount SDIO server.""" + use_network = False + sdio_path = get_tool_path("SDIO", "SDIO") + def _mount_server() -> CompletedProcess: + print('Connecting to server... (Press CTRL+c to use local copy)') + return mount_network_share(SDIO_SERVER, read_write=False) + def _try_again(error_msg: str) -> bool: + """Ask to try again or quit.""" + print_error(error_msg) + if ask(' Try again?'): + return True + if not ask(' Use local version?'): + abort() + return False + + # Bail early + if not SDIO_SERVER['Address']: + return sdio_path + + # Main loop + while True: + try: + proc = _mount_server() + except KeyboardInterrupt: + break + except MOUNT_EXCEPTIONS as err: + if not (interactive and _try_again(f' ERROR: {err}')): + break + else: + if proc.returncode == 0: + # Network copy available + use_network = True + break + + # Failed to mount + if not (interactive and _try_again(' Failed to mount server')): + break + + # Done + if use_network: + sdio_path = SDIO_REMOTE_PATH + return sdio_path + + def run_tool( folder, name, *run_args, cbin=False, cwd=False, download=False, popen=False, diff --git a/scripts/wk/setup/win.py b/scripts/wk/setup/win.py index 92551f04..6440ffd5 100644 --- a/scripts/wk/setup/win.py +++ b/scripts/wk/setup/win.py @@ -32,6 +32,7 @@ from wk.kit.tools import ( extract_archive, extract_tool, find_kit_dir, + get_sdio_path, get_tool_path, run_tool, ) @@ -1098,7 +1099,10 @@ def open_microsoft_store_updates() -> None: def open_snappy_driver_installer_origin() -> None: """Open Snappy Driver Installer Origin.""" - run_tool('SDIO', 'SDIO', cwd=True, pipe=True, popen=True) + sdio_path = get_sdio_path(interactive=False) + log_dir = format_log_path(tool=True).parent + cmd = [sdio_path, '-log_dir', log_dir] + popen_program(cmd, check=False, cwd=sdio_path.parent) def open_windows_activation() -> None: diff --git a/setup/windows/bin/SDIO/sdio.cfg b/setup/windows/bin/SDIO/sdio.cfg index 7c830b93..38e7d8be 100644 --- a/setup/windows/bin/SDIO/sdio.cfg +++ b/setup/windows/bin/SDIO/sdio.cfg @@ -9,7 +9,7 @@ "-finish_upd_cmd:" "-lang:English" -"-theme:Coax" +"-theme:Dark" -hintdelay:250 -license:1 -scale:256