from PySide6.QtWidgets import QStackedWidget from app.ui.views.login_view import LoginView from app.ui.views.yobble_home_view import YobbleHomeView # <--- Изменено from typing import Optional from threading import Thread import time # эмуляция задержки от сервера import asyncio from app.core.database import get_last_login, get_session, set_last_login class MainController(QStackedWidget): def __init__(self): super().__init__() self.login_view: Optional[LoginView] = None self.yobble_home_view: Optional[YobbleHomeView] = None # <--- Изменено self.init_app() def init_app(self): """Проверяет наличие сессии для автологина.""" last_login = get_last_login() if last_login: session = get_session(last_login) if session: self.handle_login_success(last_login) return self.show_login() def show_login(self): self.login_view = LoginView(on_login=self.handle_login_success) self.addWidget(self.login_view) self.setCurrentWidget(self.login_view) self.login_view.show() def handle_login_success(self, username: str): """Обрабатывает успешный вход в систему.""" set_last_login(username) if self.login_view: self.login_view.close() self.removeWidget(self.login_view) self.login_view = None # Отображаем новый главный экран self.yobble_home_view = YobbleHomeView(username=username) self.addWidget(self.yobble_home_view) self.setCurrentWidget(self.yobble_home_view) self.yobble_home_view.show() # 🔹 Оставляем фоновое обновление на будущее Thread(target=self.update_data_from_server, args=(username,), daemon=True).start() def update_data_from_server(self, username: str): """ В фоновом режиме обновляет данные с сервера. Эмулирует задержку и предзагружает права доступа. """ # Эмуляция запроса time.sleep(2) print(f"[Sync] Обновляем данные для пользователя: {username}") if self.yobble_home_view: print("[Sync] Запускаем предзагрузку прав доступа...") try: # Запускаем асинхронную функцию в текущем потоке asyncio.run(self.yobble_home_view.preload_permissions()) print("[Sync] Предзагрузка прав доступа завершена.") except Exception as e: print(f"[Sync] Ошибка во время предзагрузки прав: {e}")