diff --git a/app/core/config.py b/app/core/config.py index b8f3070..8b08933 100644 --- a/app/core/config.py +++ b/app/core/config.py @@ -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})" diff --git a/app/ui/views/yobble_home_view.py b/app/ui/views/yobble_home_view.py index 4230d7a..e492975 100644 --- a/app/ui/views/yobble_home_view.py +++ b/app/ui/views/yobble_home_view.py @@ -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()