2026-07-10 20:57:31 +08:00
|
|
|
import sys
|
|
|
|
|
import argparse
|
|
|
|
|
import logging
|
2026-07-10 23:27:21 +08:00
|
|
|
|
2026-07-10 20:57:31 +08:00
|
|
|
from app import Launcher
|
|
|
|
|
import tkinter as tk
|
|
|
|
|
|
2026-07-10 23:27:21 +08:00
|
|
|
from core_lib.log.default import DEFAULT_FORMAT, DEFAULT_DATE_FORMAT, get_colorful_handler
|
|
|
|
|
|
2026-07-10 20:57:31 +08:00
|
|
|
|
|
|
|
|
def select_mode() -> None | str:
|
|
|
|
|
value = None
|
|
|
|
|
|
|
|
|
|
def get_value(root: tk.Tk, listbox_obj: tk.Listbox):
|
|
|
|
|
nonlocal value
|
|
|
|
|
value = listbox.get(listbox_obj.curselection()[0]) if listbox_obj.curselection() else None
|
|
|
|
|
root.destroy()
|
|
|
|
|
|
|
|
|
|
support_list = ["full", "lightweight"]
|
|
|
|
|
|
|
|
|
|
r = tk.Tk()
|
|
|
|
|
r.title("TestLauncher")
|
|
|
|
|
r.geometry("300x300")
|
|
|
|
|
|
|
|
|
|
label = tk.Label(r, text="Select a mode to continue")
|
|
|
|
|
label.pack(anchor="n")
|
|
|
|
|
|
|
|
|
|
listbox = tk.Listbox(r, selectmode=tk.SINGLE)
|
|
|
|
|
listbox.pack(expand=True, fill="both")
|
|
|
|
|
listbox.bind("<Double-Button-1>", lambda e: get_value(r, listbox))
|
|
|
|
|
|
|
|
|
|
for support in support_list:
|
|
|
|
|
listbox.insert(tk.END, support)
|
|
|
|
|
|
|
|
|
|
listbox.selection_set(0)
|
|
|
|
|
|
|
|
|
|
# move to center
|
|
|
|
|
r.eval('tk::PlaceWindow . center')
|
|
|
|
|
|
|
|
|
|
r.mainloop()
|
|
|
|
|
|
|
|
|
|
return value
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def tui_entry():
|
|
|
|
|
logger = logging.getLogger("TestLauncher.Tui")
|
|
|
|
|
logger.info("Wow tui is unfinished")
|
|
|
|
|
|
|
|
|
|
def main():
|
2026-07-10 23:27:21 +08:00
|
|
|
root_logger = logging.getLogger()
|
2026-07-10 20:57:31 +08:00
|
|
|
logger = logging.getLogger("Launcher.Main")
|
|
|
|
|
|
2026-07-10 23:27:21 +08:00
|
|
|
# parse arguments
|
2026-07-10 20:57:31 +08:00
|
|
|
parser = argparse.ArgumentParser()
|
|
|
|
|
parser.add_argument("-m", "--mode", choices=['lightweight', 'full', 'choice'], default='choice',
|
|
|
|
|
help="Select mode (lightweight for tui, full is gui,"
|
|
|
|
|
"choice for a mode select window)", required=False)
|
2026-07-10 23:27:21 +08:00
|
|
|
parser.add_argument("-d", "--debug", action="store_true",
|
|
|
|
|
help="Enable debug mode", default=False)
|
2026-07-10 20:57:31 +08:00
|
|
|
|
|
|
|
|
args, unknown = parser.parse_known_args()
|
|
|
|
|
for arg in unknown:
|
2026-07-10 23:27:21 +08:00
|
|
|
logger.warning("Unknown argument '%s'" % arg)
|
2026-07-10 20:57:31 +08:00
|
|
|
|
2026-07-10 23:27:21 +08:00
|
|
|
# args value set
|
2026-07-10 20:57:31 +08:00
|
|
|
if not hasattr(args, "mode") or args.mode == "choice":
|
|
|
|
|
mode = select_mode()
|
|
|
|
|
|
|
|
|
|
if mode is None:
|
2026-07-10 23:27:21 +08:00
|
|
|
logger.warning("No mode selected. Exiting...")
|
2026-07-10 20:57:31 +08:00
|
|
|
sys.exit(0)
|
|
|
|
|
else:
|
|
|
|
|
mode = args.mode
|
|
|
|
|
|
2026-07-10 23:27:21 +08:00
|
|
|
debug = args.debug
|
|
|
|
|
|
|
|
|
|
# Init lib
|
|
|
|
|
level = logging.DEBUG if debug else logging.INFO
|
|
|
|
|
|
|
|
|
|
# Set root logger level and configure handler for colorful log (not sure why I added this)
|
|
|
|
|
root_logger.setLevel(level)
|
|
|
|
|
root_logger.addHandler(get_colorful_handler())
|
|
|
|
|
|
|
|
|
|
# Logger configure
|
|
|
|
|
logging.basicConfig(format=DEFAULT_FORMAT, datefmt=DEFAULT_DATE_FORMAT, level=level)
|
|
|
|
|
|
|
|
|
|
# Start (the real) launcher
|
2026-07-10 20:57:31 +08:00
|
|
|
if mode == 'lightweight':
|
|
|
|
|
sys.exit(tui_entry())
|
|
|
|
|
elif mode == 'full':
|
|
|
|
|
app = Launcher()
|
|
|
|
|
sys.exit(app.exec())
|
|
|
|
|
else:
|
|
|
|
|
logger.error("Unknown mode '%s'" % mode)
|
|
|
|
|
sys.exit(1)
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
|
main()
|