From 7293c02bc46c920efade5a0ac800eaeea09fb49f Mon Sep 17 00:00:00 2001 From: Peery Date: Thu, 14 Dec 2023 17:24:55 +0100 Subject: [PATCH] Windows path fixes Fixed path handling because Qt still uses "/" on windows but python's os module does not. Also added dialogs when no game path is set and the selection is cancelled (also fixed a loop with that) --- ModManager.py | 29 +++++++++++++++++++------ files/__init__.py | 0 files/settings.py | 0 main.py | 0 window/__init__.py | 0 window/main_window.py | 4 ++++ window/mod_manager_window_export.py | 0 window/pyqt_files/mod_manager_window.ui | 0 8 files changed, 26 insertions(+), 7 deletions(-) mode change 100644 => 100755 ModManager.py mode change 100644 => 100755 files/__init__.py mode change 100644 => 100755 files/settings.py mode change 100644 => 100755 main.py mode change 100644 => 100755 window/__init__.py mode change 100644 => 100755 window/main_window.py mode change 100644 => 100755 window/mod_manager_window_export.py mode change 100644 => 100755 window/pyqt_files/mod_manager_window.ui diff --git a/ModManager.py b/ModManager.py old mode 100644 new mode 100755 index 7c57fe3..c6ecf75 --- a/ModManager.py +++ b/ModManager.py @@ -9,6 +9,7 @@ import tempfile from typing import Tuple, List from zipfile import ZipFile +from PyQt6 import QtWidgets from PyQt6.QtWidgets import QApplication from files.settings import LCSettings @@ -34,8 +35,22 @@ class ModManager: self.available_mods = dict() self.installed_mods = dict() - while self.__settings.get_game_folder() is None: + if self.__settings.get_game_folder() is None: + dialog = QtWidgets.QMessageBox() + dialog.setWindowTitle("No Game folder") + dialog.setInformativeText(f"The mod manager requires the path to your Lethal Company game folder!\n" + "Please choose it in the following window.") + dialog.setIcon(QtWidgets.QMessageBox.Icon.Information) + dialog.exec() self.__window.on_action_set_game_folder() + if self.__settings.get_game_folder() is None: + dialog = QtWidgets.QMessageBox() + dialog.setWindowTitle("No Game folder") + dialog.setInformativeText(f"Can't do anything without a valid game folder path.\nExiting!") + dialog.setIcon(QtWidgets.QMessageBox.Icon.Information) + dialog.exec() + self.__app.exit(0) + sys.exit(0) self.create_manager_folder() self.index_stored_mods() @@ -71,9 +86,6 @@ class ModManager: if not os.path.isdir(manager_folder): self.__logger.debug(f"Creating folder: {manager_folder}") os.mkdir(manager_folder) - else: - self.__window.on_action_set_game_folder() - self.create_manager_folder() def is_folder_valid_game_folder(self, dir_path: str) -> bool: req_files = ["Lethal Company.exe", "doorstop_config.ini"] @@ -232,7 +244,8 @@ class ModManager: unresolved_files = files.copy() for file in files: for mod in self.installed_mods.keys(): - if file[len(self.__settings.get_game_folder())+1:] in self.installed_mods[mod]["mod_files"]: + file_rel = file[len(self.__settings.get_game_folder())+1:] + if file_rel.replace(os.path.sep, "/") in self.installed_mods[mod]["mod_files"]: unresolved_files.remove(file) if file in unresolved_files: unknown_mod[os.path.basename(file)] = {"mod_files": [file]} @@ -327,10 +340,12 @@ class ModManager: continue #print("Moving", os.path.join(tmp_dir, content), "to", # os.path.join(self.__settings.get_game_folder(), file)) - parent_dir = os.path.join(self.__settings.get_game_folder(), file).split(os.path.basename(file))[0] + parent_dir = os.path.join(self.__settings.get_game_folder().replace("/", os.path.sep), + file.replace("/", os.path.sep)).split(file.replace("/", os.path.sep))[0] if not os.path.exists(parent_dir): os.mkdir(parent_dir) - shutil.move(os.path.join(tmp_dir, content), os.path.join(self.__settings.get_game_folder(), file)) + if not os.path.exists(os.path.join(self.__settings.get_game_folder().replace("/", os.path.sep), file.replace("/", os.path.sep))): + shutil.move(os.path.join(tmp_dir, content.replace("/", os.path.sep)), os.path.join(self.__settings.get_game_folder().replace("/", os.path.sep), file.replace("/", os.path.sep))) self.index_installed_mods() def uninstall_mod(self, mod_name: str): diff --git a/files/__init__.py b/files/__init__.py old mode 100644 new mode 100755 diff --git a/files/settings.py b/files/settings.py old mode 100644 new mode 100755 diff --git a/main.py b/main.py old mode 100644 new mode 100755 diff --git a/window/__init__.py b/window/__init__.py old mode 100644 new mode 100755 diff --git a/window/main_window.py b/window/main_window.py old mode 100644 new mode 100755 index 408c552..3b27a0c --- a/window/main_window.py +++ b/window/main_window.py @@ -127,7 +127,9 @@ class MainWindow(QtWidgets.QMainWindow): result = dialog.getExistingDirectory() dir_accepted = self.parent.set_game_folder(result) + attempt = 0 while not dir_accepted: + attempt += 1 dialog = QtWidgets.QMessageBox() dialog.setWindowTitle("Invalid game path") dialog.setInformativeText(f"The given path \"{result}\" did not look like the Lethal Company game folder!\n" @@ -141,6 +143,8 @@ class MainWindow(QtWidgets.QMainWindow): result = dialog.getExistingDirectory() dir_accepted = self.parent.set_game_folder(result) + if attempt > 2: + return def on_action_remove_all_files(self): self.__logger.debug("Action: \"remove all manager files\" triggered!") diff --git a/window/mod_manager_window_export.py b/window/mod_manager_window_export.py old mode 100644 new mode 100755 diff --git a/window/pyqt_files/mod_manager_window.ui b/window/pyqt_files/mod_manager_window.ui old mode 100644 new mode 100755