This commit is contained in:
unknown 2025-09-26 20:56:54 +03:00
parent 66334803ef
commit 730262fe3a
2 changed files with 54 additions and 7 deletions

View File

@ -2,7 +2,7 @@ DEBUG = True
API_SCHEME = "https"
API_HOST = "api.yobble.org"
BASE_URL = f"{API_SCHEME}://{API_HOST}"
APP_VERSION = "0.1_login_screen_windows"
APP_VERSION = "0.2_home_screen"
APP_NAME = "yobble messenger"
APP_HEADER = f"{APP_NAME}"
if DEBUG: APP_HEADER=f"{APP_HEADER} ({APP_VERSION})"

View File

@ -25,6 +25,7 @@ class YobbleHomeView(QWidget):
self.setWindowTitle(f"Yobble Home - {username}")
self.setMinimumSize(360, 640)
self.permission_cache = set()
self.permissions_preloaded = False
# --- Основной макет ---
# Используем QHBoxLayout, чтобы можно было разместить меню и контент рядом
@ -240,16 +241,31 @@ class YobbleHomeView(QWidget):
return button
def setup_content_pages(self):
self.content_stack.addWidget(QLabel("Контент Ленты"))
self.content_stack.addWidget(QLabel("Контент Музыки"))
# Лента
self.feed_label = QLabel("Загрузка...")
self.feed_label.setAlignment(Qt.AlignCenter)
self.content_stack.addWidget(self.feed_label)
# Музыка
self.music_label = QLabel("Загрузка...")
self.music_label.setAlignment(Qt.AlignCenter)
self.content_stack.addWidget(self.music_label)
# Чаты
self.content_stack.addWidget(QLabel("Контент Чатов"))
# Профиль
self.content_stack.addWidget(QLabel("Контент Профиля"))
def on_tab_button_clicked(self, index):
"""Обрабатывает нажатие на кнопку вкладки, проверяя права доступа."""
if index in self.REQUIRED_PERMISSIONS:
# Запускаем асинхронную проверку в существующем цикле событий
asyncio.create_task(self.check_permissions_and_switch(index, self.REQUIRED_PERMISSIONS[index]))
# сразу переключаем на вкладку (там уже "Загрузка...")
self.switch_tab(index)
# запускаем асинхронную проверку
asyncio.create_task(
self.check_permissions_and_switch(index, self.REQUIRED_PERMISSIONS[index])
)
else:
# Для вкладок без специальных прав доступа
self.switch_tab(index)
@ -267,6 +283,7 @@ class YobbleHomeView(QWidget):
for permission_code in self.REQUIRED_PERMISSIONS.values():
if permission_code in user_permissions:
self.permission_cache.add(permission_code)
self.permissions_preloaded = True
print(f"[Permissions] Preloaded. Cache: {self.permission_cache}")
else:
print(f"[Permissions] Preload failed: {data}")
@ -274,9 +291,17 @@ class YobbleHomeView(QWidget):
async def check_permissions_and_switch(self, index, permission_code):
"""Асинхронно проверяет права и переключает вкладку."""
if permission_code in self.permission_cache:
self.show_real_content(index)
self.switch_tab(index)
return
# Если предзагрузка завершена, но прав в кеше нет → запрет
if self.permissions_preloaded:
self.show_denied(index)
self.switch_tab(index)
return
# Иначе делаем запрос
access_token = get_current_access_token()
if not access_token:
self.show_error_message(localizer.translate("Сессия не найдена. Пожалуйста, войдите снова."))
@ -285,12 +310,14 @@ class YobbleHomeView(QWidget):
success, data = await get_user_role(access_token)
print("data", data)
success, data = await get_user_role(access_token)
if success and permission_code in data.get("user_permissions", []):
self.permission_cache.add(permission_code)
self.show_real_content(index)
self.switch_tab(index)
else:
error_message = data if not success else localizer.translate("У вас нет прав для доступа к этому разделу.")
self.show_error_message(error_message)
self.show_denied(index)
self.switch_tab(index)
def switch_tab(self, index):
"""Переключает на указанную вкладку."""
@ -319,6 +346,26 @@ class YobbleHomeView(QWidget):
button.style().unpolish(button)
button.style().polish(button)
def show_real_content(self, index):
if index == 0:
self.feed_label.setText("Контент Ленты")
elif index == 1:
self.music_label.setText("Контент Музыки")
def show_denied(self, index):
denied = QLabel("Доступ запрещен")
denied.setAlignment(Qt.AlignCenter)
denied.setStyleSheet("font-size: 18px; color: #8e8e93;")
if index == 0:
self.content_stack.removeWidget(self.feed_label)
self.feed_label = denied
self.content_stack.insertWidget(0, denied)
elif index == 1:
self.content_stack.removeWidget(self.music_label)
self.music_label = denied
self.content_stack.insertWidget(1, denied)
def get_stylesheet(self):
"""Возвращает QSS стили для компонента в зависимости от темы."""
is_dark = theme_manager.is_dark()