1
0
Fork 0
mirror of synced 2024-06-26 10:11:19 +12:00

Move EGL Sync page into the main LegendarySettings page and make it useful. (WIP)

Move GameInfo to its own file.
Use get_pixmap in GameDlcWidget to get the pixmap.
Remove unused function from RareSettings.
Convert About to FormLayout.
This commit is contained in:
Stelios Tsampas 2021-09-12 14:23:40 +03:00
parent 7a9daad2b1
commit 228c3ab03e
10 changed files with 924 additions and 907 deletions

View file

@ -114,6 +114,7 @@ class InstallDialog(QDialog, Ui_InstallDialog):
self.dl_item.options.sdl_list = [''] self.dl_item.options.sdl_list = ['']
for cb in self.sdl_list_checks: for cb in self.sdl_list_checks:
if data := cb.isChecked(): if data := cb.isChecked():
# noinspection PyTypeChecker
self.dl_item.options.sdl_list.extend(data) self.dl_item.options.sdl_list.extend(data)
def get_download_info(self): def get_download_info(self):

View file

@ -1,22 +1,12 @@
import json from PyQt5.QtCore import Qt
import os
import platform
from PyQt5.QtCore import Qt, pyqtSignal
from PyQt5.QtGui import QKeyEvent from PyQt5.QtGui import QKeyEvent
from PyQt5.QtWidgets import QWidget, QTabWidget, QMessageBox from PyQt5.QtWidgets import QWidget, QTabWidget
from qtawesome import icon 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_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.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.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): class InfoTabs(QTabWidget):
@ -58,113 +48,3 @@ class InfoTabs(QTabWidget):
def keyPressEvent(self, e: QKeyEvent): def keyPressEvent(self, e: QKeyEvent):
if e.key() == Qt.Key_Escape: if e.key() == Qt.Key_Escape:
self.parent().layout.setCurrentIndex(0) 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"<h2>{self.game.app_title}</h2>")
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
)

View file

@ -1,15 +1,11 @@
import os from PyQt5.QtCore import pyqtSignal
from PyQt5.QtCore import pyqtSignal, QSettings, QSize
from PyQt5.QtGui import QPixmap
from PyQt5.QtWidgets import QFrame, QWidget, QMessageBox from PyQt5.QtWidgets import QFrame, QWidget, QMessageBox
from legendary.core import LegendaryCore from legendary.core import LegendaryCore
from legendary.models.game import Game 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 import Ui_GameDlc
from rare.ui.components.tabs.games.game_info.game_dlc_widget import Ui_GameDlcWidget 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): class GameDlc(QWidget, Ui_GameDlc):
@ -72,32 +68,9 @@ class GameDlcWidget(QFrame, Ui_GameDlcWidget):
super(GameDlcWidget, self).__init__(parent=parent) super(GameDlcWidget, self).__init__(parent=parent)
self.setupUi(self) self.setupUi(self)
self.dlc = dlc self.dlc = dlc
image_dir = QSettings().value("img_dir", os.path.join(data_dir, "images"))
if installed: pixmap = get_pixmap(dlc.app_name)
if os.path.exists(os.path.join(image_dir, dlc.app_name, "FinalArt.png")): self.image.setPixmap(pixmap.scaledToHeight(pixmap.height() * 0.5))
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))
self.dlc_name.setText(dlc.app_title) self.dlc_name.setText(dlc.app_title)
self.version.setText(dlc.app_version) self.version.setText(dlc.app_version)

View file

@ -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'<h2>{self.game.app_title}</h2>')
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
)

View file

@ -2,20 +2,20 @@ import os.path
import platform import platform
from logging import getLogger 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 QHBoxLayout, QPushButton, QGroupBox, QWidget
from legendary.core import LegendaryCore 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.extra_widgets import PathEdit
from rare.utils.utils import get_size from rare.utils.utils import get_size
logger = getLogger("LegendarySettings") logger = getLogger("LegendarySettings")
class LegendarySettings(QStackedWidget, Ui_legendary_settings): class LegendarySettings(QWidget, Ui_LegendarySettings):
def __init__(self, core: LegendaryCore): def __init__(self, core: LegendaryCore, parent=None):
super(LegendarySettings, self).__init__() super(LegendarySettings, self).__init__(parent=parent)
self.setupUi(self) self.setupUi(self)
self.core = core self.core = core
@ -24,22 +24,22 @@ class LegendarySettings(QStackedWidget, Ui_legendary_settings):
self.install_dir = PathEdit(core.get_default_install_dir(), self.install_dir = PathEdit(core.get_default_install_dir(),
file_type=QFileDialog.DirectoryOnly, file_type=QFileDialog.DirectoryOnly,
save_func=self.save_path) 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
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.setValue(max_workers)
self.max_worker_spin.valueChanged.connect(self.max_worker_save) self.max_worker_spin.valueChanged.connect(self.max_worker_save)
# Max memory # 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.setValue(max_memory)
self.max_memory_spin.valueChanged.connect(self.max_memory_save) self.max_memory_spin.valueChanged.connect(self.max_memory_save)
# Preferred CDN # 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.setText(preferred_cdn)
self.preferred_cdn_line.textChanged.connect(self.preferred_cdn_save) self.preferred_cdn_line.textChanged.connect(self.preferred_cdn_save)
# Disable HTTPS # 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.setChecked(disable_https)
self.disable_https_check.stateChanged.connect(self.disable_https_save) 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( self.clean_keep_manifests_button.clicked.connect(
lambda: self.cleanup(True) lambda: self.cleanup(True)
) )
self.setCurrentIndex(0)
self.back_button.clicked.connect(lambda: self.setCurrentIndex(0)) self.manifest_path_info.setText(self.tr("EGL path is at C:\\ProgramData\\Epic\\EpicGamesLauncher\\Data\\Manifests"))
self.path_info.setText(self.tr("EGL path is at C:\\ProgramData\\Epic\\EpicGamesLauncher\\Data\\Manifests"))
path = os.path.expanduser("~/") path = os.path.expanduser("~/")
if self.core.egl.programdata_path: if self.core.egl.programdata_path:
path = 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")): if os.path.exists(p := os.path.join(i, "drive_c/ProgramData/Epic/EpicGamesLauncher/Data/Manifests")):
path = p path = p
self.path_edit = PathEdit(path, QFileDialog.DirectoryOnly, save_func=self.save_egl_path) self.manifest_path_edit = PathEdit(path, QFileDialog.DirectoryOnly, save_func=self.save_egl_path)
self.pathedit_placeholder.addWidget(self.path_edit) self.manifest_path_layout.addWidget(self.manifest_path_edit)
if platform.system() != "Windows": 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.core.egl.programdata_path = path
self.importable_widgets = [] self.importable_widgets = list()
self.exportable_widgets = [] self.exportable_widgets = list()
if self.core.egl_sync_enabled: if self.core.egl_sync_enabled:
self.egl_sync_button.setText(self.tr("Disable sync")) self.egl_sync_button.setText(self.tr("Disable sync"))
@ -86,7 +83,7 @@ class LegendarySettings(QStackedWidget, Ui_legendary_settings):
def enable_sync(self): def enable_sync(self):
if not self.core.egl.programdata_path: 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.config.set("Legendary", "egl_programdata", path)
self.core.lgd.save_config() self.core.lgd.save_config()
self.core.egl.programdata_path = path self.core.egl.programdata_path = path
@ -98,16 +95,18 @@ class LegendarySettings(QStackedWidget, Ui_legendary_settings):
self.enable_sync_button.setDisabled(True) self.enable_sync_button.setDisabled(True)
def export_all(self): def export_all(self):
for w in self.exportable_widgets: for ew in self.exportable_widgets:
w.export_game() ew.export_game()
self.exportable_widgets.clear()
def import_all(self): def import_all(self):
for w in self.importable_widgets: for iw in self.importable_widgets:
w.import_game() iw.import_game()
self.importable_widgets.clear()
def save_egl_path(self): def save_egl_path(self):
self.core.lgd.config.set("Legendary", "egl_programdata", self.path_edit.text()) self.core.lgd.config.set("Legendary", "egl_programdata", self.manifest_path_edit.text())
self.core.egl.programdata_path = self.path_edit.text() self.core.egl.programdata_path = self.manifest_path_edit.text()
self.core.lgd.save_config() self.core.lgd.save_config()
self.update_egl_widget() self.update_egl_widget()
@ -131,42 +130,49 @@ class LegendarySettings(QStackedWidget, Ui_legendary_settings):
# enable sync # enable sync
self.enable_sync_button.setDisabled(False) self.enable_sync_button.setDisabled(False)
self.update_egl_widget() self.update_egl_widget()
self.setCurrentIndex(1)
def update_egl_widget(self): def update_egl_widget(self):
self.exportable_widgets = [] self.import_scroll.setVisible(bool(self.core.egl.programdata_path))
QWidget().setLayout(self.exportable_games.layout()) self.export_scroll.setVisible(bool(self.core.egl.programdata_path))
QWidget().setLayout(self.importable_games.layout()) self.export_all_button.setDisabled(not bool(self.core.egl.programdata_path))
importable_layout = QVBoxLayout() self.import_all_button.setDisabled(not bool(self.core.egl.programdata_path))
self.importable_games.setLayout(importable_layout)
exportable_layout = QVBoxLayout()
self.exportable_games.setLayout(exportable_layout)
if not 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 return
self.importable_games.setVisible(True) if self.exportable_widgets:
self.exportable_games.setVisible(True) for ew in self.exportable_widgets:
self.export_all_button.setVisible(True) # FIXME: Handle this using signals to properly update the list on python's side
self.import_all_button.setVisible(True) 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(): if self.importable_widgets:
w = EGLSyncWidget(igame, True, self.core) for iw in self.importable_widgets:
self.importable_widgets.append(w) # FIXME: Handle this using signals to properly update the list on python's side
self.exportable_games.layout().addWidget(w) try:
if len(self.core.egl_get_exportable()) == 0: iw.deleteLater()
self.exportable_games.layout().addWidget(QLabel(self.tr("No games to export"))) except RuntimeError as e:
print(e)
self.importable_widgets = [] self.importable_widgets.clear()
for game in self.core.egl_get_importable(): importable_games = self.core.egl_get_importable()
w = EGLSyncWidget(game, False, self.core) for game in importable_games:
self.importable_widgets.append(w) iw = EGLSyncWidget(game, False, self.core)
self.importable_games.layout().addWidget(w) self.importable_widgets.append(iw)
if len(self.core.egl_get_importable()) == 0: self.importable_layout.addWidget(iw)
self.importable_games.layout().addWidget(QLabel(self.tr("No games to import"))) 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): def save_path(self):
self.core.lgd.config["Legendary"]["install_dir"] = self.install_dir.text() 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): def preferred_cdn_save(self, cdn: str):
if cdn: if cdn:
self.core.lgd.config.set("Legendary", "preferred_cdn", cdn.strip(" ")) self.core.lgd.config.set("Legendary", "preferred_cdn", cdn.strip())
else: else:
self.core.lgd.config.remove_option("Legendary", "preferred_cdn") self.core.lgd.config.remove_option("Legendary", "preferred_cdn")
self.core.lgd.save_config() self.core.lgd.save_config()
@ -228,8 +234,8 @@ class LegendarySettings(QStackedWidget, Ui_legendary_settings):
class DisableSyncDialog(QDialog): class DisableSyncDialog(QDialog):
info = 1, False info = 1, False
def __init__(self): def __init__(self, parent=None):
super(DisableSyncDialog, self).__init__() super(DisableSyncDialog, self).__init__(parent=parent)
self.layout = QVBoxLayout() self.layout = QVBoxLayout()
self.question = QLabel(self.tr("Do you really want to disable sync with Epic Games Store")) 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): class EGLSyncWidget(QGroupBox):
def __init__(self, game, export: bool, core: LegendaryCore): def __init__(self, game, export: bool, core: LegendaryCore, parent=None):
super(EGLSyncWidget, self).__init__() super(EGLSyncWidget, self).__init__(parent=parent)
self.layout = QVBoxLayout() self.layout = QVBoxLayout()
self.export = export self.export = export
self.core = core self.core = core
@ -292,6 +298,12 @@ class EGLSyncWidget(QGroupBox):
def export_game(self): def export_game(self):
self.core.egl_export(self.game.app_name) 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): def import_game(self):
self.core.egl_import(self.game.app_name) 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()

View file

@ -1,6 +1,5 @@
import os import os
import platform import platform
import shutil
import subprocess import subprocess
import sys import sys
from logging import getLogger from logging import getLogger
@ -8,7 +7,7 @@ from logging import getLogger
from PyQt5.QtCore import QSettings, Qt from PyQt5.QtCore import QSettings, Qt
from PyQt5.QtWidgets import QWidget 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.components.tabs.settings.rpc_settings import RPCSettings
from rare.ui.components.tabs.settings.rare import Ui_RareSettings from rare.ui.components.tabs.settings.rare import Ui_RareSettings
from rare.utils import utils from rare.utils import utils
@ -40,7 +39,6 @@ class RareSettings(QWidget, Ui_RareSettings):
] ]
self.settings = QSettings() 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) language = self.settings.value("language", get_lang(), type=str)
self.logdir = os.path.join(cache_dir, "logs") 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.settings.setValue("language", languages[i][0])
self.interface_info.setVisible(True) 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): def init_checkboxes(self, checkboxes):
for cb in checkboxes: for cb in checkboxes:
widget, option, default = cb widget, option, default = cb

View file

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*- # -*- 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 # Created by: PyQt5 UI code generator 5.15.4
# #
@ -14,80 +14,82 @@ from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_About(object): class Ui_About(object):
def setupUi(self, About): def setupUi(self, About):
About.setObjectName("About") About.setObjectName("About")
About.resize(499, 396) About.resize(722, 345)
self.gridLayout = QtWidgets.QGridLayout(About) self.about_layout = QtWidgets.QFormLayout(About)
self.gridLayout.setObjectName("gridLayout") self.about_layout.setLabelAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.open_browser = QtWidgets.QPushButton(About) self.about_layout.setObjectName("about_layout")
self.open_browser.setObjectName("open_browser") self.title = QtWidgets.QLabel(About)
self.gridLayout.addWidget(self.open_browser, 4, 1, 1, 1) self.title.setObjectName("title")
self.about_layout.setWidget(0, QtWidgets.QFormLayout.SpanningRole, self.title)
self.version_label = QtWidgets.QLabel(About) self.version_label = QtWidgets.QLabel(About)
font = QtGui.QFont() font = QtGui.QFont()
font.setBold(True) font.setBold(True)
font.setWeight(75) font.setWeight(75)
self.version_label.setFont(font) self.version_label.setFont(font)
self.version_label.setObjectName("version_label") self.version_label.setObjectName("version_label")
self.gridLayout.addWidget(self.version_label, 2, 0, 1, 1, QtCore.Qt.AlignRight) self.about_layout.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.version_label)
self.license_label = QtWidgets.QLabel(About) self.version = QtWidgets.QLabel(About)
font = QtGui.QFont() self.version.setText("error")
font.setBold(True) self.version.setObjectName("version")
font.setWeight(75) self.about_layout.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.version)
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("<a href=\'https://github.com/Dummerle\'>Dummerle</a>")
self.dev.setOpenExternalLinks(True)
self.dev.setObjectName("dev")
self.gridLayout.addWidget(self.dev, 5, 1, 1, 1)
self.update_label = QtWidgets.QLabel(About) self.update_label = QtWidgets.QLabel(About)
font = QtGui.QFont() font = QtGui.QFont()
font.setBold(True) font.setBold(True)
font.setWeight(75) font.setWeight(75)
self.update_label.setFont(font) self.update_label.setFont(font)
self.update_label.setObjectName("update_label") self.update_label.setObjectName("update_label")
self.gridLayout.addWidget(self.update_label, 3, 0, 1, 1, QtCore.Qt.AlignRight) self.about_layout.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.update_label)
self.version = QtWidgets.QLabel(About) self.update = QtWidgets.QLabel(About)
self.version.setText("error") self.update.setText("error")
self.version.setObjectName("version") self.update.setObjectName("update")
self.gridLayout.addWidget(self.version, 2, 1, 1, 1) 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) self.dev_label = QtWidgets.QLabel(About)
font = QtGui.QFont() font = QtGui.QFont()
font.setBold(True) font.setBold(True)
font.setWeight(75) font.setWeight(75)
self.dev_label.setFont(font) self.dev_label.setFont(font)
self.dev_label.setObjectName("dev_label") self.dev_label.setObjectName("dev_label")
self.gridLayout.addWidget(self.dev_label, 5, 0, 1, 1, QtCore.Qt.AlignRight) self.about_layout.setWidget(4, QtWidgets.QFormLayout.LabelRole, self.dev_label)
self.license = QtWidgets.QLabel(About) self.dev = QtWidgets.QLabel(About)
self.license.setObjectName("license") self.dev.setText("<a href=\'https://github.com/Dummerle\'>Dummerle</a>")
self.gridLayout.addWidget(self.license, 7, 1, 1, 1) self.dev.setOpenExternalLinks(True)
self.update = QtWidgets.QLabel(About) self.dev.setObjectName("dev")
self.update.setText("error") self.about_layout.setWidget(4, QtWidgets.QFormLayout.FieldRole, self.dev)
self.update.setObjectName("update") self.lgd_dev_label = QtWidgets.QLabel(About)
self.gridLayout.addWidget(self.update, 3, 1, 1, 1) 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 = QtWidgets.QLabel(About)
self.lgd_dev.setText("<a href=\'https://github.com/derrod/\'>derrod</a>") self.lgd_dev.setText("<a href=\'https://github.com/derrod/\'>derrod</a>")
self.lgd_dev.setOpenExternalLinks(True) self.lgd_dev.setOpenExternalLinks(True)
self.lgd_dev.setObjectName("lgd_dev") 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 = QtWidgets.QLabel(About)
self.info_text.setWordWrap(True) self.info_text.setWordWrap(True)
self.info_text.setOpenExternalLinks(True) self.info_text.setOpenExternalLinks(True)
self.info_text.setObjectName("info_text") self.info_text.setObjectName("info_text")
self.gridLayout.addWidget(self.info_text, 14, 0, 1, 3) self.about_layout.setWidget(7, QtWidgets.QFormLayout.SpanningRole, self.info_text)
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.retranslateUi(About) self.retranslateUi(About)
QtCore.QMetaObject.connectSlotsByName(About) QtCore.QMetaObject.connectSlotsByName(About)
@ -95,23 +97,22 @@ class Ui_About(object):
def retranslateUi(self, About): def retranslateUi(self, About):
_translate = QtCore.QCoreApplication.translate _translate = QtCore.QCoreApplication.translate
About.setWindowTitle(_translate("About", "About")) 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 <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>"))
self.title.setText(_translate("About", "<h2>About</h2>")) self.title.setText(_translate("About", "<h2>About</h2>"))
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 <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>\n"
""))
if __name__ == "__main__": if __name__ == "__main__":
import sys import sys
app = QtWidgets.QApplication(sys.argv) app = QtWidgets.QApplication(sys.argv)
About = QtWidgets.QWidget() About = QtWidgets.QWidget()
ui = Ui_About() ui = Ui_About()

View file

@ -1,190 +1,170 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0"> <ui version="4.0">
<class>About</class> <class>About</class>
<widget class="QWidget" name="About"> <widget class="QWidget" name="About">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>499</width> <width>722</width>
<height>396</height> <height>345</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
<string>About</string> <string>About</string>
</property> </property>
<layout class="QGridLayout" name="gridLayout"> <layout class="QFormLayout" name="about_layout">
<item row="4" column="1"> <property name="labelAlignment">
<widget class="QPushButton" name="open_browser"> <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
<property name="text"> </property>
<string>Download latest release</string> <item row="0" column="0" colspan="2">
</property> <widget class="QLabel" name="title">
</widget> <property name="text">
</item> <string>&lt;h2&gt;About&lt;/h2&gt;</string>
<item row="2" column="0" alignment="Qt::AlignRight"> </property>
<widget class="QLabel" name="version_label">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Version</string>
</property>
</widget>
</item>
<item row="7" column="0" alignment="Qt::AlignRight">
<widget class="QLabel" name="license_label">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>License</string>
</property>
</widget>
</item>
<item row="6" column="0" alignment="Qt::AlignRight">
<widget class="QLabel" name="lgd_dev_label">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Legendary Developer</string>
</property>
</widget>
</item>
<item row="5" column="1">
<widget class="QLabel" name="dev">
<property name="toolTip">
<string>Github</string>
</property>
<property name="text">
<string notr="true">&lt;a href='https://github.com/Dummerle'&gt;Dummerle&lt;/a&gt;</string>
</property>
<property name="openExternalLinks">
<bool>true</bool>
</property>
</widget>
</item>
<item row="3" column="0" alignment="Qt::AlignRight">
<widget class="QLabel" name="update_label">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Update available</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLabel" name="version">
<property name="text">
<string notr="true">error</string>
</property>
</widget>
</item>
<item row="5" column="0" alignment="Qt::AlignRight">
<widget class="QLabel" name="dev_label">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Rare Developer</string>
</property>
</widget>
</item>
<item row="7" column="1">
<widget class="QLabel" name="license">
<property name="text">
<string>GNU General Public License v3.0</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QLabel" name="update">
<property name="text">
<string notr="true">error</string>
</property>
</widget>
</item>
<item row="6" column="1">
<widget class="QLabel" name="lgd_dev">
<property name="toolTip">
<string>Github</string>
</property>
<property name="text">
<string notr="true">&lt;a href='https://github.com/derrod/'&gt;derrod&lt;/a&gt;</string>
</property>
<property name="openExternalLinks">
<bool>true</bool>
</property>
</widget>
</item>
<item row="14" column="0" colspan="3">
<widget class="QLabel" name="info_text">
<property name="text">
<string>This is a beta version, so you can get bugs. If you get a bug, please report it by
creating an Issue on &lt;a href='https://github.com/Dummerle/Rare/issues'&gt;Github&lt;/a&gt;.
You can also contact me on Discord (Dummerle#7419). Or you can join the &lt;a
href='https://discord.gg/YvmABK9YSk'&gt;Discord server&lt;/a&gt;
</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
<property name="openExternalLinks">
<bool>true</bool>
</property>
</widget>
</item>
<item row="15" column="0" colspan="3">
<spacer name="about_vspacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item row="1" column="0" colspan="3">
<widget class="QLabel" name="title">
<property name="text">
<string>&lt;h2&gt;About&lt;/h2&gt;</string>
</property>
</widget>
</item>
<item row="2" column="2" rowspan="6">
<spacer name="about_hspacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget> </widget>
<resources/> </item>
<connections/> <item row="1" column="0">
<widget class="QLabel" name="version_label">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Version</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLabel" name="version">
<property name="text">
<string notr="true">error</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="update_label">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Update available</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLabel" name="update">
<property name="text">
<string notr="true">error</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QPushButton" name="open_browser">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Download latest release</string>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="dev_label">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Rare Developer</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QLabel" name="dev">
<property name="toolTip">
<string>Github</string>
</property>
<property name="text">
<string notr="true">&lt;a href='https://github.com/Dummerle'&gt;Dummerle&lt;/a&gt;</string>
</property>
<property name="openExternalLinks">
<bool>true</bool>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QLabel" name="lgd_dev_label">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Legendary Developer</string>
</property>
</widget>
</item>
<item row="5" column="1">
<widget class="QLabel" name="lgd_dev">
<property name="toolTip">
<string>Github</string>
</property>
<property name="text">
<string notr="true">&lt;a href='https://github.com/derrod/'&gt;derrod&lt;/a&gt;</string>
</property>
<property name="openExternalLinks">
<bool>true</bool>
</property>
</widget>
</item>
<item row="6" column="0">
<widget class="QLabel" name="license_label">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>License</string>
</property>
</widget>
</item>
<item row="6" column="1">
<widget class="QLabel" name="license">
<property name="text">
<string>GNU General Public License v3.0</string>
</property>
</widget>
</item>
<item row="7" column="0" colspan="2">
<widget class="QLabel" name="info_text">
<property name="text">
<string>This is a beta version, so you can get bugs. If you get a bug, please report it by creating an Issue on &lt;a href='https://github.com/Dummerle/Rare/issues'&gt;Github&lt;/a&gt;. You can also contact me on Discord (Dummerle#7419). Or you can join the &lt;a href='https://discord.gg/YvmABK9YSk'&gt;Discord server&lt;/a&gt;
</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
<property name="openExternalLinks">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui> </ui>

View file

@ -11,22 +11,20 @@
from PyQt5 import QtCore, QtGui, QtWidgets from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_legendary_settings(object): class Ui_LegendarySettings(object):
def setupUi(self, legendary_settings): def setupUi(self, LegendarySettings):
legendary_settings.setObjectName("legendary_settings") LegendarySettings.setObjectName("LegendarySettings")
legendary_settings.resize(810, 535) LegendarySettings.resize(796, 732)
self.settings = QtWidgets.QWidget() self.settings_layout = QtWidgets.QHBoxLayout(LegendarySettings)
self.settings.setObjectName("settings")
self.settings_layout = QtWidgets.QHBoxLayout(self.settings)
self.settings_layout.setObjectName("settings_layout") self.settings_layout.setObjectName("settings_layout")
self.left_layout = QtWidgets.QVBoxLayout() self.left_layout = QtWidgets.QVBoxLayout()
self.left_layout.setObjectName("left_layout") 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.install_dir_group.setObjectName("install_dir_group")
self.layout_install_dir = QtWidgets.QVBoxLayout(self.install_dir_group) self.install_dir_layout = QtWidgets.QVBoxLayout(self.install_dir_group)
self.layout_install_dir.setObjectName("layout_install_dir") self.install_dir_layout.setObjectName("install_dir_layout")
self.left_layout.addWidget(self.install_dir_group) 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_group.setObjectName("download_group")
self.download_layout = QtWidgets.QFormLayout(self.download_group) self.download_layout = QtWidgets.QFormLayout(self.download_group)
self.download_layout.setLabelAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) 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()) sizePolicy.setHeightForWidth(self.max_worker_spin.sizePolicy().hasHeightForWidth())
self.max_worker_spin.setSizePolicy(sizePolicy) self.max_worker_spin.setSizePolicy(sizePolicy)
self.max_worker_spin.setMinimum(0) 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.setProperty("value", 4)
self.max_worker_spin.setObjectName("max_worker_spin") self.max_worker_spin.setObjectName("max_worker_spin")
self.max_workers_layout.addWidget(self.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.disable_https_check.setObjectName("disable_https_check")
self.download_layout.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.disable_https_check) self.download_layout.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.disable_https_check)
self.left_layout.addWidget(self.download_group) 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) spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.left_layout.addItem(spacerItem) self.left_layout.addItem(spacerItem)
self.settings_layout.addLayout(self.left_layout) self.settings_layout.addLayout(self.left_layout)
self.right_layout = QtWidgets.QVBoxLayout() self.right_layout = QtWidgets.QVBoxLayout()
self.right_layout.setObjectName("right_layout") 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.cleanup_group.setObjectName("cleanup_group")
self.layout_clean = QtWidgets.QVBoxLayout(self.cleanup_group) self.cleanup_layout = QtWidgets.QVBoxLayout(self.cleanup_group)
self.layout_clean.setObjectName("layout_clean") self.cleanup_layout.setObjectName("cleanup_layout")
self.clean_keep_manifests_button = QtWidgets.QPushButton(self.cleanup_group) self.clean_keep_manifests_button = QtWidgets.QPushButton(self.cleanup_group)
self.clean_keep_manifests_button.setObjectName("clean_keep_manifests_button") 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 = QtWidgets.QPushButton(self.cleanup_group)
self.clean_button.setObjectName("clean_button") 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.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.egl_sync.setObjectName("egl_sync")
self.verticalLayout = QtWidgets.QVBoxLayout(self.egl_sync) self.egl_sync_layout_3 = QtWidgets.QVBoxLayout(self.egl_sync)
self.verticalLayout.setObjectName("verticalLayout") self.egl_sync_layout_3.setObjectName("egl_sync_layout_3")
self.egl_sync_button = QtWidgets.QPushButton(self.egl_sync) self.egl_sync_button = QtWidgets.QPushButton(self.egl_sync)
self.egl_sync_button.setObjectName("egl_sync_button") 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) self.right_layout.addWidget(self.egl_sync)
spacerItem1 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) spacerItem1 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.right_layout.addItem(spacerItem1) self.right_layout.addItem(spacerItem1)
self.settings_layout.addLayout(self.right_layout) 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) self.retranslateUi(LegendarySettings)
legendary_settings.setCurrentIndex(0) QtCore.QMetaObject.connectSlotsByName(LegendarySettings)
QtCore.QMetaObject.connectSlotsByName(legendary_settings)
def retranslateUi(self, legendary_settings): def retranslateUi(self, LegendarySettings):
_translate = QtCore.QCoreApplication.translate _translate = QtCore.QCoreApplication.translate
legendary_settings.setWindowTitle(_translate("legendary_settings", "LegendarySettings")) LegendarySettings.setWindowTitle(_translate("LegendarySettings", "LegendarySettings"))
self.install_dir_group.setTitle(_translate("legendary_settings", "Default Installation Directory")) self.install_dir_group.setTitle(_translate("LegendarySettings", "Default Installation Directory"))
self.download_group.setTitle(_translate("legendary_settings", "Download Settings")) self.download_group.setTitle(_translate("LegendarySettings", "Download Settings"))
self.max_workers_label.setText(_translate("legendary_settings", "Max Workers")) self.max_workers_label.setText(_translate("LegendarySettings", "Max Workers"))
self.max_workers_info_label.setText(_translate("legendary_settings", "Less is slower (0: Default)")) self.max_workers_info_label.setText(_translate("LegendarySettings", "Less is slower (0: Default)"))
self.max_memory_label.setText(_translate("legendary_settings", "Max Memory")) self.max_memory_label.setText(_translate("LegendarySettings", "Max Memory"))
self.max_memory_spin.setSuffix(_translate("legendary_settings", "MiB")) self.max_memory_spin.setSuffix(_translate("LegendarySettings", "MiB"))
self.max_memory_info_label.setText(_translate("legendary_settings", "Less is slower (0: Default)")) self.max_memory_info_label.setText(_translate("LegendarySettings", "Less is slower (0: Default)"))
self.preferred_cdn_label.setText(_translate("legendary_settings", "Preferred CDN")) self.preferred_cdn_label.setText(_translate("LegendarySettings", "Preferred CDN"))
self.preferred_cdn_line.setPlaceholderText(_translate("legendary_settings", "Default")) self.preferred_cdn_line.setPlaceholderText(_translate("LegendarySettings", "Default"))
self.disable_https_label.setText(_translate("legendary_settings", "Disable HTTPS")) self.disable_https_label.setText(_translate("LegendarySettings", "Disable HTTPS"))
self.cleanup_group.setTitle(_translate("legendary_settings", "Cleanup")) self.egl_sync_group.setTitle(_translate("LegendarySettings", "Sync with Epic Games Launcher"))
self.clean_keep_manifests_button.setText(_translate("legendary_settings", "Clean, but keep manifests")) self.manifest_path_info.setText(_translate("LegendarySettings", "TextLabel"))
self.clean_button.setText(_translate("legendary_settings", "Remove everything")) self.export_group.setTitle(_translate("LegendarySettings", "Exportable Games"))
self.egl_sync.setTitle(_translate("legendary_settings", "EGL Sync")) self.export_label.setText(_translate("LegendarySettings", "No games to export to EGS"))
self.egl_sync_button.setText(_translate("legendary_settings", "Sync Settings")) self.export_all_button.setText(_translate("LegendarySettings", "Export all Games"))
self.back_button.setText(_translate("legendary_settings", "Back")) self.import_group.setTitle(_translate("LegendarySettings", "Importable"))
self.title.setText(_translate("legendary_settings", "<h2>Sync Games with Epic Games Store</h2>")) self.import_label.setText(_translate("LegendarySettings", "No games to import from EGS"))
self.path_info.setText(_translate("legendary_settings", "TextLabel")) self.import_all_button.setText(_translate("LegendarySettings", "Import all Games"))
self.exportable_games.setTitle(_translate("legendary_settings", "Exportable Games")) self.enable_sync_group.setTitle(_translate("LegendarySettings", "Enable Sync"))
self.importable_games.setTitle(_translate("legendary_settings", "Importable")) self.sync_once_button.setText(_translate("LegendarySettings", "Sync once"))
self.export_all_button.setText(_translate("legendary_settings", "Export all Games")) self.enable_sync_button.setText(_translate("LegendarySettings", "Enable automatic sync"))
self.import_all_button.setText(_translate("legendary_settings", "Import all Games")) self.cleanup_group.setTitle(_translate("LegendarySettings", "Cleanup"))
self.groupBox.setTitle(_translate("legendary_settings", "Enable Sync")) self.clean_keep_manifests_button.setText(_translate("LegendarySettings", "Clean, but keep manifests"))
self.sync_once_button.setText(_translate("legendary_settings", "Sync once")) self.clean_button.setText(_translate("LegendarySettings", "Remove everything"))
self.enable_sync_button.setText(_translate("legendary_settings", "Enable automatic sync")) self.egl_sync.setTitle(_translate("LegendarySettings", "EGL Sync"))
self.egl_sync_button.setText(_translate("LegendarySettings", "Sync Settings"))
if __name__ == "__main__": if __name__ == "__main__":
import sys import sys
app = QtWidgets.QApplication(sys.argv) app = QtWidgets.QApplication(sys.argv)
legendary_settings = QtWidgets.QStackedWidget() LegendarySettings = QtWidgets.QWidget()
ui = Ui_legendary_settings() ui = Ui_LegendarySettings()
ui.setupUi(legendary_settings) ui.setupUi(LegendarySettings)
legendary_settings.show() LegendarySettings.show()
sys.exit(app.exec_()) sys.exit(app.exec_())

View file

@ -1,340 +1,383 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0"> <ui version="4.0">
<class>legendary_settings</class> <class>LegendarySettings</class>
<widget class="QStackedWidget" name="legendary_settings"> <widget class="QWidget" name="LegendarySettings">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>810</width> <width>796</width>
<height>535</height> <height>732</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
<string>LegendarySettings</string> <string>LegendarySettings</string>
</property> </property>
<property name="currentIndex"> <layout class="QHBoxLayout" name="settings_layout">
<number>0</number> <item>
</property> <layout class="QVBoxLayout" name="left_layout">
<widget class="QWidget" name="settings"> <item>
<layout class="QHBoxLayout" name="settings_layout"> <widget class="QGroupBox" name="install_dir_group">
<item> <property name="title">
<layout class="QVBoxLayout" name="left_layout"> <string>Default Installation Directory</string>
<item> </property>
<widget class="QGroupBox" name="install_dir_group"> <layout class="QVBoxLayout" name="install_dir_layout"/>
<property name="title"> </widget>
<string>Default Installation Directory</string> </item>
<item>
<widget class="QGroupBox" name="download_group">
<property name="title">
<string>Download Settings</string>
</property>
<layout class="QFormLayout" name="download_layout">
<property name="labelAlignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property> </property>
<layout class="QVBoxLayout" name="layout_install_dir"/> <item row="0" column="0">
</widget> <widget class="QLabel" name="max_workers_label">
</item> <property name="sizePolicy">
<item> <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
<widget class="QGroupBox" name="download_group"> <horstretch>0</horstretch>
<property name="title"> <verstretch>0</verstretch>
<string>Download Settings</string> </sizepolicy>
</property> </property>
<layout class="QFormLayout" name="download_layout"> <property name="text">
<property name="labelAlignment"> <string>Max Workers</string>
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> </property>
</property> </widget>
<item row="0" column="0"> </item>
<widget class="QLabel" name="max_workers_label"> <item row="0" column="1">
<property name="sizePolicy"> <layout class="QHBoxLayout" name="max_workers_layout">
<sizepolicy hsizetype="Maximum" vsizetype="Preferred"> <item>
<horstretch>0</horstretch> <widget class="QSpinBox" name="max_worker_spin">
<verstretch>0</verstretch> <property name="sizePolicy">
</sizepolicy> <sizepolicy hsizetype="Maximum" vsizetype="Fixed">
</property> <horstretch>0</horstretch>
<property name="text"> <verstretch>0</verstretch>
<string>Max Workers</string> </sizepolicy>
</property> </property>
</widget> <property name="minimum">
</item> <number>0</number>
<item row="0" column="1"> </property>
<layout class="QHBoxLayout" name="max_workers_layout"> <property name="maximum">
<item> <number>16</number>
<widget class="QSpinBox" name="max_worker_spin"> </property>
<property name="sizePolicy"> <property name="value">
<sizepolicy hsizetype="Maximum" vsizetype="Fixed"> <number>4</number>
<horstretch>0</horstretch> </property>
<verstretch>0</verstretch> </widget>
</sizepolicy> </item>
</property> <item>
<property name="minimum"> <widget class="QLabel" name="max_workers_info_label">
<number>0</number> <property name="font">
</property> <font>
<property name="maximum"> <italic>true</italic>
<number>128</number> </font>
</property> </property>
<property name="value"> <property name="text">
<number>4</number> <string>Less is slower (0: Default)</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="1" column="0">
<widget class="QLabel" name="max_memory_label">
<property name="text">
<string>Max Memory</string>
</property>
</widget>
</item>
<item row="1" column="1">
<layout class="QHBoxLayout" name="max_memory_layout">
<item>
<widget class="QSpinBox" name="max_memory_spin">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="suffix">
<string>MiB</string>
</property>
<property name="minimum">
<number>0</number>
</property>
<property name="maximum">
<number>10240</number>
</property>
<property name="singleStep">
<number>128</number>
</property>
<property name="value">
<number>1024</number>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="max_memory_info_label">
<property name="font">
<font>
<italic>true</italic>
</font>
</property>
<property name="text">
<string>Less is slower (0: Default)</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="2" column="0">
<widget class="QLabel" name="preferred_cdn_label">
<property name="text">
<string>Preferred CDN</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLineEdit" name="preferred_cdn_line">
<property name="placeholderText">
<string>Default</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="disable_https_label">
<property name="text">
<string>Disable HTTPS</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QCheckBox" name="disable_https_check">
<property name="text">
<string/>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="egl_sync_group">
<property name="title">
<string>Sync with Epic Games Launcher</string>
</property>
<layout class="QVBoxLayout" name="egl_sync_layout">
<item>
<layout class="QVBoxLayout" name="manifest_path_layout"/>
</item>
<item>
<widget class="QLabel" name="manifest_path_info">
<property name="text">
<string>TextLabel</string>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="export_import_layout">
<item>
<widget class="QGroupBox" name="export_group">
<property name="title">
<string>Exportable Games</string>
</property>
<layout class="QVBoxLayout" name="export_layout">
<item>
<widget class="QLabel" name="export_label">
<property name="text">
<string>No games to export to EGS</string>
</property>
</widget>
</item>
<item>
<widget class="QScrollArea" name="export_scroll">
<property name="sizeAdjustPolicy">
<enum>QAbstractScrollArea::AdjustIgnored</enum>
</property>
<property name="widgetResizable">
<bool>true</bool>
</property>
<widget class="QWidget" name="export_contents">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>264</width>
<height>16</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Maximum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<layout class="QVBoxLayout" name="exportable_layout"/>
</widget>
</widget>
</item>
<item alignment="Qt::AlignRight">
<widget class="QPushButton" name="export_all_button">
<property name="text">
<string>Export all Games</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="import_group">
<property name="title">
<string>Importable</string>
</property>
<layout class="QVBoxLayout" name="import_layout">
<item>
<widget class="QLabel" name="import_label">
<property name="text">
<string>No games to import from EGS</string>
</property>
</widget>
</item>
<item>
<widget class="QScrollArea" name="import_scroll">
<property name="sizeAdjustPolicy">
<enum>QAbstractScrollArea::AdjustIgnored</enum>
</property>
<property name="widgetResizable">
<bool>true</bool>
</property>
<widget class="QWidget" name="import_contents">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>264</width>
<height>16</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Maximum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<layout class="QVBoxLayout" name="importable_layout"/>
</widget>
</widget>
</item>
<item alignment="Qt::AlignRight">
<widget class="QPushButton" name="import_all_button">
<property name="text">
<string>Import all Games</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QGroupBox" name="enable_sync_group">
<property name="title">
<string>Enable Sync</string>
</property>
<layout class="QHBoxLayout" name="enable_sync_layout">
<item alignment="Qt::AlignRight">
<widget class="QPushButton" name="sync_once_button">
<property name="text">
<string>Sync once</string>
</property> </property>
</widget> </widget>
</item> </item>
<item> <item alignment="Qt::AlignRight">
<widget class="QLabel" name="max_workers_info_label"> <widget class="QPushButton" name="enable_sync_button">
<property name="font">
<font>
<italic>true</italic>
</font>
</property>
<property name="text"> <property name="text">
<string>Less is slower (0: Default)</string> <string>Enable automatic sync</string>
</property> </property>
</widget> </widget>
</item> </item>
</layout> </layout>
</item> </widget>
<item row="1" column="0"> </item>
<widget class="QLabel" name="max_memory_label"> </layout>
<property name="text"> </widget>
<string>Max Memory</string> </item>
</property> <item>
</widget> <spacer name="left_vspacer">
</item> <property name="orientation">
<item row="1" column="1"> <enum>Qt::Vertical</enum>
<layout class="QHBoxLayout" name="max_memory_layout"> </property>
<item> <property name="sizeHint" stdset="0">
<widget class="QSpinBox" name="max_memory_spin"> <size>
<property name="sizePolicy"> <width>20</width>
<sizepolicy hsizetype="Maximum" vsizetype="Fixed"> <height>40</height>
<horstretch>0</horstretch> </size>
<verstretch>0</verstretch> </property>
</sizepolicy> </spacer>
</property> </item>
<property name="suffix"> </layout>
<string>MiB</string> </item>
</property> <item>
<property name="minimum"> <layout class="QVBoxLayout" name="right_layout">
<number>0</number> <item>
</property> <widget class="QGroupBox" name="cleanup_group">
<property name="maximum"> <property name="title">
<number>10240</number> <string>Cleanup</string>
</property> </property>
<property name="singleStep"> <layout class="QVBoxLayout" name="cleanup_layout">
<number>128</number> <item>
</property> <widget class="QPushButton" name="clean_keep_manifests_button">
<property name="value"> <property name="text">
<number>1024</number> <string>Clean, but keep manifests</string>
</property> </property>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QLabel" name="max_memory_info_label"> <widget class="QPushButton" name="clean_button">
<property name="font"> <property name="text">
<font> <string>Remove everything</string>
<italic>true</italic> </property>
</font> </widget>
</property> </item>
<property name="text"> </layout>
<string>Less is slower (0: Default)</string> </widget>
</property> </item>
</widget> <item>
</item> <widget class="QGroupBox" name="egl_sync">
</layout> <property name="title">
</item> <string>EGL Sync</string>
<item row="2" column="0"> </property>
<widget class="QLabel" name="preferred_cdn_label"> <layout class="QVBoxLayout" name="egl_sync_layout_3">
<property name="text"> <item>
<string>Preferred CDN</string> <widget class="QPushButton" name="egl_sync_button">
</property> <property name="text">
</widget> <string>Sync Settings</string>
</item> </property>
<item row="2" column="1"> </widget>
<widget class="QLineEdit" name="preferred_cdn_line"> </item>
<property name="placeholderText"> </layout>
<string>Default</string> </widget>
</property> </item>
</widget> <item>
</item> <spacer name="right_vspacer">
<item row="3" column="0"> <property name="orientation">
<widget class="QLabel" name="disable_https_label"> <enum>Qt::Vertical</enum>
<property name="text"> </property>
<string>Disable HTTPS</string> <property name="sizeHint" stdset="0">
</property> <size>
</widget> <width>20</width>
</item> <height>40</height>
<item row="3" column="1"> </size>
<widget class="QCheckBox" name="disable_https_check"> </property>
<property name="text"> </spacer>
<string/> </item>
</property> </layout>
</widget> </item>
</item> </layout>
</layout>
</widget>
</item>
<item>
<spacer name="left_vspacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item>
<layout class="QVBoxLayout" name="right_layout">
<item>
<widget class="QGroupBox" name="cleanup_group">
<property name="title">
<string>Cleanup</string>
</property>
<layout class="QVBoxLayout" name="layout_clean">
<item>
<widget class="QPushButton" name="clean_keep_manifests_button">
<property name="text">
<string>Clean, but keep manifests</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="clean_button">
<property name="text">
<string>Remove everything</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="egl_sync">
<property name="title">
<string>EGL Sync</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QPushButton" name="egl_sync_button">
<property name="text">
<string>Sync Settings</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<spacer name="right_vspacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
</widget>
<widget class="QWidget" name="egl_sync_page">
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QPushButton" name="back_button">
<property name="text">
<string>Back</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="title">
<property name="text">
<string>&lt;h2&gt;Sync Games with Epic Games Store&lt;/h2&gt;</string>
</property>
</widget>
</item>
<item>
<layout class="QVBoxLayout" name="pathedit_placeholder"/>
</item>
<item>
<widget class="QLabel" name="path_info">
<property name="text">
<string>TextLabel</string>
</property>
</widget>
</item>
<item>
<layout class="QGridLayout" name="layout_export_import">
<item row="0" column="0">
<widget class="QGroupBox" name="exportable_games">
<property name="title">
<string>Exportable Games</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_3"/>
</widget>
</item>
<item row="0" column="1">
<widget class="QGroupBox" name="importable_games">
<property name="title">
<string>Importable</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_4"/>
</widget>
</item>
<item row="1" column="0">
<widget class="QPushButton" name="export_all_button">
<property name="text">
<string>Export all Games</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QPushButton" name="import_all_button">
<property name="text">
<string>Import all Games</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>Enable Sync</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QPushButton" name="sync_once_button">
<property name="text">
<string>Sync once</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="enable_sync_button">
<property name="text">
<string>Enable automatic sync</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</widget> </widget>
<resources/> <resources/>
<connections/> <connections/>