Update
This commit is contained in:
parent
f43bf14167
commit
2e32ffa9e8
@ -18,6 +18,8 @@ class LoginDialog(QDialog):
|
||||
self.auth_result = None
|
||||
self.signals = LoginSignals()
|
||||
self.login_timeout = 5 # Таймаут в секундах
|
||||
# Кэшируем состояние UI
|
||||
self._is_logging_in = False
|
||||
self.setObjectName("login-dialog")
|
||||
self.setup_ui()
|
||||
|
||||
@ -77,6 +79,9 @@ class LoginDialog(QDialog):
|
||||
|
||||
def handle_login(self):
|
||||
"""Обработчик нажатия кнопки входа"""
|
||||
if self._is_logging_in:
|
||||
return
|
||||
|
||||
username = self.username.text().strip()
|
||||
password = self.password.text().strip()
|
||||
|
||||
@ -88,7 +93,7 @@ class LoginDialog(QDialog):
|
||||
)
|
||||
return
|
||||
|
||||
# Отключаем кнопку на время авторизации
|
||||
self._is_logging_in = True
|
||||
self.login_button.setEnabled(False)
|
||||
self.login_button.setText("Вход...")
|
||||
|
||||
|
||||
@ -51,9 +51,11 @@ class MainWindow(QMainWindow):
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
|
||||
# Кэшируем часто используемые виджеты
|
||||
self._cached_widgets = {}
|
||||
|
||||
# Загружаем стили
|
||||
with open("assets/styles/main.qss", "r") as f:
|
||||
self.setStyleSheet(f.read())
|
||||
self._load_styles()
|
||||
|
||||
# Создаем event loop для асинхронных операций
|
||||
self.loop = asyncio.new_event_loop()
|
||||
@ -88,7 +90,25 @@ class MainWindow(QMainWindow):
|
||||
}
|
||||
|
||||
self.settings = self.load_settings()
|
||||
self.game_launcher = GameLauncher(self.settings)
|
||||
self.current_user = None
|
||||
|
||||
# Проверяем сохраненные данные авторизации
|
||||
auth = self.settings.get('auth', {})
|
||||
if auth.get('username') and auth.get('account_id'):
|
||||
self.current_user = AuthResult(
|
||||
success=True,
|
||||
message="Сессия восстановлена",
|
||||
username=auth['username'],
|
||||
account_id=auth['account_id']
|
||||
)
|
||||
# Обновляем данные в GameLauncher
|
||||
self.game_launcher.set_account_info(
|
||||
auth['username'],
|
||||
auth['account_id']
|
||||
)
|
||||
|
||||
# Создаем UI
|
||||
self.setWindowTitle("WoW 3.3.5 Launcher")
|
||||
self.setMinimumSize(1200, 800)
|
||||
|
||||
@ -114,20 +134,23 @@ class MainWindow(QMainWindow):
|
||||
# Первоначальное получение статуса
|
||||
self.update_server_status()
|
||||
|
||||
self.current_user = None # Текущий пользователь
|
||||
|
||||
# Проверяем сохраненную авторизацию
|
||||
auth_settings = self.settings.get("auth", {})
|
||||
if auth_settings.get("auto_login"):
|
||||
self.current_user = AuthResult(
|
||||
success=True,
|
||||
message="Успешная авторизация",
|
||||
account_id=auth_settings["account_id"],
|
||||
username=auth_settings["username"]
|
||||
)
|
||||
# Обновляем UI если есть сохраненная сессия
|
||||
if self.current_user:
|
||||
self.update_ui_after_login()
|
||||
|
||||
self.game_launcher = GameLauncher(self.settings)
|
||||
def _load_styles(self):
|
||||
"""Загрузка стилей"""
|
||||
try:
|
||||
with open("assets/styles/main.qss", "r") as f:
|
||||
self.setStyleSheet(f.read())
|
||||
except Exception as e:
|
||||
self.logger.error(f"Error loading styles: {e}")
|
||||
|
||||
def _get_widget(self, name: str):
|
||||
"""Получение кэшированного виджета"""
|
||||
if name not in self._cached_widgets:
|
||||
self._cached_widgets[name] = self.findChild(QWidget, name)
|
||||
return self._cached_widgets[name]
|
||||
|
||||
def create_content(self):
|
||||
content = Card("НОВОСТИ")
|
||||
@ -604,19 +627,53 @@ class MainWindow(QMainWindow):
|
||||
|
||||
def update_ui_after_login(self):
|
||||
"""Обновляет UI после успешной авторизации"""
|
||||
if self.current_user:
|
||||
# Сохраняем данные авторизации
|
||||
self.settings["auth"] = {
|
||||
"username": self.current_user.username,
|
||||
"account_id": self.current_user.account_id,
|
||||
"auto_login": True
|
||||
}
|
||||
self.save_settings() # Теперь этот вызов должен работать
|
||||
# Обновляем кнопку
|
||||
self.account_btn.setText(self.current_user.username)
|
||||
self.account_btn.setProperty("class", "account-button")
|
||||
self.account_btn.style().unpolish(self.account_btn)
|
||||
self.account_btn.style().polish(self.account_btn)
|
||||
# Сохраняем данные авторизации
|
||||
self.settings['auth']['username'] = self.current_user.username
|
||||
self.settings['auth']['account_id'] = self.current_user.account_id
|
||||
self.save_settings()
|
||||
|
||||
# Обновляем кнопку
|
||||
self.account_btn.setText(self.current_user.username)
|
||||
self.account_btn.setProperty("class", "account-button")
|
||||
self.account_btn.style().unpolish(self.account_btn)
|
||||
self.account_btn.style().polish(self.account_btn)
|
||||
|
||||
# Включаем кнопку запуска если путь к игре указан
|
||||
if self.settings.get('game', {}).get('path'):
|
||||
self.play_button.setEnabled(True)
|
||||
|
||||
def create_account_menu(self):
|
||||
"""Создает меню аккаунта"""
|
||||
menu = QMenu(self)
|
||||
menu.setObjectName("account-menu")
|
||||
|
||||
# Добавляем пункты меню
|
||||
logout_action = QAction("Выйти", self)
|
||||
logout_action.triggered.connect(self.logout)
|
||||
menu.addAction(logout_action)
|
||||
|
||||
# Привязываем меню к кнопке
|
||||
self.account_btn.setMenu(menu)
|
||||
|
||||
def logout(self):
|
||||
"""Выход из аккаунта"""
|
||||
# Очищаем данные авторизации
|
||||
self.settings['auth']['username'] = None
|
||||
self.settings['auth']['account_id'] = None
|
||||
self.settings['auth']['auto_login'] = False
|
||||
self.settings['auth']['saved_password'] = ""
|
||||
|
||||
# Сохраняем настройки
|
||||
self.save_settings()
|
||||
|
||||
# Обновляем UI
|
||||
self.account_btn.setText("Войти")
|
||||
self.account_btn.setMenu(None)
|
||||
self.play_button.setEnabled(False)
|
||||
self.current_user = None
|
||||
|
||||
# Очищаем данные в GameLauncher
|
||||
self.game_launcher.set_account_info(None, None)
|
||||
|
||||
def show_login_dialog(self):
|
||||
"""Показывает диалог авторизации"""
|
||||
@ -651,17 +708,6 @@ class MainWindow(QMainWindow):
|
||||
QPoint(0, self.account_btn.height())
|
||||
))
|
||||
|
||||
def logout(self):
|
||||
"""Выход из аккаунта"""
|
||||
self.current_user = None
|
||||
# Очищаем данные авторизации
|
||||
self.settings["auth"] = self.default_settings["auth"]
|
||||
self.save_settings()
|
||||
self.account_btn.setText("Войти")
|
||||
self.account_btn.setProperty("class", "login-button")
|
||||
self.account_btn.style().unpolish(self.account_btn)
|
||||
self.account_btn.style().polish(self.account_btn)
|
||||
|
||||
def create_nav_button(self, text: str, icon_path: str) -> QPushButton:
|
||||
"""Создает навигационную кнопку"""
|
||||
btn = QPushButton(text)
|
||||
@ -898,8 +944,16 @@ class SettingsDialog(QDialog):
|
||||
|
||||
# Реалм-лист
|
||||
realmlist = game_tab.findChild(QLineEdit, "realmlist_input").text()
|
||||
old_realmlist = self.settings['game'].get('realmlist', '')
|
||||
self.settings['game']['realmlist'] = realmlist
|
||||
|
||||
# Если изменился реалм-лист или путь к игре, обновляем файл
|
||||
if (realmlist != old_realmlist or game_path != self.settings['game'].get('path', '')) and game_path:
|
||||
from src.utils.game_launcher import GameLauncher
|
||||
launcher = GameLauncher(self.settings)
|
||||
if not launcher.update_realmlist(game_path, realmlist):
|
||||
raise Exception("Не удалось обновить realmlist.wtf")
|
||||
|
||||
# Параметры запуска
|
||||
launch_options = game_tab.findChild(QLineEdit, "launch_options").text()
|
||||
self.settings['game']['launch_options'] = launch_options
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user