Files
Launcher/main.py
T

79 lines
2.9 KiB
Python
Raw Normal View History

# Nuitka build configuration. The output mode is selected on the command line
# so the same configuration can be used for both standalone and onefile builds.
# nuitka-project: --enable-plugin=pyside6
# nuitka-project: --include-data-dir={MAIN_DIRECTORY}/resources=resources
# nuitka-project: --output-dir={MAIN_DIRECTORY}/build
# nuitka-project: --output-filename=TestLauncher
# nuitka-project: --product-name=TestLauncher
# nuitka-project: --file-description=TestLauncher Minecraft Launcher
# nuitka-project: --copyright=Copyright (c) wei
# nuitka-project: --assume-yes-for-downloads
# nuitka-project-if: {OS} == "Windows":
# nuitka-project: --windows-console-mode=disable
# nuitka-project: --windows-icon-from-ico={MAIN_DIRECTORY}/resources/icons/icon.png
import os
2026-07-10 20:57:31 +08:00
import sys
import argparse
import logging
from PySide6.QtWidgets import QApplication, QMainWindow
2026-07-10 20:57:31 +08:00
from app import Launcher
2026-07-10 23:27:21 +08:00
from core_lib.log.default import DEFAULT_FORMAT, DEFAULT_DATE_FORMAT, get_colorful_handler
from core_lib.qt import messagebox
2026-07-10 20:57:31 +08:00
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',
2026-08-03 00:40:16 +08:00
help="Select a mode (lightweight for TUI, full for GUI, or choice to open a mode-selection window). "
"TUI is not implemented yet.", required=False)
2026-07-10 23:27:21 +08:00
parser.add_argument("-d", "--debug", action="store_true",
help="Enable debug mode", default=False)
parser.add_argument("-wd", "--work-dir", default=os.getcwd(), help="Work directory")
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
debug = args.debug
# check workdir
if not os.path.exists(args.work_dir) or not os.path.isdir(args.work_dir):
app = QApplication(sys.argv)
app.setApplicationName("Launcher Bootstrapper")
window = QMainWindow()
messagebox.error(window, "Error", f"Specified work directory \"{args.work_dir}\" does not exist or"
2026-07-14 01:13:36 +08:00
" is not a directory.")
logger.error("Work directory '%s' does not exist. Exiting..." % args.work_dir)
app.exit()
sys.exit(-1)
if os.getcwd() != args.work_dir:
os.chdir(args.work_dir)
logger.info("Current working directory is {}".format(args.work_dir))
2026-07-10 23:27:21 +08:00
# 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
app = Launcher(logger, debug=debug)
2026-07-14 01:13:36 +08:00
sys.exit(app.exec())
2026-07-10 20:57:31 +08:00
2026-07-10 20:57:31 +08:00
if __name__ == '__main__':
main()