1
0
Fork 0
mirror of synced 2024-06-26 18:20:50 +12:00

Fix shortcut creation on windows

This commit is contained in:
Stelios Tsampas 2022-09-08 13:16:15 +03:00
parent 7ebeee0d1e
commit c6b9f5c64f
2 changed files with 15 additions and 20 deletions

View file

@ -60,18 +60,18 @@ class App(RareApp):
for handler in logging.root.handlers[:]: for handler in logging.root.handlers[:]:
logging.root.removeHandler(handler) logging.root.removeHandler(handler)
stream_handler = logging.StreamHandler(sys.stderr) file_handler = logging.FileHandler(filename=file_name, encoding="utf-8")
stream_handler.setFormatter(fmt=logging.Formatter("[%(name)s] %(levelname)s: %(message)s")) file_handler.setFormatter(fmt=logging.Formatter("[%(name)s] %(levelname)s: %(message)s"))
# configure logging # configure logging
if args.debug: if args.debug:
logging.basicConfig( logging.basicConfig(
format="[%(name)s] %(levelname)s: %(message)s", format="[%(name)s] %(levelname)s: %(message)s",
level=logging.DEBUG, level=logging.DEBUG,
filename=file_name, stream=sys.stderr,
) )
stream_handler.setLevel(logging.DEBUG) file_handler.setLevel(logging.DEBUG)
logging.root.addHandler(stream_handler) logging.root.addHandler(file_handler)
logging.getLogger().setLevel(level=logging.DEBUG) logging.getLogger().setLevel(level=logging.DEBUG)
# keep requests, asyncio and pillow quiet # keep requests, asyncio and pillow quiet
logging.getLogger("requests").setLevel(logging.WARNING) logging.getLogger("requests").setLevel(logging.WARNING)
@ -88,10 +88,10 @@ class App(RareApp):
logging.basicConfig( logging.basicConfig(
format="[%(name)s] %(levelname)s: %(message)s", format="[%(name)s] %(levelname)s: %(message)s",
level=logging.INFO, level=logging.INFO,
filename=file_name, stream=sys.stderr,
) )
stream_handler.setLevel(logging.INFO) file_handler.setLevel(logging.INFO)
logging.root.addHandler(stream_handler) logging.root.addHandler(file_handler)
logger.info(f"Launching Rare version {rare.__version__}") logger.info(f"Launching Rare version {rare.__version__}")
logger.info(f"Operating System: {platform.system()}") logger.info(f"Operating System: {platform.system()}")

View file

@ -180,10 +180,12 @@ def get_rare_executable() -> List[str]:
elif platform.system() == "Windows": elif platform.system() == "Windows":
executable = [sys.executable] 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 # be sure to start consoleless then
executable[0] = executable[0].replace("python.exe", "pythonw.exe") executable[0] = executable[0].replace("python.exe", "pythonw.exe")
executable.extend(["-m", "rare"])
else: else:
executable = [sys.executable] 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): if not os.path.exists(path):
return False return False
executable = get_rare_executable() executable = get_rare_executable()
executable = shlex.join(executable)
if for_rare: if for_rare:
with open(os.path.join(path, "Rare.desktop"), "w") as desktop_file: 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: if len(executable) > 1:
arguments.extend(executable[1:]) arguments.extend(executable[1:])
executable = executable[0] 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]))
if not for_rare: if not for_rare:
arguments.extend(["launch", app_name]) arguments.extend(["launch", app_name])
shortcut.Targetpath = executable
# Maybe there is a better solution, but windows does not accept single quotes (Windows is weird) # 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("'", '"') shortcut.Arguments = shlex.join(arguments).replace("'", '"')
if for_rare: if for_rare:
shortcut.WorkingDirectory = QStandardPaths.writableLocation(QStandardPaths.HomeLocation) shortcut.WorkingDirectory = QStandardPaths.writableLocation(QStandardPaths.HomeLocation)