221 lines
7.4 KiB
Python
221 lines
7.4 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 ui import injectimg
|
|
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
|
|
DEVICE = ""
|
|
SHOW_VERSION = 0
|
|
for i in sys.argv[1:]:
|
|
if (check_args(i, "/?") or check_args(i, "--help")):
|
|
print(""" injector Hub
|
|
|
|
Usage: hub [options]
|
|
|
|
Options:
|
|
--help Show this help info and exit
|
|
--version, -V Get hub version
|
|
--lang=<zh_cn/en_us> Set language
|
|
--install, -I Install PEinjector
|
|
--upgrade, -U Upgrade PEinjector
|
|
--device, -D Set device (mount path)
|
|
--clean Clean download cache
|
|
--show-all-img Show all images in inject page
|
|
|
|
Debug Options:
|
|
--debug Open debug mode (raise all errors)
|
|
--dis-permission-error Do not show permission error
|
|
--log-level=<level> Set log level (debug,info,warning,err)
|
|
--no-trace Do not trace OS version
|
|
""")
|
|
sys.exit()
|
|
elif (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") or check_args(i, "-U")):
|
|
UPGRADE = 1
|
|
elif (check_args(i, "--install") or check_args(i, "-I")):
|
|
UPGRADE = 2
|
|
elif (check_args(i, "--show-all-img")):
|
|
vars.SHOWALLIMAGE = True
|
|
elif (check_args(i, "--device") or check_args(i, "-D")):
|
|
DEVICE = i.split("=")[-1]
|
|
elif (check_args(i, "--clean")):
|
|
if (os.path.exists("software")):
|
|
info("[win]clean install cache")
|
|
shutil.rmtree("software")
|
|
sys.exit()
|
|
elif (check_args(i, "--version") or check_args(i, "-V")):
|
|
SHOW_VERSION = 1
|
|
else:
|
|
print("Unknown Command: \""+i+"\"\nUse Command \"--help\" to get info")
|
|
sys.exit(128)
|
|
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]
|
|
if (DEVICE == ""):
|
|
root_disk = disk_res[1]
|
|
else:
|
|
root_disk = DEVICE
|
|
if (errno == 1):
|
|
messagebox.showerror("Injector Hub Error", root_disk)
|
|
sys.exit(1)
|
|
if (SHOW_VERSION == 1):
|
|
with open("VERSION", 'r') as file:
|
|
ver = file.read()
|
|
print(f" injector Hub \n\nHub Version: "+ver)
|
|
if (DEVICE == "" and errno == 2):
|
|
print("PEinjector Version: Not Found")
|
|
elif not (os.path.exists(root_disk+os.sep+"PEinjector"+os.sep+"VERSION")):
|
|
print("PEinjector Version: Not Found")
|
|
else:
|
|
with open(root_disk+os.sep+"PEinjector"+os.sep+"VERSION", 'r') as file:
|
|
pver = file.read()
|
|
print("PEinjector Version: "+pver)
|
|
sys.exit()
|
|
if (errno == 2 or UPGRADE == 1 or UPGRADE == 2):
|
|
if (UPGRADE == 1):
|
|
installer.UPGRADE = 1
|
|
else:
|
|
installer.UPGRADE = 0
|
|
if (UPGRADE == 0):
|
|
info("[win]cannot find installed disk")
|
|
elif (UPGRADE == 1):
|
|
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()
|
|
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": injectimg.inject_ui, "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)
|
|
|
|
def exp_callback(*args):
|
|
err("[errtrace]caught err from tkinter:"+repr(args[1]))
|
|
for i in [i.replace("\n", "")
|
|
for i in traceback.format_exception(args[0], args[1], args[2])]:
|
|
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
|
|
else:
|
|
messagebox.showerror("Injector Hub Error",
|
|
l("FeedbackInfoSpecial"))
|
|
main_win.main_tk.report_callback_exception = exp_callback
|
|
|
|
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
|
|
else:
|
|
messagebox.showerror("Injector Hub Error",
|
|
l("FeedbackInfo"))
|