diff --git a/rare/components/dialogs/install_dialog.py b/rare/components/dialogs/install_dialog.py index 418de908..2e2053cf 100644 --- a/rare/components/dialogs/install_dialog.py +++ b/rare/components/dialogs/install_dialog.py @@ -114,6 +114,7 @@ class InstallDialog(QDialog, Ui_InstallDialog): self.dl_item.options.sdl_list = [''] for cb in self.sdl_list_checks: if data := cb.isChecked(): + # noinspection PyTypeChecker self.dl_item.options.sdl_list.extend(data) def get_download_info(self): diff --git a/rare/components/tabs/games/game_info/__init__.py b/rare/components/tabs/games/game_info/__init__.py index f0da5f6d..5e4aa169 100644 --- a/rare/components/tabs/games/game_info/__init__.py +++ b/rare/components/tabs/games/game_info/__init__.py @@ -1,22 +1,12 @@ -import json -import os -import platform - -from PyQt5.QtCore import Qt, pyqtSignal +from PyQt5.QtCore import Qt from PyQt5.QtGui import QKeyEvent -from PyQt5.QtWidgets import QWidget, QTabWidget, QMessageBox +from PyQt5.QtWidgets import QWidget, QTabWidget from qtawesome import icon -from legendary.core import LegendaryCore -from legendary.models.game import Game, InstalledGame -from rare import data_dir from rare.components.tabs.games.game_info.game_dlc import GameDlc +from rare.components.tabs.games.game_info.game_info import GameInfo from rare.components.tabs.games.game_info.game_settings import GameSettings -from rare.ui.components.tabs.games.game_info.game_info import Ui_GameInfo from rare.utils.extra_widgets import SideTabBar -from rare.utils.legendary_utils import VerifyThread -from rare.utils.steam_grades import SteamWorker -from rare.utils.utils import get_size, get_pixmap class InfoTabs(QTabWidget): @@ -58,113 +48,3 @@ class InfoTabs(QTabWidget): def keyPressEvent(self, e: QKeyEvent): if e.key() == Qt.Key_Escape: self.parent().layout.setCurrentIndex(0) - - -class GameInfo(QWidget, Ui_GameInfo): - igame: InstalledGame - game: Game - uninstall_game = pyqtSignal(str) - update_list = pyqtSignal(str) - verify_game = pyqtSignal(str) - verify_threads = {} - - def __init__(self, core: LegendaryCore, parent): - super(GameInfo, self).__init__(parent=parent) - self.setupUi(self) - self.core = core - - - self.ratings = {"platinum": self.tr("Platinum"), - "gold": self.tr("Gold"), - "silver": self.tr("Silver"), - "bronze": self.tr("Bronze"), - "fail": self.tr("Could not get grade"), - "pending": self.tr("Not enough reports")} - if os.path.exists(p := os.path.join(data_dir, "game_list.json")): - self.grade_table = json.load(open(p)) - else: - self.grade_table = {} - - if platform.system() == "Windows": - self.lbl_grade.setVisible(False) - self.grade.setVisible(False) - - if platform.system() != "Windows": - self.steam_worker = SteamWorker(self.core) - self.steam_worker.rating_signal.connect(self.grade.setText) - - self.game_actions_stack.setCurrentIndex(0) - self.game_actions_stack.resize(self.game_actions_stack.minimumSize()) - - self.uninstall_button.clicked.connect(self.uninstall) - self.verify_button.clicked.connect(self.verify) - self.repair_button.clicked.connect(self.repair) - - def uninstall(self): - self.uninstall_game.emit(self.game.app_name) - self.update_list.emit(self.game.app_name) - - def repair(self): - repair_file = os.path.join(self.core.lgd.get_tmp_path(), f'{self.game.app_name}.repair') - if not os.path.exists(repair_file): - QMessageBox.warning(self, "Warning", self.tr( - "Repair file does not exist or game does not need a repair. Please verify game first")) - return - self.verify_game.emit(self.game.app_name) - - def verify(self): - self.verify_widget.setCurrentIndex(1) - verify_thread = VerifyThread(self.core, self.game.app_name) - verify_thread.status.connect(self.verify_satistics) - verify_thread.summary.connect(self.finish_verify) - verify_thread.start() - self.verify_progress.setValue(0) - self.verify_threads[self.game.app_name] = verify_thread - - def verify_satistics(self, progress): - # checked, max, app_name - if progress[2] == self.game.app_name: - self.verify_progress.setValue(progress[0] * 100 / progress[1]) - - def finish_verify(self, failed): - failed, missing, app_name = failed - if failed == 0 and missing == 0: - QMessageBox.information(self, "Summary", - "Game was verified successfully. No missing or corrupt files found") - else: - ans = QMessageBox.question(self, "Summary", self.tr( - 'Verification failed, {} file(s) corrupted, {} file(s) are missing. Do you want to repair them?').format( - failed, missing), QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes) - if ans == QMessageBox.Yes: - self.verify_game.emit(self.game.app_name) - self.verify_widget.setCurrentIndex(0) - self.verify_threads.pop(app_name) - - def update_game(self, app_name): - self.game = self.core.get_game(app_name) - self.igame = self.core.get_installed_game(app_name) - self.game_title.setText(f"

{self.game.app_title}

") - - pixmap = get_pixmap(app_name) - w = 200 - pixmap = pixmap.scaled(w, int(w * 4 / 3)) - self.image.setPixmap(pixmap) - - self.app_name.setText(self.game.app_name) - self.version.setText(self.game.app_version) - self.dev.setText(self.game.metadata["developer"]) - self.install_size.setText(get_size(self.igame.install_size)) - self.install_path.setText(self.igame.install_path) - - if platform.system() != "Windows": - self.grade.setText(self.tr("Loading")) - self.steam_worker.set_app_name(app_name) - self.steam_worker.start() - - if len(self.verify_threads.keys()) == 0 or not self.verify_threads.get(app_name): - self.verify_widget.setCurrentIndex(0) - elif self.verify_threads.get(app_name): - self.verify_widget.setCurrentIndex(1) - self.verify_progress.setValue( - self.verify_threads[app_name].num / self.verify_threads[app_name].total * 100 - ) diff --git a/rare/components/tabs/games/game_info/game_dlc.py b/rare/components/tabs/games/game_info/game_dlc.py index 81bfc0bd..0225bad4 100644 --- a/rare/components/tabs/games/game_info/game_dlc.py +++ b/rare/components/tabs/games/game_info/game_dlc.py @@ -1,15 +1,11 @@ -import os - -from PyQt5.QtCore import pyqtSignal, QSettings, QSize -from PyQt5.QtGui import QPixmap +from PyQt5.QtCore import pyqtSignal from PyQt5.QtWidgets import QFrame, QWidget, QMessageBox from legendary.core import LegendaryCore from legendary.models.game import Game -from rare import data_dir -from rare.utils.utils import download_image from rare.ui.components.tabs.games.game_info.game_dlc import Ui_GameDlc from rare.ui.components.tabs.games.game_info.game_dlc_widget import Ui_GameDlcWidget +from rare.utils.utils import get_pixmap class GameDlc(QWidget, Ui_GameDlc): @@ -72,32 +68,9 @@ class GameDlcWidget(QFrame, Ui_GameDlcWidget): super(GameDlcWidget, self).__init__(parent=parent) self.setupUi(self) self.dlc = dlc - image_dir = QSettings().value("img_dir", os.path.join(data_dir, "images")) - if installed: - if os.path.exists(os.path.join(image_dir, dlc.app_name, "FinalArt.png")): - pixmap = QPixmap(os.path.join(image_dir, dlc.app_name, "FinalArt.png")) - elif os.path.exists(os.path.join(image_dir, dlc.app_name, "DieselGameBoxTall.png")): - pixmap = QPixmap(os.path.join(image_dir, dlc.app_name, "DieselGameBoxTall.png")) - elif os.path.exists(os.path.join(image_dir, dlc.app_name, "DieselGameBoxLogo.png")): - pixmap = QPixmap(os.path.join(image_dir, dlc.app_name, "DieselGameBoxLogo.png")) - else: - print(f"No Image found: {dlc.app_title}") - pixmap = None - if not pixmap or pixmap.isNull(): - print(dlc.app_title + " has corrupt Image") - download_image(dlc, force=True) - pixmap = QPixmap(f"{image_dir}/{dlc.app_name}/UninstalledArt.png") - else: - if os.path.exists(f"{image_dir}/{dlc.app_name}/UninstalledArt.png"): - pixmap = QPixmap(f"{image_dir}/{dlc.app_name}/DieselGameBoxTall.png") - else: - pixmap = None - if not pixmap or pixmap.isNull(): - print(dlc.app_title + " has corrupt Image") - download_image(dlc, force=True) - pixmap = QPixmap(f"{image_dir}/{dlc.app_name}/UninstalledArt.png") - self.image.setPixmap(pixmap.scaledToHeight(pixmap.height()*0.5)) + pixmap = get_pixmap(dlc.app_name) + self.image.setPixmap(pixmap.scaledToHeight(pixmap.height() * 0.5)) self.dlc_name.setText(dlc.app_title) self.version.setText(dlc.app_version) diff --git a/rare/components/tabs/games/game_info/game_info.py b/rare/components/tabs/games/game_info/game_info.py new file mode 100644 index 00000000..e8c6f05a --- /dev/null +++ b/rare/components/tabs/games/game_info/game_info.py @@ -0,0 +1,122 @@ +import json +import os +import platform + +from PyQt5.QtCore import pyqtSignal +from PyQt5.QtWidgets import QWidget, QMessageBox + +from legendary.core import LegendaryCore +from legendary.models.game import Game, InstalledGame +from rare.ui.components.tabs.games.game_info.game_info import Ui_GameInfo +from rare import data_dir +from rare.utils.legendary_utils import VerifyThread +from rare.utils.steam_grades import SteamWorker +from rare.utils.utils import get_size, get_pixmap + + +class GameInfo(QWidget, Ui_GameInfo): + igame: InstalledGame + game: Game + uninstall_game = pyqtSignal(str) + update_list = pyqtSignal(str) + verify_game = pyqtSignal(str) + verify_threads = {} + + def __init__(self, core: LegendaryCore, parent): + super(GameInfo, self).__init__(parent=parent) + self.setupUi(self) + self.core = core + + self.ratings = {"platinum": self.tr("Platinum"), + "gold": self.tr("Gold"), + "silver": self.tr("Silver"), + "bronze": self.tr("Bronze"), + "fail": self.tr("Could not get grade"), + "pending": self.tr("Not enough reports")} + if os.path.exists(p := os.path.join(data_dir, "game_list.json")): + self.grade_table = json.load(open(p)) + else: + self.grade_table = {} + + if platform.system() == "Windows": + self.lbl_grade.setVisible(False) + self.grade.setVisible(False) + else: + self.steam_worker = SteamWorker(self.core) + self.steam_worker.rating_signal.connect(self.grade.setText) + + self.game_actions_stack.setCurrentIndex(0) + self.game_actions_stack.resize(self.game_actions_stack.minimumSize()) + + self.uninstall_button.clicked.connect(self.uninstall) + self.verify_button.clicked.connect(self.verify) + self.repair_button.clicked.connect(self.repair) + + def uninstall(self): + self.uninstall_game.emit(self.game.app_name) + self.update_list.emit(self.game.app_name) + + def repair(self): + repair_file = os.path.join(self.core.lgd.get_tmp_path(), f'{self.game.app_name}.repair') + if not os.path.exists(repair_file): + QMessageBox.warning(self, "Warning", self.tr( + "Repair file does not exist or game does not need a repair. Please verify game first")) + return + self.verify_game.emit(self.game.app_name) + + def verify(self): + self.verify_widget.setCurrentIndex(1) + verify_thread = VerifyThread(self.core, self.game.app_name) + verify_thread.status.connect(self.verify_satistics) + verify_thread.summary.connect(self.finish_verify) + verify_thread.start() + self.verify_progress.setValue(0) + self.verify_threads[self.game.app_name] = verify_thread + + def verify_satistics(self, progress): + # checked, max, app_name + if progress[2] == self.game.app_name: + self.verify_progress.setValue(progress[0] * 100 / progress[1]) + + def finish_verify(self, failed): + failed, missing, app_name = failed + if failed == 0 and missing == 0: + QMessageBox.information(self, "Summary", + "Game was verified successfully. No missing or corrupt files found") + else: + ans = QMessageBox.question(self, "Summary", self.tr( + 'Verification failed, {} file(s) corrupted, {} file(s) are missing. Do you want to repair them?').format( + failed, missing), QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes) + if ans == QMessageBox.Yes: + self.verify_game.emit(self.game.app_name) + self.verify_widget.setCurrentIndex(0) + self.verify_threads.pop(app_name) + + def update_game(self, app_name): + self.game = self.core.get_game(app_name) + self.igame = self.core.get_installed_game(app_name) + self.game_title.setText(f'

{self.game.app_title}

') + + pixmap = get_pixmap(app_name) + w = 200 + pixmap = pixmap.scaled(w, int(w * 4 / 3)) + self.image.setPixmap(pixmap) + + self.app_name.setText(self.game.app_name) + self.version.setText(self.game.app_version) + self.dev.setText(self.game.metadata["developer"]) + self.install_size.setText(get_size(self.igame.install_size)) + self.install_path.setText(self.igame.install_path) + + if platform.system() != "Windows": + self.grade.setText(self.tr("Loading")) + self.steam_worker.set_app_name(app_name) + self.steam_worker.start() + + if len(self.verify_threads.keys()) == 0 or not self.verify_threads.get(app_name): + self.verify_widget.setCurrentIndex(0) + elif self.verify_threads.get(app_name): + self.verify_widget.setCurrentIndex(1) + self.verify_progress.setValue( + self.verify_threads[app_name].num / self.verify_threads[app_name].total * 100 + ) diff --git a/rare/components/tabs/settings/legendary.py b/rare/components/tabs/settings/legendary.py index 7f7a944b..45a457e3 100644 --- a/rare/components/tabs/settings/legendary.py +++ b/rare/components/tabs/settings/legendary.py @@ -2,20 +2,20 @@ import os.path import platform from logging import getLogger -from PyQt5.QtWidgets import QFileDialog, QMessageBox, QStackedWidget, QVBoxLayout, QDialog, QCheckBox, QLabel, \ +from PyQt5.QtWidgets import QFileDialog, QMessageBox, QVBoxLayout, QDialog, QCheckBox, QLabel, \ QHBoxLayout, QPushButton, QGroupBox, QWidget from legendary.core import LegendaryCore -from rare.ui.components.tabs.settings.legendary import Ui_legendary_settings +from rare.ui.components.tabs.settings.legendary import Ui_LegendarySettings from rare.utils.extra_widgets import PathEdit from rare.utils.utils import get_size logger = getLogger("LegendarySettings") -class LegendarySettings(QStackedWidget, Ui_legendary_settings): - def __init__(self, core: LegendaryCore): - super(LegendarySettings, self).__init__() +class LegendarySettings(QWidget, Ui_LegendarySettings): + def __init__(self, core: LegendaryCore, parent=None): + super(LegendarySettings, self).__init__(parent=parent) self.setupUi(self) self.core = core @@ -24,22 +24,22 @@ class LegendarySettings(QStackedWidget, Ui_legendary_settings): self.install_dir = PathEdit(core.get_default_install_dir(), file_type=QFileDialog.DirectoryOnly, save_func=self.save_path) - self.layout_install_dir.addWidget(self.install_dir) + self.install_dir_layout.addWidget(self.install_dir) # Max Workers - max_workers = self.core.lgd.config["Legendary"].getint("max_workers", fallback=0) + max_workers = self.core.lgd.config['Legendary'].getint('max_workers', fallback=0) self.max_worker_spin.setValue(max_workers) self.max_worker_spin.valueChanged.connect(self.max_worker_save) # Max memory - max_memory = self.core.lgd.config["Legendary"].getint("max_memory", fallback=0) + max_memory = self.core.lgd.config['Legendary'].getint('max_memory', fallback=0) self.max_memory_spin.setValue(max_memory) self.max_memory_spin.valueChanged.connect(self.max_memory_save) # Preferred CDN - preferred_cdn = self.core.lgd.config["Legendary"].get("preferred_cdn", fallback="") + preferred_cdn = self.core.lgd.config['Legendary'].get('preferred_cdn', fallback="") self.preferred_cdn_line.setText(preferred_cdn) self.preferred_cdn_line.textChanged.connect(self.preferred_cdn_save) # Disable HTTPS - disable_https = self.core.lgd.config["Legendary"].getboolean("disable_https", fallback=False) + disable_https = self.core.lgd.config['Legendary'].getboolean('disable_https', fallback=False) self.disable_https_check.setChecked(disable_https) self.disable_https_check.stateChanged.connect(self.disable_https_save) @@ -50,11 +50,8 @@ class LegendarySettings(QStackedWidget, Ui_legendary_settings): self.clean_keep_manifests_button.clicked.connect( lambda: self.cleanup(True) ) - self.setCurrentIndex(0) - self.back_button.clicked.connect(lambda: self.setCurrentIndex(0)) - - self.path_info.setText(self.tr("EGL path is at C:\\ProgramData\\Epic\\EpicGamesLauncher\\Data\\Manifests")) + self.manifest_path_info.setText(self.tr("EGL path is at C:\\ProgramData\\Epic\\EpicGamesLauncher\\Data\\Manifests")) path = os.path.expanduser("~/") if self.core.egl.programdata_path: path = self.core.egl.programdata_path @@ -65,14 +62,14 @@ class LegendarySettings(QStackedWidget, Ui_legendary_settings): if os.path.exists(p := os.path.join(i, "drive_c/ProgramData/Epic/EpicGamesLauncher/Data/Manifests")): path = p - self.path_edit = PathEdit(path, QFileDialog.DirectoryOnly, save_func=self.save_egl_path) - self.pathedit_placeholder.addWidget(self.path_edit) + self.manifest_path_edit = PathEdit(path, QFileDialog.DirectoryOnly, save_func=self.save_egl_path) + self.manifest_path_layout.addWidget(self.manifest_path_edit) if platform.system() != "Windows": - self.core.lgd.config.set("Legendary", "egl_programdata") + self.core.lgd.config.set('Legendary', 'egl_programdata', path) self.core.egl.programdata_path = path - self.importable_widgets = [] - self.exportable_widgets = [] + self.importable_widgets = list() + self.exportable_widgets = list() if self.core.egl_sync_enabled: self.egl_sync_button.setText(self.tr("Disable sync")) @@ -86,7 +83,7 @@ class LegendarySettings(QStackedWidget, Ui_legendary_settings): def enable_sync(self): if not self.core.egl.programdata_path: - if os.path.exists(path := self.path_edit.text()): + if os.path.exists(path := self.manifest_path_edit.text()): self.core.lgd.config.set("Legendary", "egl_programdata", path) self.core.lgd.save_config() self.core.egl.programdata_path = path @@ -98,16 +95,18 @@ class LegendarySettings(QStackedWidget, Ui_legendary_settings): self.enable_sync_button.setDisabled(True) def export_all(self): - for w in self.exportable_widgets: - w.export_game() + for ew in self.exportable_widgets: + ew.export_game() + self.exportable_widgets.clear() def import_all(self): - for w in self.importable_widgets: - w.import_game() + for iw in self.importable_widgets: + iw.import_game() + self.importable_widgets.clear() def save_egl_path(self): - self.core.lgd.config.set("Legendary", "egl_programdata", self.path_edit.text()) - self.core.egl.programdata_path = self.path_edit.text() + self.core.lgd.config.set("Legendary", "egl_programdata", self.manifest_path_edit.text()) + self.core.egl.programdata_path = self.manifest_path_edit.text() self.core.lgd.save_config() self.update_egl_widget() @@ -131,42 +130,49 @@ class LegendarySettings(QStackedWidget, Ui_legendary_settings): # enable sync self.enable_sync_button.setDisabled(False) self.update_egl_widget() - self.setCurrentIndex(1) def update_egl_widget(self): - self.exportable_widgets = [] - QWidget().setLayout(self.exportable_games.layout()) - QWidget().setLayout(self.importable_games.layout()) - importable_layout = QVBoxLayout() - self.importable_games.setLayout(importable_layout) - exportable_layout = QVBoxLayout() - self.exportable_games.setLayout(exportable_layout) + self.import_scroll.setVisible(bool(self.core.egl.programdata_path)) + self.export_scroll.setVisible(bool(self.core.egl.programdata_path)) + self.export_all_button.setDisabled(not bool(self.core.egl.programdata_path)) + self.import_all_button.setDisabled(not bool(self.core.egl.programdata_path)) + if not self.core.egl.programdata_path: - self.importable_games.setVisible(False) - self.exportable_games.setVisible(False) - self.export_all_button.setVisible(False) - self.import_all_button.setVisible(False) return - self.importable_games.setVisible(True) - self.exportable_games.setVisible(True) - self.export_all_button.setVisible(True) - self.import_all_button.setVisible(True) + if self.exportable_widgets: + for ew in self.exportable_widgets: + # FIXME: Handle this using signals to properly update the list on python's side + try: + ew.deleteLater() + except RuntimeError as e: + print(e) + self.exportable_widgets.clear() + exportable_games = self.core.egl_get_exportable() + for igame in exportable_games: + ew = EGLSyncWidget(igame, True, self.core) + self.exportable_widgets.append(ew) + self.exportable_layout.addWidget(ew) + self.export_group.setEnabled(bool(exportable_games)) + self.export_all_button.setEnabled(bool(exportable_games)) + self.export_label.setVisible(not bool(exportable_games)) - for igame in self.core.egl_get_exportable(): - w = EGLSyncWidget(igame, True, self.core) - self.importable_widgets.append(w) - self.exportable_games.layout().addWidget(w) - if len(self.core.egl_get_exportable()) == 0: - self.exportable_games.layout().addWidget(QLabel(self.tr("No games to export"))) - - self.importable_widgets = [] - for game in self.core.egl_get_importable(): - w = EGLSyncWidget(game, False, self.core) - self.importable_widgets.append(w) - self.importable_games.layout().addWidget(w) - if len(self.core.egl_get_importable()) == 0: - self.importable_games.layout().addWidget(QLabel(self.tr("No games to import"))) + if self.importable_widgets: + for iw in self.importable_widgets: + # FIXME: Handle this using signals to properly update the list on python's side + try: + iw.deleteLater() + except RuntimeError as e: + print(e) + self.importable_widgets.clear() + importable_games = self.core.egl_get_importable() + for game in importable_games: + iw = EGLSyncWidget(game, False, self.core) + self.importable_widgets.append(iw) + self.importable_layout.addWidget(iw) + self.import_group.setEnabled(bool(importable_games)) + self.import_all_button.setEnabled(bool(importable_games)) + self.import_label.setVisible(not bool(importable_games)) def save_path(self): self.core.lgd.config["Legendary"]["install_dir"] = self.install_dir.text() @@ -192,7 +198,7 @@ class LegendarySettings(QStackedWidget, Ui_legendary_settings): def preferred_cdn_save(self, cdn: str): if cdn: - self.core.lgd.config.set("Legendary", "preferred_cdn", cdn.strip(" ")) + self.core.lgd.config.set("Legendary", "preferred_cdn", cdn.strip()) else: self.core.lgd.config.remove_option("Legendary", "preferred_cdn") self.core.lgd.save_config() @@ -228,8 +234,8 @@ class LegendarySettings(QStackedWidget, Ui_legendary_settings): class DisableSyncDialog(QDialog): info = 1, False - def __init__(self): - super(DisableSyncDialog, self).__init__() + def __init__(self, parent=None): + super(DisableSyncDialog, self).__init__(parent=parent) self.layout = QVBoxLayout() self.question = QLabel(self.tr("Do you really want to disable sync with Epic Games Store")) @@ -268,8 +274,8 @@ class DisableSyncDialog(QDialog): class EGLSyncWidget(QGroupBox): - def __init__(self, game, export: bool, core: LegendaryCore): - super(EGLSyncWidget, self).__init__() + def __init__(self, game, export: bool, core: LegendaryCore, parent=None): + super(EGLSyncWidget, self).__init__(parent=parent) self.layout = QVBoxLayout() self.export = export self.core = core @@ -292,6 +298,12 @@ class EGLSyncWidget(QGroupBox): def export_game(self): self.core.egl_export(self.game.app_name) + # FIXME: on update_egl_widget this is going to crash because + # FIXME: the item is not removed from the list in the python's side + self.deleteLater() def import_game(self): self.core.egl_import(self.game.app_name) + # FIXME: on update_egl_widget this is going to crash because + # FIXME: the item is not removed from the list in the python's side + self.deleteLater() diff --git a/rare/components/tabs/settings/rare.py b/rare/components/tabs/settings/rare.py index 0df08971..75cacf38 100644 --- a/rare/components/tabs/settings/rare.py +++ b/rare/components/tabs/settings/rare.py @@ -1,6 +1,5 @@ import os import platform -import shutil import subprocess import sys from logging import getLogger @@ -8,7 +7,7 @@ from logging import getLogger from PyQt5.QtCore import QSettings, Qt from PyQt5.QtWidgets import QWidget -from rare import cache_dir, data_dir +from rare import cache_dir from rare.components.tabs.settings.rpc_settings import RPCSettings from rare.ui.components.tabs.settings.rare import Ui_RareSettings from rare.utils import utils @@ -40,7 +39,6 @@ class RareSettings(QWidget, Ui_RareSettings): ] self.settings = QSettings() - self.img_dir_path = self.settings.value("img_dir", os.path.join(data_dir, "images"), type=str) language = self.settings.value("language", get_lang(), type=str) self.logdir = os.path.join(cache_dir, "logs") @@ -192,26 +190,6 @@ class RareSettings(QWidget, Ui_RareSettings): self.settings.setValue("language", languages[i][0]) self.interface_info.setVisible(True) - def update_path(self): - old_path = self.img_dir_path - new_path = self.img_dir.text() - - if old_path != new_path: - if not os.path.exists(new_path): - os.makedirs(new_path) - elif len(os.listdir(new_path)) > 0: - logger.warning("New directory is not empty") - return - logger.info("Move Images") - for i in os.listdir(old_path): - try: - shutil.move(os.path.join(old_path, i), os.path.join(new_path, i)) - except: - pass - os.rmdir(old_path) - self.img_dir_path = new_path - self.settings.setValue("img_dir", new_path) - def init_checkboxes(self, checkboxes): for cb in checkboxes: widget, option, default = cb diff --git a/rare/ui/components/tabs/settings/about.py b/rare/ui/components/tabs/settings/about.py index 5eb18a83..d1e6e370 100644 --- a/rare/ui/components/tabs/settings/about.py +++ b/rare/ui/components/tabs/settings/about.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- -# Form implementation generated from reading ui file 'about.ui' +# Form implementation generated from reading ui file 'rare/ui/components/tabs/settings/about.ui' # # Created by: PyQt5 UI code generator 5.15.4 # @@ -14,80 +14,82 @@ from PyQt5 import QtCore, QtGui, QtWidgets class Ui_About(object): def setupUi(self, About): About.setObjectName("About") - About.resize(499, 396) - self.gridLayout = QtWidgets.QGridLayout(About) - self.gridLayout.setObjectName("gridLayout") - self.open_browser = QtWidgets.QPushButton(About) - self.open_browser.setObjectName("open_browser") - self.gridLayout.addWidget(self.open_browser, 4, 1, 1, 1) + About.resize(722, 345) + self.about_layout = QtWidgets.QFormLayout(About) + self.about_layout.setLabelAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.about_layout.setObjectName("about_layout") + self.title = QtWidgets.QLabel(About) + self.title.setObjectName("title") + self.about_layout.setWidget(0, QtWidgets.QFormLayout.SpanningRole, self.title) self.version_label = QtWidgets.QLabel(About) font = QtGui.QFont() font.setBold(True) font.setWeight(75) self.version_label.setFont(font) self.version_label.setObjectName("version_label") - self.gridLayout.addWidget(self.version_label, 2, 0, 1, 1, QtCore.Qt.AlignRight) - self.license_label = QtWidgets.QLabel(About) - font = QtGui.QFont() - font.setBold(True) - font.setWeight(75) - self.license_label.setFont(font) - self.license_label.setObjectName("license_label") - self.gridLayout.addWidget(self.license_label, 7, 0, 1, 1, QtCore.Qt.AlignRight) - self.lgd_dev_label = QtWidgets.QLabel(About) - font = QtGui.QFont() - font.setBold(True) - font.setWeight(75) - self.lgd_dev_label.setFont(font) - self.lgd_dev_label.setObjectName("lgd_dev_label") - self.gridLayout.addWidget(self.lgd_dev_label, 6, 0, 1, 1, QtCore.Qt.AlignRight) - self.dev = QtWidgets.QLabel(About) - self.dev.setText("Dummerle") - self.dev.setOpenExternalLinks(True) - self.dev.setObjectName("dev") - self.gridLayout.addWidget(self.dev, 5, 1, 1, 1) + self.about_layout.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.version_label) + self.version = QtWidgets.QLabel(About) + self.version.setText("error") + self.version.setObjectName("version") + self.about_layout.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.version) self.update_label = QtWidgets.QLabel(About) font = QtGui.QFont() font.setBold(True) font.setWeight(75) self.update_label.setFont(font) self.update_label.setObjectName("update_label") - self.gridLayout.addWidget(self.update_label, 3, 0, 1, 1, QtCore.Qt.AlignRight) - self.version = QtWidgets.QLabel(About) - self.version.setText("error") - self.version.setObjectName("version") - self.gridLayout.addWidget(self.version, 2, 1, 1, 1) + self.about_layout.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.update_label) + self.update = QtWidgets.QLabel(About) + self.update.setText("error") + self.update.setObjectName("update") + self.about_layout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.update) + self.open_browser = QtWidgets.QPushButton(About) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.open_browser.sizePolicy().hasHeightForWidth()) + self.open_browser.setSizePolicy(sizePolicy) + self.open_browser.setObjectName("open_browser") + self.about_layout.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.open_browser) self.dev_label = QtWidgets.QLabel(About) font = QtGui.QFont() font.setBold(True) font.setWeight(75) self.dev_label.setFont(font) self.dev_label.setObjectName("dev_label") - self.gridLayout.addWidget(self.dev_label, 5, 0, 1, 1, QtCore.Qt.AlignRight) - self.license = QtWidgets.QLabel(About) - self.license.setObjectName("license") - self.gridLayout.addWidget(self.license, 7, 1, 1, 1) - self.update = QtWidgets.QLabel(About) - self.update.setText("error") - self.update.setObjectName("update") - self.gridLayout.addWidget(self.update, 3, 1, 1, 1) + self.about_layout.setWidget(4, QtWidgets.QFormLayout.LabelRole, self.dev_label) + self.dev = QtWidgets.QLabel(About) + self.dev.setText("Dummerle") + self.dev.setOpenExternalLinks(True) + self.dev.setObjectName("dev") + self.about_layout.setWidget(4, QtWidgets.QFormLayout.FieldRole, self.dev) + self.lgd_dev_label = QtWidgets.QLabel(About) + font = QtGui.QFont() + font.setBold(True) + font.setWeight(75) + self.lgd_dev_label.setFont(font) + self.lgd_dev_label.setObjectName("lgd_dev_label") + self.about_layout.setWidget(5, QtWidgets.QFormLayout.LabelRole, self.lgd_dev_label) self.lgd_dev = QtWidgets.QLabel(About) self.lgd_dev.setText("derrod") self.lgd_dev.setOpenExternalLinks(True) self.lgd_dev.setObjectName("lgd_dev") - self.gridLayout.addWidget(self.lgd_dev, 6, 1, 1, 1) + self.about_layout.setWidget(5, QtWidgets.QFormLayout.FieldRole, self.lgd_dev) + self.license_label = QtWidgets.QLabel(About) + font = QtGui.QFont() + font.setBold(True) + font.setWeight(75) + self.license_label.setFont(font) + self.license_label.setObjectName("license_label") + self.about_layout.setWidget(6, QtWidgets.QFormLayout.LabelRole, self.license_label) + self.license = QtWidgets.QLabel(About) + self.license.setObjectName("license") + self.about_layout.setWidget(6, QtWidgets.QFormLayout.FieldRole, self.license) self.info_text = QtWidgets.QLabel(About) self.info_text.setWordWrap(True) self.info_text.setOpenExternalLinks(True) self.info_text.setObjectName("info_text") - self.gridLayout.addWidget(self.info_text, 14, 0, 1, 3) - spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) - self.gridLayout.addItem(spacerItem, 15, 0, 1, 3) - self.title = QtWidgets.QLabel(About) - self.title.setObjectName("title") - self.gridLayout.addWidget(self.title, 1, 0, 1, 3) - spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) - self.gridLayout.addItem(spacerItem1, 2, 2, 6, 1) + self.about_layout.setWidget(7, QtWidgets.QFormLayout.SpanningRole, self.info_text) self.retranslateUi(About) QtCore.QMetaObject.connectSlotsByName(About) @@ -95,23 +97,22 @@ class Ui_About(object): def retranslateUi(self, About): _translate = QtCore.QCoreApplication.translate About.setWindowTitle(_translate("About", "About")) - self.open_browser.setText(_translate("About", "Download latest release")) - self.version_label.setText(_translate("About", "Version")) - self.license_label.setText(_translate("About", "License")) - self.lgd_dev_label.setText(_translate("About", "Legendary Developer")) - self.dev.setToolTip(_translate("About", "Github")) - self.update_label.setText(_translate("About", "Update available")) - self.dev_label.setText(_translate("About", "Rare Developer")) - self.license.setText(_translate("About", "GNU General Public License v3.0")) - self.lgd_dev.setToolTip(_translate("About", "Github")) - self.info_text.setText(_translate("About", - "This is a beta version, so you can get bugs. If you get a bug, please report it by creating an Issue on Github. You can also contact me on Discord (Dummerle#7419). Or you can join the Discord server")) self.title.setText(_translate("About", "

About

")) + self.version_label.setText(_translate("About", "Version")) + self.update_label.setText(_translate("About", "Update available")) + self.open_browser.setText(_translate("About", "Download latest release")) + self.dev_label.setText(_translate("About", "Rare Developer")) + self.dev.setToolTip(_translate("About", "Github")) + self.lgd_dev_label.setText(_translate("About", "Legendary Developer")) + self.lgd_dev.setToolTip(_translate("About", "Github")) + self.license_label.setText(_translate("About", "License")) + self.license.setText(_translate("About", "GNU General Public License v3.0")) + self.info_text.setText(_translate("About", "This is a beta version, so you can get bugs. If you get a bug, please report it by creating an Issue on Github. You can also contact me on Discord (Dummerle#7419). Or you can join the Discord server\n" +"")) if __name__ == "__main__": import sys - app = QtWidgets.QApplication(sys.argv) About = QtWidgets.QWidget() ui = Ui_About() diff --git a/rare/ui/components/tabs/settings/about.ui b/rare/ui/components/tabs/settings/about.ui index af38de8d..5bc1677d 100644 --- a/rare/ui/components/tabs/settings/about.ui +++ b/rare/ui/components/tabs/settings/about.ui @@ -1,190 +1,170 @@ - About - - - - 0 - 0 - 499 - 396 - - - - About - - - - - - Download latest release - - - - - - - - 75 - true - - - - Version - - - - - - - - 75 - true - - - - License - - - - - - - - 75 - true - - - - Legendary Developer - - - - - - - Github - - - <a href='https://github.com/Dummerle'>Dummerle</a> - - - true - - - - - - - - 75 - true - - - - Update available - - - - - - - error - - - - - - - - 75 - true - - - - Rare Developer - - - - - - - GNU General Public License v3.0 - - - - - - - error - - - - - - - Github - - - <a href='https://github.com/derrod/'>derrod</a> - - - true - - - - - - - This is a beta version, so you can get bugs. If you get a bug, please report it by - creating an Issue on <a href='https://github.com/Dummerle/Rare/issues'>Github</a>. - You can also contact me on Discord (Dummerle#7419). Or you can join the <a - href='https://discord.gg/YvmABK9YSk'>Discord server</a> - - - - true - - - true - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - <h2>About</h2> - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - + About + + + + 0 + 0 + 722 + 345 + + + + About + + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + <h2>About</h2> + - - + + + + + + 75 + true + + + + Version + + + + + + + error + + + + + + + + 75 + true + + + + Update available + + + + + + + error + + + + + + + + 0 + 0 + + + + Download latest release + + + + + + + + 75 + true + + + + Rare Developer + + + + + + + Github + + + <a href='https://github.com/Dummerle'>Dummerle</a> + + + true + + + + + + + + 75 + true + + + + Legendary Developer + + + + + + + Github + + + <a href='https://github.com/derrod/'>derrod</a> + + + true + + + + + + + + 75 + true + + + + License + + + + + + + GNU General Public License v3.0 + + + + + + + This is a beta version, so you can get bugs. If you get a bug, please report it by creating an Issue on <a href='https://github.com/Dummerle/Rare/issues'>Github</a>. You can also contact me on Discord (Dummerle#7419). Or you can join the <a href='https://discord.gg/YvmABK9YSk'>Discord server</a> + + + + true + + + true + + + + + + + diff --git a/rare/ui/components/tabs/settings/legendary.py b/rare/ui/components/tabs/settings/legendary.py index 99485d1f..9344119b 100644 --- a/rare/ui/components/tabs/settings/legendary.py +++ b/rare/ui/components/tabs/settings/legendary.py @@ -11,22 +11,20 @@ from PyQt5 import QtCore, QtGui, QtWidgets -class Ui_legendary_settings(object): - def setupUi(self, legendary_settings): - legendary_settings.setObjectName("legendary_settings") - legendary_settings.resize(810, 535) - self.settings = QtWidgets.QWidget() - self.settings.setObjectName("settings") - self.settings_layout = QtWidgets.QHBoxLayout(self.settings) +class Ui_LegendarySettings(object): + def setupUi(self, LegendarySettings): + LegendarySettings.setObjectName("LegendarySettings") + LegendarySettings.resize(796, 732) + self.settings_layout = QtWidgets.QHBoxLayout(LegendarySettings) self.settings_layout.setObjectName("settings_layout") self.left_layout = QtWidgets.QVBoxLayout() self.left_layout.setObjectName("left_layout") - self.install_dir_group = QtWidgets.QGroupBox(self.settings) + self.install_dir_group = QtWidgets.QGroupBox(LegendarySettings) self.install_dir_group.setObjectName("install_dir_group") - self.layout_install_dir = QtWidgets.QVBoxLayout(self.install_dir_group) - self.layout_install_dir.setObjectName("layout_install_dir") + self.install_dir_layout = QtWidgets.QVBoxLayout(self.install_dir_group) + self.install_dir_layout.setObjectName("install_dir_layout") self.left_layout.addWidget(self.install_dir_group) - self.download_group = QtWidgets.QGroupBox(self.settings) + self.download_group = QtWidgets.QGroupBox(LegendarySettings) self.download_group.setObjectName("download_group") self.download_layout = QtWidgets.QFormLayout(self.download_group) self.download_layout.setLabelAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) @@ -48,7 +46,7 @@ class Ui_legendary_settings(object): sizePolicy.setHeightForWidth(self.max_worker_spin.sizePolicy().hasHeightForWidth()) self.max_worker_spin.setSizePolicy(sizePolicy) self.max_worker_spin.setMinimum(0) - self.max_worker_spin.setMaximum(128) + self.max_worker_spin.setMaximum(16) self.max_worker_spin.setProperty("value", 4) self.max_worker_spin.setObjectName("max_worker_spin") self.max_workers_layout.addWidget(self.max_worker_spin) @@ -97,123 +95,152 @@ class Ui_legendary_settings(object): self.disable_https_check.setObjectName("disable_https_check") self.download_layout.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.disable_https_check) self.left_layout.addWidget(self.download_group) + self.egl_sync_group = QtWidgets.QGroupBox(LegendarySettings) + self.egl_sync_group.setObjectName("egl_sync_group") + self.egl_sync_layout = QtWidgets.QVBoxLayout(self.egl_sync_group) + self.egl_sync_layout.setObjectName("egl_sync_layout") + self.manifest_path_layout = QtWidgets.QVBoxLayout() + self.manifest_path_layout.setObjectName("manifest_path_layout") + self.egl_sync_layout.addLayout(self.manifest_path_layout) + self.manifest_path_info = QtWidgets.QLabel(self.egl_sync_group) + self.manifest_path_info.setObjectName("manifest_path_info") + self.egl_sync_layout.addWidget(self.manifest_path_info) + self.export_import_layout = QtWidgets.QHBoxLayout() + self.export_import_layout.setObjectName("export_import_layout") + self.export_group = QtWidgets.QGroupBox(self.egl_sync_group) + self.export_group.setObjectName("export_group") + self.export_layout = QtWidgets.QVBoxLayout(self.export_group) + self.export_layout.setObjectName("export_layout") + self.export_label = QtWidgets.QLabel(self.export_group) + self.export_label.setObjectName("export_label") + self.export_layout.addWidget(self.export_label) + self.export_scroll = QtWidgets.QScrollArea(self.export_group) + self.export_scroll.setSizeAdjustPolicy(QtWidgets.QAbstractScrollArea.AdjustIgnored) + self.export_scroll.setWidgetResizable(True) + self.export_scroll.setObjectName("export_scroll") + self.export_contents = QtWidgets.QWidget() + self.export_contents.setGeometry(QtCore.QRect(0, 0, 264, 16)) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Maximum) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.export_contents.sizePolicy().hasHeightForWidth()) + self.export_contents.setSizePolicy(sizePolicy) + self.export_contents.setObjectName("export_contents") + self.exportable_layout = QtWidgets.QVBoxLayout(self.export_contents) + self.exportable_layout.setObjectName("exportable_layout") + self.export_scroll.setWidget(self.export_contents) + self.export_layout.addWidget(self.export_scroll) + self.export_all_button = QtWidgets.QPushButton(self.export_group) + self.export_all_button.setObjectName("export_all_button") + self.export_layout.addWidget(self.export_all_button, 0, QtCore.Qt.AlignRight) + self.export_import_layout.addWidget(self.export_group) + self.import_group = QtWidgets.QGroupBox(self.egl_sync_group) + self.import_group.setObjectName("import_group") + self.import_layout = QtWidgets.QVBoxLayout(self.import_group) + self.import_layout.setObjectName("import_layout") + self.import_label = QtWidgets.QLabel(self.import_group) + self.import_label.setObjectName("import_label") + self.import_layout.addWidget(self.import_label) + self.import_scroll = QtWidgets.QScrollArea(self.import_group) + self.import_scroll.setSizeAdjustPolicy(QtWidgets.QAbstractScrollArea.AdjustIgnored) + self.import_scroll.setWidgetResizable(True) + self.import_scroll.setObjectName("import_scroll") + self.import_contents = QtWidgets.QWidget() + self.import_contents.setGeometry(QtCore.QRect(0, 0, 264, 16)) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Maximum) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.import_contents.sizePolicy().hasHeightForWidth()) + self.import_contents.setSizePolicy(sizePolicy) + self.import_contents.setObjectName("import_contents") + self.importable_layout = QtWidgets.QVBoxLayout(self.import_contents) + self.importable_layout.setObjectName("importable_layout") + self.import_scroll.setWidget(self.import_contents) + self.import_layout.addWidget(self.import_scroll) + self.import_all_button = QtWidgets.QPushButton(self.import_group) + self.import_all_button.setObjectName("import_all_button") + self.import_layout.addWidget(self.import_all_button, 0, QtCore.Qt.AlignRight) + self.export_import_layout.addWidget(self.import_group) + self.egl_sync_layout.addLayout(self.export_import_layout) + self.enable_sync_group = QtWidgets.QGroupBox(self.egl_sync_group) + self.enable_sync_group.setObjectName("enable_sync_group") + self.enable_sync_layout = QtWidgets.QHBoxLayout(self.enable_sync_group) + self.enable_sync_layout.setObjectName("enable_sync_layout") + self.sync_once_button = QtWidgets.QPushButton(self.enable_sync_group) + self.sync_once_button.setObjectName("sync_once_button") + self.enable_sync_layout.addWidget(self.sync_once_button, 0, QtCore.Qt.AlignRight) + self.enable_sync_button = QtWidgets.QPushButton(self.enable_sync_group) + self.enable_sync_button.setObjectName("enable_sync_button") + self.enable_sync_layout.addWidget(self.enable_sync_button, 0, QtCore.Qt.AlignRight) + self.egl_sync_layout.addWidget(self.enable_sync_group) + self.left_layout.addWidget(self.egl_sync_group) spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.left_layout.addItem(spacerItem) self.settings_layout.addLayout(self.left_layout) self.right_layout = QtWidgets.QVBoxLayout() self.right_layout.setObjectName("right_layout") - self.cleanup_group = QtWidgets.QGroupBox(self.settings) + self.cleanup_group = QtWidgets.QGroupBox(LegendarySettings) self.cleanup_group.setObjectName("cleanup_group") - self.layout_clean = QtWidgets.QVBoxLayout(self.cleanup_group) - self.layout_clean.setObjectName("layout_clean") + self.cleanup_layout = QtWidgets.QVBoxLayout(self.cleanup_group) + self.cleanup_layout.setObjectName("cleanup_layout") self.clean_keep_manifests_button = QtWidgets.QPushButton(self.cleanup_group) self.clean_keep_manifests_button.setObjectName("clean_keep_manifests_button") - self.layout_clean.addWidget(self.clean_keep_manifests_button) + self.cleanup_layout.addWidget(self.clean_keep_manifests_button) self.clean_button = QtWidgets.QPushButton(self.cleanup_group) self.clean_button.setObjectName("clean_button") - self.layout_clean.addWidget(self.clean_button) + self.cleanup_layout.addWidget(self.clean_button) self.right_layout.addWidget(self.cleanup_group) - self.egl_sync = QtWidgets.QGroupBox(self.settings) + self.egl_sync = QtWidgets.QGroupBox(LegendarySettings) self.egl_sync.setObjectName("egl_sync") - self.verticalLayout = QtWidgets.QVBoxLayout(self.egl_sync) - self.verticalLayout.setObjectName("verticalLayout") + self.egl_sync_layout_3 = QtWidgets.QVBoxLayout(self.egl_sync) + self.egl_sync_layout_3.setObjectName("egl_sync_layout_3") self.egl_sync_button = QtWidgets.QPushButton(self.egl_sync) self.egl_sync_button.setObjectName("egl_sync_button") - self.verticalLayout.addWidget(self.egl_sync_button) + self.egl_sync_layout_3.addWidget(self.egl_sync_button) self.right_layout.addWidget(self.egl_sync) spacerItem1 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.right_layout.addItem(spacerItem1) self.settings_layout.addLayout(self.right_layout) - legendary_settings.addWidget(self.settings) - self.egl_sync_page = QtWidgets.QWidget() - self.egl_sync_page.setObjectName("egl_sync_page") - self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.egl_sync_page) - self.verticalLayout_2.setObjectName("verticalLayout_2") - self.back_button = QtWidgets.QPushButton(self.egl_sync_page) - self.back_button.setObjectName("back_button") - self.verticalLayout_2.addWidget(self.back_button) - self.title = QtWidgets.QLabel(self.egl_sync_page) - self.title.setObjectName("title") - self.verticalLayout_2.addWidget(self.title) - self.pathedit_placeholder = QtWidgets.QVBoxLayout() - self.pathedit_placeholder.setObjectName("pathedit_placeholder") - self.verticalLayout_2.addLayout(self.pathedit_placeholder) - self.path_info = QtWidgets.QLabel(self.egl_sync_page) - self.path_info.setObjectName("path_info") - self.verticalLayout_2.addWidget(self.path_info) - self.layout_export_import = QtWidgets.QGridLayout() - self.layout_export_import.setObjectName("layout_export_import") - self.exportable_games = QtWidgets.QGroupBox(self.egl_sync_page) - self.exportable_games.setObjectName("exportable_games") - self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.exportable_games) - self.verticalLayout_3.setObjectName("verticalLayout_3") - self.layout_export_import.addWidget(self.exportable_games, 0, 0, 1, 1) - self.importable_games = QtWidgets.QGroupBox(self.egl_sync_page) - self.importable_games.setObjectName("importable_games") - self.verticalLayout_4 = QtWidgets.QVBoxLayout(self.importable_games) - self.verticalLayout_4.setObjectName("verticalLayout_4") - self.layout_export_import.addWidget(self.importable_games, 0, 1, 1, 1) - self.export_all_button = QtWidgets.QPushButton(self.egl_sync_page) - self.export_all_button.setObjectName("export_all_button") - self.layout_export_import.addWidget(self.export_all_button, 1, 0, 1, 1) - self.import_all_button = QtWidgets.QPushButton(self.egl_sync_page) - self.import_all_button.setObjectName("import_all_button") - self.layout_export_import.addWidget(self.import_all_button, 1, 1, 1, 1) - self.verticalLayout_2.addLayout(self.layout_export_import) - self.groupBox = QtWidgets.QGroupBox(self.egl_sync_page) - self.groupBox.setObjectName("groupBox") - self.horizontalLayout = QtWidgets.QHBoxLayout(self.groupBox) - self.horizontalLayout.setObjectName("horizontalLayout") - self.sync_once_button = QtWidgets.QPushButton(self.groupBox) - self.sync_once_button.setObjectName("sync_once_button") - self.horizontalLayout.addWidget(self.sync_once_button) - self.enable_sync_button = QtWidgets.QPushButton(self.groupBox) - self.enable_sync_button.setObjectName("enable_sync_button") - self.horizontalLayout.addWidget(self.enable_sync_button) - self.verticalLayout_2.addWidget(self.groupBox) - spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) - self.verticalLayout_2.addItem(spacerItem2) - legendary_settings.addWidget(self.egl_sync_page) - self.retranslateUi(legendary_settings) - legendary_settings.setCurrentIndex(0) - QtCore.QMetaObject.connectSlotsByName(legendary_settings) + self.retranslateUi(LegendarySettings) + QtCore.QMetaObject.connectSlotsByName(LegendarySettings) - def retranslateUi(self, legendary_settings): + def retranslateUi(self, LegendarySettings): _translate = QtCore.QCoreApplication.translate - legendary_settings.setWindowTitle(_translate("legendary_settings", "LegendarySettings")) - self.install_dir_group.setTitle(_translate("legendary_settings", "Default Installation Directory")) - self.download_group.setTitle(_translate("legendary_settings", "Download Settings")) - self.max_workers_label.setText(_translate("legendary_settings", "Max Workers")) - self.max_workers_info_label.setText(_translate("legendary_settings", "Less is slower (0: Default)")) - self.max_memory_label.setText(_translate("legendary_settings", "Max Memory")) - self.max_memory_spin.setSuffix(_translate("legendary_settings", "MiB")) - self.max_memory_info_label.setText(_translate("legendary_settings", "Less is slower (0: Default)")) - self.preferred_cdn_label.setText(_translate("legendary_settings", "Preferred CDN")) - self.preferred_cdn_line.setPlaceholderText(_translate("legendary_settings", "Default")) - self.disable_https_label.setText(_translate("legendary_settings", "Disable HTTPS")) - self.cleanup_group.setTitle(_translate("legendary_settings", "Cleanup")) - self.clean_keep_manifests_button.setText(_translate("legendary_settings", "Clean, but keep manifests")) - self.clean_button.setText(_translate("legendary_settings", "Remove everything")) - self.egl_sync.setTitle(_translate("legendary_settings", "EGL Sync")) - self.egl_sync_button.setText(_translate("legendary_settings", "Sync Settings")) - self.back_button.setText(_translate("legendary_settings", "Back")) - self.title.setText(_translate("legendary_settings", "

Sync Games with Epic Games Store

")) - self.path_info.setText(_translate("legendary_settings", "TextLabel")) - self.exportable_games.setTitle(_translate("legendary_settings", "Exportable Games")) - self.importable_games.setTitle(_translate("legendary_settings", "Importable")) - self.export_all_button.setText(_translate("legendary_settings", "Export all Games")) - self.import_all_button.setText(_translate("legendary_settings", "Import all Games")) - self.groupBox.setTitle(_translate("legendary_settings", "Enable Sync")) - self.sync_once_button.setText(_translate("legendary_settings", "Sync once")) - self.enable_sync_button.setText(_translate("legendary_settings", "Enable automatic sync")) + LegendarySettings.setWindowTitle(_translate("LegendarySettings", "LegendarySettings")) + self.install_dir_group.setTitle(_translate("LegendarySettings", "Default Installation Directory")) + self.download_group.setTitle(_translate("LegendarySettings", "Download Settings")) + self.max_workers_label.setText(_translate("LegendarySettings", "Max Workers")) + self.max_workers_info_label.setText(_translate("LegendarySettings", "Less is slower (0: Default)")) + self.max_memory_label.setText(_translate("LegendarySettings", "Max Memory")) + self.max_memory_spin.setSuffix(_translate("LegendarySettings", "MiB")) + self.max_memory_info_label.setText(_translate("LegendarySettings", "Less is slower (0: Default)")) + self.preferred_cdn_label.setText(_translate("LegendarySettings", "Preferred CDN")) + self.preferred_cdn_line.setPlaceholderText(_translate("LegendarySettings", "Default")) + self.disable_https_label.setText(_translate("LegendarySettings", "Disable HTTPS")) + self.egl_sync_group.setTitle(_translate("LegendarySettings", "Sync with Epic Games Launcher")) + self.manifest_path_info.setText(_translate("LegendarySettings", "TextLabel")) + self.export_group.setTitle(_translate("LegendarySettings", "Exportable Games")) + self.export_label.setText(_translate("LegendarySettings", "No games to export to EGS")) + self.export_all_button.setText(_translate("LegendarySettings", "Export all Games")) + self.import_group.setTitle(_translate("LegendarySettings", "Importable")) + self.import_label.setText(_translate("LegendarySettings", "No games to import from EGS")) + self.import_all_button.setText(_translate("LegendarySettings", "Import all Games")) + self.enable_sync_group.setTitle(_translate("LegendarySettings", "Enable Sync")) + self.sync_once_button.setText(_translate("LegendarySettings", "Sync once")) + self.enable_sync_button.setText(_translate("LegendarySettings", "Enable automatic sync")) + self.cleanup_group.setTitle(_translate("LegendarySettings", "Cleanup")) + self.clean_keep_manifests_button.setText(_translate("LegendarySettings", "Clean, but keep manifests")) + self.clean_button.setText(_translate("LegendarySettings", "Remove everything")) + self.egl_sync.setTitle(_translate("LegendarySettings", "EGL Sync")) + self.egl_sync_button.setText(_translate("LegendarySettings", "Sync Settings")) if __name__ == "__main__": import sys app = QtWidgets.QApplication(sys.argv) - legendary_settings = QtWidgets.QStackedWidget() - ui = Ui_legendary_settings() - ui.setupUi(legendary_settings) - legendary_settings.show() + LegendarySettings = QtWidgets.QWidget() + ui = Ui_LegendarySettings() + ui.setupUi(LegendarySettings) + LegendarySettings.show() sys.exit(app.exec_()) diff --git a/rare/ui/components/tabs/settings/legendary.ui b/rare/ui/components/tabs/settings/legendary.ui index bb118130..c8115dd4 100644 --- a/rare/ui/components/tabs/settings/legendary.ui +++ b/rare/ui/components/tabs/settings/legendary.ui @@ -1,340 +1,383 @@ - legendary_settings - + LegendarySettings + 0 0 - 810 - 535 + 796 + 732 LegendarySettings - - 0 - - - - - - - - - Default Installation Directory + + + + + + + Default Installation Directory + + + + + + + + Download Settings + + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - Download Settings - - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - 0 - 0 - - - - Max Workers - - - - - - - - - - 0 - 0 - - - - 0 - - - 128 - - - 4 + + + + + 0 + 0 + + + + Max Workers + + + + + + + + + + 0 + 0 + + + + 0 + + + 16 + + + 4 + + + + + + + + true + + + + Less is slower (0: Default) + + + + + + + + + Max Memory + + + + + + + + + + 0 + 0 + + + + MiB + + + 0 + + + 10240 + + + 128 + + + 1024 + + + + + + + + true + + + + Less is slower (0: Default) + + + + + + + + + Preferred CDN + + + + + + + Default + + + + + + + Disable HTTPS + + + + + + + + + + + + + + + + + Sync with Epic Games Launcher + + + + + + + + + TextLabel + + + + + + + + + Exportable Games + + + + + + No games to export to EGS + + + + + + + QAbstractScrollArea::AdjustIgnored + + + true + + + + + 0 + 0 + 264 + 16 + + + + + 0 + 0 + + + + + + + + + + Export all Games + + + + + + + + + + Importable + + + + + + No games to import from EGS + + + + + + + QAbstractScrollArea::AdjustIgnored + + + true + + + + + 0 + 0 + 264 + 16 + + + + + 0 + 0 + + + + + + + + + + Import all Games + + + + + + + + + + + + Enable Sync + + + + + + Sync once - - - - - true - - + + - Less is slower (0: Default) + Enable automatic sync - - - - - Max Memory - - - - - - - - - - 0 - 0 - - - - MiB - - - 0 - - - 10240 - - - 128 - - - 1024 - - - - - - - - true - - - - Less is slower (0: Default) - - - - - - - - - Preferred CDN - - - - - - - Default - - - - - - - Disable HTTPS - - - - - - - - - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - - - - Cleanup - - - - - - Clean, but keep manifests - - - - - - - Remove everything - - - - - - - - - - EGL Sync - - - - - - Sync Settings - - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - - - - - - Back - - - - - - - <h2>Sync Games with Epic Games Store</h2> - - - - - - - - - - TextLabel - - - - - - - - - Exportable Games - - - - - - - - Importable - - - - - - - - Export all Games - - - - - - - Import all Games - - - - - - - - - Enable Sync - - - - - - Sync once - - - - - - - Enable automatic sync - - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + + Cleanup + + + + + + Clean, but keep manifests + + + + + + + Remove everything + + + + + + + + + + EGL Sync + + + + + + Sync Settings + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + +