injectorHub/ui/win.py

140 lines
4.3 KiB
Python

import shutil
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 ui import homeui
from lib import get_disk
from lib import vars
from ui.lang import load_lang, l
import sys
import getpass
import platform
import ctypes
import os
import locale
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
UPGRADE = 0
for i in sys.argv[1:]:
if (check_args(i, "--lang")):
nlang = i.split("=")[-1]
elif (check_args(i, "--dis-permission-error")):
DISPERMISSION = 1
elif (check_args(i, "--log-level")):
config.LOGLEVEL = i.split("=")[-1]
elif (check_args(i, "--debug")):
DEBUG = 1
elif (check_args(i, "--no-trace")):
NOTRACE = 1
elif (check_args(i, "--upgrade")):
UPGRADE = 1
if (nlang+".toml" not in os.listdir("lang")):
nlang = "en_us"
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 or UPGRADE == 1):
if (UPGRADE == 0):
info("[win]cannot find installed disk")
else:
info("[win]upgrade")
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()
installer.UPGRADE = 1
if (UPGRADE == 1):
if (os.path.exists("software")):
info("[win]clean install cache")
shutil.rmtree("software")
nav_list = [
{"icon": "lightning", "frame": installer.installer_ui, "side": "top"}
]
else:
vars.DISKMOUNT = root_disk
info(f"[win]found installed disk \"{root_disk}\"")
nav_list = [
{"icon": "home-filled", "frame": homeui.home_ui, "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