diff --git a/.vscode/launch.json b/.vscode/launch.json index 6646939..dd3f4c0 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -9,7 +9,16 @@ "type": "debugpy", "request": "launch", "program": "main.py", + "args": "--debug", "console": "integratedTerminal" - } + }, + { + "name": "Python 包含参数", + "type": "debugpy", + "request": "launch", + "program": "main.py", + "console": "integratedTerminal", + "args": "${command:pickArgs}" + }, ] } \ No newline at end of file diff --git a/logger/logger.py b/logger/logger.py index 6ed14ba..04a9cdd 100644 --- a/logger/logger.py +++ b/logger/logger.py @@ -14,10 +14,10 @@ levels = { } -def init() -> None: +def log_init() -> None: logging.basicConfig(filename=config.LOGPATH, format='[%(asctime)s][%(levelname)s] %(message)s', - level=levels[config.LOGLEVEL]) + level=levels[config.LOGLEVEL], filemode='w') def info(msg: str) -> None: @@ -53,3 +53,7 @@ def print(*args, end="\n") -> None: if (10 >= levels[config.LOGLEVEL]): sys.stdout.write(msg + end) logging.debug(msg) + + +def trace_sys(msg: str) -> None: + logging.info(msg) diff --git a/main.py b/main.py index 99a10d6..970b071 100644 --- a/main.py +++ b/main.py @@ -1,3 +1,3 @@ from ui import win if __name__ == "__main__": - win.main() + win.run() diff --git a/ui/win.py b/ui/win.py index de485f1..da09e6c 100644 --- a/ui/win.py +++ b/ui/win.py @@ -1,6 +1,8 @@ +from doctest import debug from tkinter import messagebox from magictk import mtk from logger.logger import * +from logger import config from ui import nav from ui import installer from lib import get_disk @@ -11,48 +13,113 @@ import platform import ctypes import os import locale - -init() +import traceback +import textwrap nlang = locale.getdefaultlocale()[0].lower() + + +def check_args(arg, check): + if len(arg) >= len(check): + if (arg[:len(check)] == check): + return 1 + return 0 + + +DISPERMISSION = 0 +DEBUG = 0 +NOTRACE = 0 +for i in sys.argv[1:]: + if (check_args(i, "--lang")): + nlang = i.split("=")[-1] + if (check_args(i, "--dis-permission-error")): + DISPERMISSION = 1 + if (check_args(i, "--log-level")): + config.LOGLEVEL = i.split("=")[-1] + if (check_args(i, "--debug")): + DEBUG = 1 + if (check_args(i, "--no-trace")): + NOTRACE = 1 if (nlang+".toml" not in os.listdir("lang")): nlang = "en_us" -load_lang(nlang) - -disk_res = get_disk.find_hub_disk() -errno = disk_res[0] -root_disk = disk_res[1] -if (errno == 1): - messagebox.showerror("Injector Hub Error", root_disk) - sys.exit(1) -elif (errno == 2): - info("[win]cannot find installed disk") - if (platform.system() == "Linux" and getpass.getuser() != "root"): - messagebox.showerror("Injector Hub Error", l("PermissionDeniedLinux")) - sys.exit(1) - if (platform.system() == "Windows" and ctypes.windll.shell32.IsUserAnAdmin() == False): - messagebox.showerror("Injector Hub Error", l("PermissionDeniedWin")) - nav_list = [ - {"icon": "lightning", "frame": installer.installer_ui, "side": "top"} - ] -else: - info(f"[win]found installed disk \"{root_disk}\"") - nav_list = [ - {"icon": "home-filled", "frame": None, "side": "top"}, - {"icon": "dvd", "frame": None, "side": "top"}, - {"icon": "plugin", "frame": None, "side": "top"}, - {"icon": "setting", "frame": None, "side": "bottom"} - ] - -info("[win]init window") -mtk.load_icon_pack("res/icon.pack") -main_win = mtk.Tk(title="Injector Hub", w=1000, h=800) - -main_frame = mtk.Frame(main_win, w=10000) -nav.pack_nav(main_win, main_frame, nav_list) -main_frame.pack(side="left", fill="both", expand=True) def main(): + log_init() + if (DEBUG == 1): + info("[win]< debug mode >") + + if (NOTRACE == 0): + info("[trace]open trace") + trace_sys(f"[trace]OS={platform.system()}") + trace_sys(f"[trace]VER={platform.version()}") + trace_sys(f"[trace]CPU={platform.processor()}") + trace_sys(f"[trace]ARCH={str(platform.architecture()[0])}") + trace_sys(f"[trace]PYVER={platform.python_version()}") + trace_sys(f"[trace]PYIMP={platform.python_implementation()}") + load_lang(nlang) + + disk_res = get_disk.find_hub_disk() + errno = disk_res[0] + root_disk = disk_res[1] + if (errno == 1): + messagebox.showerror("Injector Hub Error", root_disk) + sys.exit(1) + elif (errno == 2): + info("[win]cannot find installed disk") + if DISPERMISSION == 0: + if (platform.system() == "Linux" and getpass.getuser() != "root"): + err("permission denied in linux") + messagebox.showerror("Injector Hub Error", + l("PermissionDeniedLinux")) + if (DEBUG == 0): + sys.exit(1) + else: + sys.exit() + if (platform.system() == "Windows" and ctypes.windll.shell32.IsUserAnAdmin() == False): + err("permission denied in windows") + messagebox.showerror("Injector Hub Error", + l("PermissionDeniedWin")) + if (DEBUG == 0): + sys.exit(1) + else: + sys.exit() + nav_list = [ + {"icon": "lightning", "frame": installer.installer_ui, "side": "top"} + ] + else: + info(f"[win]found installed disk \"{root_disk}\"") + nav_list = [ + {"icon": "home-filled", "frame": None, "side": "top"}, + {"icon": "dvd", "frame": None, "side": "top"}, + {"icon": "plugin", "frame": None, "side": "top"}, + {"icon": "setting", "frame": None, "side": "bottom"} + ] + + info("[win]init window") + mtk.load_icon_pack("res/icon.pack") + main_win = mtk.Tk(title="Injector Hub", w=1000, h=800) + + main_frame = mtk.Frame(main_win, w=10000) + nav.pack_nav(main_win, main_frame, nav_list) + main_frame.pack(side="left", fill="both", expand=True) + info("[win]mainloop") main_win.mainloop() + + +def run(): + try: + main() + except Exception as exp: + err("[errtrace] caught err:"+repr(exp)) + for i in traceback.format_exc().split("\n"): + firstlen_flag = "* " + lastlen = "" + for j in textwrap.wrap(i, width=40): + err("[errtrace]"+" "+firstlen_flag+" " * + (len(lastlen)-len(lastlen.lstrip()))+j) + lastlen = " " * (len(lastlen)-len(lastlen.lstrip()))+j + firstlen_flag = " " + if (DEBUG == 1): + raise