Refactor SDIO sections

* Use the same code paths for the launcher and AutoSetup
* Local copy now has a different theme to differentiate
This commit is contained in:
2Shirt 2023-11-11 17:45:28 -08:00
parent 5bc29b1e6e
commit 3f090ee968
Signed by: 2Shirt
GPG key ID: 152FAC923B0E132C
4 changed files with 67 additions and 82 deletions

View file

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

View file

@ -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,

View file

@ -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:

View file

@ -9,7 +9,7 @@
"-finish_upd_cmd:"
"-lang:English"
"-theme:Coax"
"-theme:Dark"
-hintdelay:250
-license:1
-scale:256