desktop_app/app/controllers/main_controller.py
2025-09-26 20:44:28 +03:00

70 lines
2.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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}")