import json from pathlib import Path from subprocess import PIPE, STDOUT, Popen import webview config_path = Path("launcher.json") try: with config_path.open("r") as f: config = json.load(f) except Exception: config = { "page": "init", "branch": "slow", } def custom_event(data): data = json.dumps({"log": data}) js = f"var event = new CustomEvent('log', {{detail: {data}}}); window.dispatchEvent(event);" window.evaluate_js(js) command_list = { "lfs": "git\\bin\\git lfs install", "ensurepip": "python\\python -m ensurepip --default-pip --no-warn-script-location", "clone": "git\\bin\\git clone https://git.zhaozuohong.vip/mower-ng/mower-ng.git --branch slow", "fetch": "..\\git\\bin\\git fetch", "switch_fast": "..\\git\\bin\\git switch -f fast", "switch_slow": "..\\git\\bin\\git switch -f slow", "reset_fast": "..\\git\\bin\\git reset --hard origin/fast", "reset_slow": "..\\git\\bin\\git reset --hard origin/slow", "pip_install": "..\\python\\Scripts\\pip install -i https://mirror.sjtu.edu.cn/pypi/web/simple -r requirements.txt --no-warn-script-location", "webview": "start ..\\python\\pythonw webview_ui.py", "manager": "start ..\\python\\pythonw manager.py", } class Api: def get_branch(self): return config["branch"] def set_branch(self, branch): config["branch"] = branch def get_page(self): return config["page"] def set_page(self, page): config["page"] = page def run(self, command, cwd=None): command = command_list[command] custom_event(command + "\n") with Popen( command, stdout=PIPE, stderr=STDOUT, shell=True, bufsize=1, text=True, cwd=cwd, ) as p: for line in p.stdout: custom_event(line) window = webview.create_window("mower-ng launcher", "dist/index.html", js_api=Api()) webview.start() with config_path.open("w") as f: json.dump(config, f)