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(name, data): data = json.dumps({name: data}) js = f"var event = new CustomEvent('log', {{detail: {data}}}); window.dispatchEvent(event);" window.evaluate_js(js) command_list = { "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", "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): with Popen( command_list[command], stdout=PIPE, stderr=STDOUT, shell=True, bufsize=1, text=True, cwd=cwd, ) as p: for line in p.stdout: custom_event("log", 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)