import os from getpass import getuser from logging import getLogger from PyQt5.QtCore import pyqtSignal from PyQt5.QtWidgets import QWidget from custom_legendary.core import LegendaryCore from rare.ui.components.dialogs.login.import_login import Ui_ImportLogin logger = getLogger("ImportLogin") class ImportLogin(QWidget, Ui_ImportLogin): success = pyqtSignal() changed = pyqtSignal() if os.name == "nt": localappdata = os.path.expandvars("%LOCALAPPDATA%") else: localappdata = os.path.join("drive_c/users", getuser(), "Local Settings/Application Data") appdata_path = os.path.join(localappdata, "EpicGamesLauncher/Saved/Config/Windows") found = False def __init__(self, core: LegendaryCore, parent=None): super(ImportLogin, self).__init__(parent=parent) self.setupUi(self) self.core = core if os.name == "nt": if not self.core.egl.appdata_path and os.path.exists(self.egl_data_path): self.core.egl.appdata_path = self.appdata_path if not self.core.egl.appdata_path: self.status_label.setText(self.tr("Could not find EGL Program Data.")) else: self.status_label.setText(self.tr("Found EGL Program Data. Click 'Next' to import them.")) self.found = True else: self.info_label.setText( self.tr( "Please select the Wine prefix where Epic Games Launcher is installed. ") + self.info_label.text() ) prefixes = self.get_wine_prefixes() if len(prefixes): self.prefix_combo.addItems(prefixes) self.status_label.setText(self.tr("Select the Wine prefix you want to import.")) else: self.status_label.setText(self.tr("Could not any EGL Program Data.")) self.prefix_combo.editTextChanged.connect(self.changed.emit) def get_wine_prefixes(self): possible_prefixes = [ os.path.expanduser("~/.wine"), os.path.expanduser("~/Games/epic-games-store"), os.path.expanduser("~/Wine/Stores") ] prefixes = [] for prefix in possible_prefixes: if os.path.exists(os.path.join(prefix, self.appdata_path)): prefixes.append(prefix) return prefixes def is_valid(self): if os.name == "nt": return self.found else: return os.path.exists(os.path.join(self.prefix_combo.currentText(), self.appdata_path)) def do_login(self): self.status_label.setText(self.tr("Loading...")) if os.name == "nt": pass else: self.core.egl.appdata_path = os.path.join(self.prefix_combo.currentText(), self.appdata_path) try: if self.core.auth_import(): logger.info(f"Logged in as {self.core.lgd.userdata['displayName']}") self.success.emit() else: self.status_label.setText(self.tr("Login failed.")) logger.warning("Failed to import existing session") except Exception as e: logger.warning(e)