Update
This commit is contained in:
parent
f43bf14167
commit
2e32ffa9e8
@ -18,6 +18,8 @@ class LoginDialog(QDialog):
|
|||||||
self.auth_result = None
|
self.auth_result = None
|
||||||
self.signals = LoginSignals()
|
self.signals = LoginSignals()
|
||||||
self.login_timeout = 5 # Таймаут в секундах
|
self.login_timeout = 5 # Таймаут в секундах
|
||||||
|
# Кэшируем состояние UI
|
||||||
|
self._is_logging_in = False
|
||||||
self.setObjectName("login-dialog")
|
self.setObjectName("login-dialog")
|
||||||
self.setup_ui()
|
self.setup_ui()
|
||||||
|
|
||||||
@ -77,6 +79,9 @@ class LoginDialog(QDialog):
|
|||||||
|
|
||||||
def handle_login(self):
|
def handle_login(self):
|
||||||
"""Обработчик нажатия кнопки входа"""
|
"""Обработчик нажатия кнопки входа"""
|
||||||
|
if self._is_logging_in:
|
||||||
|
return
|
||||||
|
|
||||||
username = self.username.text().strip()
|
username = self.username.text().strip()
|
||||||
password = self.password.text().strip()
|
password = self.password.text().strip()
|
||||||
|
|
||||||
@ -88,7 +93,7 @@ class LoginDialog(QDialog):
|
|||||||
)
|
)
|
||||||
return
|
return
|
||||||
|
|
||||||
# Отключаем кнопку на время авторизации
|
self._is_logging_in = True
|
||||||
self.login_button.setEnabled(False)
|
self.login_button.setEnabled(False)
|
||||||
self.login_button.setText("Вход...")
|
self.login_button.setText("Вход...")
|
||||||
|
|
||||||
|
|||||||
@ -51,9 +51,11 @@ class MainWindow(QMainWindow):
|
|||||||
def __init__(self):
|
def __init__(self):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
|
|
||||||
|
# Кэшируем часто используемые виджеты
|
||||||
|
self._cached_widgets = {}
|
||||||
|
|
||||||
# Загружаем стили
|
# Загружаем стили
|
||||||
with open("assets/styles/main.qss", "r") as f:
|
self._load_styles()
|
||||||
self.setStyleSheet(f.read())
|
|
||||||
|
|
||||||
# Создаем event loop для асинхронных операций
|
# Создаем event loop для асинхронных операций
|
||||||
self.loop = asyncio.new_event_loop()
|
self.loop = asyncio.new_event_loop()
|
||||||
@ -88,7 +90,25 @@ class MainWindow(QMainWindow):
|
|||||||
}
|
}
|
||||||
|
|
||||||
self.settings = self.load_settings()
|
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.setWindowTitle("WoW 3.3.5 Launcher")
|
||||||
self.setMinimumSize(1200, 800)
|
self.setMinimumSize(1200, 800)
|
||||||
|
|
||||||
@ -114,20 +134,23 @@ class MainWindow(QMainWindow):
|
|||||||
# Первоначальное получение статуса
|
# Первоначальное получение статуса
|
||||||
self.update_server_status()
|
self.update_server_status()
|
||||||
|
|
||||||
self.current_user = None # Текущий пользователь
|
# Обновляем UI если есть сохраненная сессия
|
||||||
|
if self.current_user:
|
||||||
# Проверяем сохраненную авторизацию
|
|
||||||
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"]
|
|
||||||
)
|
|
||||||
self.update_ui_after_login()
|
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):
|
def create_content(self):
|
||||||
content = Card("НОВОСТИ")
|
content = Card("НОВОСТИ")
|
||||||
@ -604,20 +627,54 @@ class MainWindow(QMainWindow):
|
|||||||
|
|
||||||
def update_ui_after_login(self):
|
def update_ui_after_login(self):
|
||||||
"""Обновляет UI после успешной авторизации"""
|
"""Обновляет UI после успешной авторизации"""
|
||||||
if self.current_user:
|
|
||||||
# Сохраняем данные авторизации
|
# Сохраняем данные авторизации
|
||||||
self.settings["auth"] = {
|
self.settings['auth']['username'] = self.current_user.username
|
||||||
"username": self.current_user.username,
|
self.settings['auth']['account_id'] = self.current_user.account_id
|
||||||
"account_id": self.current_user.account_id,
|
self.save_settings()
|
||||||
"auto_login": True
|
|
||||||
}
|
|
||||||
self.save_settings() # Теперь этот вызов должен работать
|
|
||||||
# Обновляем кнопку
|
# Обновляем кнопку
|
||||||
self.account_btn.setText(self.current_user.username)
|
self.account_btn.setText(self.current_user.username)
|
||||||
self.account_btn.setProperty("class", "account-button")
|
self.account_btn.setProperty("class", "account-button")
|
||||||
self.account_btn.style().unpolish(self.account_btn)
|
self.account_btn.style().unpolish(self.account_btn)
|
||||||
self.account_btn.style().polish(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):
|
def show_login_dialog(self):
|
||||||
"""Показывает диалог авторизации"""
|
"""Показывает диалог авторизации"""
|
||||||
if not self.current_user: # Если пользователь не авторизован
|
if not self.current_user: # Если пользователь не авторизован
|
||||||
@ -651,17 +708,6 @@ class MainWindow(QMainWindow):
|
|||||||
QPoint(0, self.account_btn.height())
|
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:
|
def create_nav_button(self, text: str, icon_path: str) -> QPushButton:
|
||||||
"""Создает навигационную кнопку"""
|
"""Создает навигационную кнопку"""
|
||||||
btn = QPushButton(text)
|
btn = QPushButton(text)
|
||||||
@ -898,8 +944,16 @@ class SettingsDialog(QDialog):
|
|||||||
|
|
||||||
# Реалм-лист
|
# Реалм-лист
|
||||||
realmlist = game_tab.findChild(QLineEdit, "realmlist_input").text()
|
realmlist = game_tab.findChild(QLineEdit, "realmlist_input").text()
|
||||||
|
old_realmlist = self.settings['game'].get('realmlist', '')
|
||||||
self.settings['game']['realmlist'] = 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()
|
launch_options = game_tab.findChild(QLineEdit, "launch_options").text()
|
||||||
self.settings['game']['launch_options'] = launch_options
|
self.settings['game']['launch_options'] = launch_options
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user