From c6b9f5c64f5a50004042f12070c273e9c7e72228 Mon Sep 17 00:00:00 2001 From: Stelios Tsampas Date: Thu, 8 Sep 2022 13:16:15 +0300 Subject: [PATCH] Fix shortcut creation on windows --- rare/app.py | 16 ++++++++-------- rare/utils/misc.py | 19 +++++++------------ 2 files changed, 15 insertions(+), 20 deletions(-) diff --git a/rare/app.py b/rare/app.py index 4c2887a1..ef48f817 100644 --- a/rare/app.py +++ b/rare/app.py @@ -60,18 +60,18 @@ class App(RareApp): for handler in logging.root.handlers[:]: logging.root.removeHandler(handler) - stream_handler = logging.StreamHandler(sys.stderr) - stream_handler.setFormatter(fmt=logging.Formatter("[%(name)s] %(levelname)s: %(message)s")) + file_handler = logging.FileHandler(filename=file_name, encoding="utf-8") + file_handler.setFormatter(fmt=logging.Formatter("[%(name)s] %(levelname)s: %(message)s")) # configure logging if args.debug: logging.basicConfig( format="[%(name)s] %(levelname)s: %(message)s", level=logging.DEBUG, - filename=file_name, + stream=sys.stderr, ) - stream_handler.setLevel(logging.DEBUG) - logging.root.addHandler(stream_handler) + file_handler.setLevel(logging.DEBUG) + logging.root.addHandler(file_handler) logging.getLogger().setLevel(level=logging.DEBUG) # keep requests, asyncio and pillow quiet logging.getLogger("requests").setLevel(logging.WARNING) @@ -88,10 +88,10 @@ class App(RareApp): logging.basicConfig( format="[%(name)s] %(levelname)s: %(message)s", level=logging.INFO, - filename=file_name, + stream=sys.stderr, ) - stream_handler.setLevel(logging.INFO) - logging.root.addHandler(stream_handler) + file_handler.setLevel(logging.INFO) + logging.root.addHandler(file_handler) logger.info(f"Launching Rare version {rare.__version__}") logger.info(f"Operating System: {platform.system()}") diff --git a/rare/utils/misc.py b/rare/utils/misc.py index 4599ba8d..15c563be 100644 --- a/rare/utils/misc.py +++ b/rare/utils/misc.py @@ -180,10 +180,12 @@ def get_rare_executable() -> List[str]: elif platform.system() == "Windows": executable = [sys.executable] - if not sys.executable.endswith("Rare.exe"): + if sys.executable != os.path.abspath(sys.argv[0]): + executable.append(os.path.abspath(sys.argv[0])) + + if executable[0].endswith("python.exe"): # be sure to start consoleless then executable[0] = executable[0].replace("python.exe", "pythonw.exe") - executable.extend(["-m", "rare"]) else: executable = [sys.executable] @@ -208,6 +210,7 @@ def create_desktop_link(app_name=None, core: LegendaryCore = None, type_of_link= if not os.path.exists(path): return False executable = get_rare_executable() + executable = shlex.join(executable) if for_rare: with open(os.path.join(path, "Rare.desktop"), "w") as desktop_file: @@ -274,21 +277,13 @@ def create_desktop_link(app_name=None, core: LegendaryCore = None, type_of_link= if len(executable) > 1: arguments.extend(executable[1:]) - executable = executable[0] - - if not sys.executable.endswith("Rare.exe"): - # be sure to start consoleless then - executable = sys.executable.replace("python.exe", "pythonw.exe") - arguments.append(os.path.abspath(sys.argv[0])) + executable = executable[0] if not for_rare: arguments.extend(["launch", app_name]) + shortcut.Targetpath = executable # Maybe there is a better solution, but windows does not accept single quotes (Windows is weird) - logger.warning(executable) - logger.warning(shlex.quote(executable).replace("'", '"')) - shortcut.Targetpath = shlex.quote(executable).replace("'", '"') - logger.warning(shlex.join(arguments).replace("'", '"')) shortcut.Arguments = shlex.join(arguments).replace("'", '"') if for_rare: shortcut.WorkingDirectory = QStandardPaths.writableLocation(QStandardPaths.HomeLocation)