diff --git a/src/form.ui b/src/form.ui index f704eea..1bd6bed 100644 --- a/src/form.ui +++ b/src/form.ui @@ -33,9 +33,9 @@ Qt::ContextMenuPolicy::ActionsContextMenu - - - + + + true @@ -58,7 +58,7 @@ QTabWidget::TabShape::Rounded - 0 + 1 false @@ -420,10 +420,7 @@ - - - false - + :/assets/chest.png:/assets/chest.png @@ -431,14 +428,39 @@ Instances Lists - + - - - false - - - + + + + + + 24 + true + false + + + + QFrame::Shape::NoFrame + + + + 30 + 30 + + + + QListView::ResizeMode::Fixed + + + Qt::AlignmentFlag::AlignCenter + + + Qt::DropAction::ActionMask + + + + diff --git a/src/lce_qt_launcher/features.py b/src/lce_qt_launcher/features.py index 3f6c034..e20cc07 100644 --- a/src/lce_qt_launcher/features.py +++ b/src/lce_qt_launcher/features.py @@ -14,8 +14,10 @@ from PySide6.QtWidgets import ( from lce_qt_launcher.app_context import AppContext from lce_qt_launcher.build_info import BuildInfo +from lce_qt_launcher.managers import import_managers from lce_qt_launcher.managers.instance_manager import Instance, InstanceManager from lce_qt_launcher.managers.system_manager import SystemManager +from lce_qt_launcher.models.app_data import AppData from lce_qt_launcher.models.preferences import UserPref from lce_qt_launcher.ui_settingDialog import Ui_settingDialog from lce_qt_launcher.views.browser_dialog import BrowserDialog @@ -82,13 +84,14 @@ def show_instance_editor(parent : QWidget) -> None: """Features : Open the Instance Editor""" parent.instance_window.show() -def load_instance(parent : QWidget, instanceManager : InstanceManager, appContext: AppContext, buildInfo : BuildInfo) -> None: +def load_instance(parent : QWidget, instanceManager : InstanceManager, appContext: AppContext, buildInfo : BuildInfo, appData : AppData) -> None: """Features : Load the Selected Instance""" file_name: tuple[str, str] = QFileDialog.getOpenFileName( parent, "Load Instance File", appContext.sys_man.found_default_save_path(), f"{buildInfo.app_name} Instance (*{buildInfo.instance_extension})") instanceManager.load_instance(file_name[0]) + import_managers.import_inst_file_to_app_data(file_name[0], appData) def show_about_qt(parent : QWidget) -> None: """Features : Load the Selected Instance""" diff --git a/src/lce_qt_launcher/managers/import_managers.py b/src/lce_qt_launcher/managers/import_managers.py new file mode 100644 index 0000000..6ed6550 --- /dev/null +++ b/src/lce_qt_launcher/managers/import_managers.py @@ -0,0 +1,12 @@ +from lce_qt_launcher.models.app_data import AppData + +from pathlib import Path + +import os + +def import_inst_file_to_app_data(instance_file_path : str, appData : AppData, filename : str = ""): + if filename == "": + filename_Path = Path(f"{instance_file_path}") + filename = filename_Path.name + destinations = os.path.join(appData.appDataDirs[0], "instances", filename) + os.symlink(instance_file_path, destinations) \ No newline at end of file diff --git a/src/lce_qt_launcher/models/app_data.py b/src/lce_qt_launcher/models/app_data.py index 3c911f7..9ea050d 100644 --- a/src/lce_qt_launcher/models/app_data.py +++ b/src/lce_qt_launcher/models/app_data.py @@ -9,6 +9,8 @@ from pathlib import Path import json import os +from lce_qt_launcher.views import term_service + def _is_compiled() -> bool: return "__compiled__" in globals() @@ -37,7 +39,15 @@ class AppData(QObject): #TODO : docstring """ defaults_insts_dir : Path = Path(os.path.join(self.appDataDirs[0], "instances")) + print(defaults_insts_dir) if not defaults_insts_dir.exists(): + term_service.print_information(f"{defaults_insts_dir} did not exist. Trying to recreate it.") + try: + os.makedirs(defaults_insts_dir) + except OSError: + term_service.print_error("An OS error have occured : {OSError}") + except RuntimeError: + term_service.print_error("An une error have occured : {RuntineError}") return instancesLists : list[Instance] = [] for file_path in defaults_insts_dir.iterdir(): @@ -49,7 +59,9 @@ class AppData(QObject): new_inst.load_inst_from_dict(context_dict) instancesLists.append(new_inst) except (json.JSONDecodeError, OSError, ValueError): - continue + term_service.print_error(f"Cannot decode JSON {OSError} {ValueError} {json.JSONDecodeError}") + else: + term_service.print_information(f"{file_path} was not a file.") self.instsList = instancesLists def _get_source_dir(self) -> str: @@ -98,7 +110,7 @@ class AppData(QObject): Returns: str: _description_ """ - dirs: PlatformDirs = PlatformDirs("Xgui4", "LCE-Qt-Launcher") + dirs: PlatformDirs = PlatformDirs("LCE-Qt-Launcher", "Xgui4") return dirs.user_data_dir def _get_site_app_data_dir(self) -> str: @@ -107,7 +119,7 @@ class AppData(QObject): Returns: str: _description_ """ - dirs: PlatformDirs = PlatformDirs("Xgui4", "LCE-Qt-Launcher") + dirs: PlatformDirs = PlatformDirs("LCE-Qt-Launcher", "Xgui4") return dirs.site_data_dir def _get_app_cache_dir(self) -> str: @@ -116,7 +128,7 @@ class AppData(QObject): Returns: str: _description_ """ - dirs: PlatformDirs = PlatformDirs("Xgui4", "LCE-Qt-Launcher") + dirs: PlatformDirs = PlatformDirs("LCE-Qt-Launcher", "Xgui4") return dirs.user_cache_dir def _get_app_log_dir(self) -> str: @@ -125,7 +137,7 @@ class AppData(QObject): Returns: str: _description_ """ - dirs: PlatformDirs = PlatformDirs("Xgui4", "LCE-Qt-Launcher") + dirs: PlatformDirs = PlatformDirs("LCE-Qt-Launcher", "Xgui4") return dirs.user_log_dir def _get_app_config_dir(self) -> str: @@ -134,5 +146,5 @@ class AppData(QObject): Returns: str: _description_ """ - dirs: PlatformDirs = PlatformDirs("Xgui4", "LCE-Qt-Launcher") + dirs: PlatformDirs = PlatformDirs("LCE-Qt-Launcher", "Xgui4") return dirs.user_config_dir \ No newline at end of file diff --git a/src/lce_qt_launcher/views/launcher.py b/src/lce_qt_launcher/views/launcher.py index 2ebf184..01f540c 100644 --- a/src/lce_qt_launcher/views/launcher.py +++ b/src/lce_qt_launcher/views/launcher.py @@ -2,15 +2,17 @@ from PySide6.QtWidgets import ( QApplication, QMainWindow, QLabel, - QDialog + QDialog, + QListWidgetItem ) from PySide6.QtGui import ( QPalette, - QPixmap, + QPixmap, QBrush ) from PySide6.QtCore import ( - qVersion + qVersion, + Qt ) import sys @@ -22,7 +24,7 @@ from pathlib import Path from lce_qt_launcher.managers.system_manager import SystemManager from lce_qt_launcher.app_context import AppContext -from lce_qt_launcher.managers.instance_manager import InstanceManager +from lce_qt_launcher.managers.instance_manager import Instance, InstanceManager from lce_qt_launcher.build_info import BuildInfo from lce_qt_launcher.models.app_data import AppData from lce_qt_launcher.ui_about import Ui_AboutDialog @@ -118,7 +120,7 @@ class Launcher(QMainWindow): def load_instance() -> None: """_summary_ Open the Load Save File Dialog """ - features.load_instance(self, instanceManager, appContext, buildInfo) + features.load_instance(self, instanceManager, appContext, buildInfo, appData) self.image_label = instanceManager.instance.image self.news_feed = instanceManager.instance.news_feed self.instance_name = instanceManager.instance.name @@ -128,7 +130,7 @@ class Launcher(QMainWindow): pixmap = QPixmap(self.image_label) self.ui.instance_img.setPixmap(pixmap) self.ui.repo_name_branch.setText(self.instance_name) - self.ui.newsEngineView.setUrl(self.news_feed) + self.ui.newsEngineView.setUrl(self.news_feed) def show_setting_dialog() -> None: """_summary_ Show the setting Dialog @@ -264,7 +266,15 @@ class Launcher(QMainWindow): open_github_issues = lambda : webbrowser.open(appContext.buildInfo.git_repo_url + "/issues") _ = self.ui.actionReport_a_Bugs_or_Sugess_a_feature.triggered.connect(open_github_issues) - self.ui.InstancesListTabMasterLayout + instances : list[Instance] = list() + + for inst in appData.instsList: + instances.append(inst) + item = QListWidgetItem() + item.setText(inst.name) + item.setIcon(QPixmap(inst.image)) + item.setData(Qt.ItemDataRole.FileInfoRole, inst) + self.ui.listWidget.addItem(item) self.versionlabel: QLabel = QLabel(f"Version {buildInfo.version}") self.ui.statusbar.addPermanentWidget(self.versionlabel)