profile patch
This commit is contained in:
parent
a38f39ca63
commit
705d96511d
46
app/ui/views/profile_view.py
Normal file
46
app/ui/views/profile_view.py
Normal file
@ -0,0 +1,46 @@
|
||||
from PySide6.QtCore import Qt, Signal
|
||||
from PySide6.QtWidgets import QWidget, QVBoxLayout, QLabel, QPushButton, QHBoxLayout, QScrollArea
|
||||
|
||||
|
||||
class ProfileView(QWidget):
|
||||
start_chat_clicked = Signal(dict) # payload with user data
|
||||
follow_clicked = Signal(dict)
|
||||
|
||||
def __init__(self, user: dict, parent=None):
|
||||
super().__init__(parent)
|
||||
self.user = user or {}
|
||||
|
||||
root = QVBoxLayout(self)
|
||||
root.setContentsMargins(16, 12, 16, 12)
|
||||
root.setSpacing(8)
|
||||
|
||||
# Header info
|
||||
login = self.user.get("login") or "user"
|
||||
full_name = self.user.get("full_name") or self.user.get("custom_name") or ""
|
||||
bio = (self.user.get("profile") or {}).get("bio") if isinstance(self.user.get("profile"), dict) else None
|
||||
|
||||
self.login_label = QLabel(f"@{login}")
|
||||
self.login_label.setObjectName("ProfileLogin")
|
||||
self.name_label = QLabel(full_name)
|
||||
self.name_label.setObjectName("ProfileName")
|
||||
|
||||
root.addWidget(self.login_label)
|
||||
if full_name:
|
||||
root.addWidget(self.name_label)
|
||||
|
||||
if bio:
|
||||
bio_label = QLabel(str(bio))
|
||||
bio_label.setWordWrap(True)
|
||||
root.addWidget(bio_label)
|
||||
|
||||
# Actions
|
||||
actions = QHBoxLayout()
|
||||
self.message_btn = QPushButton("Написать сообщение")
|
||||
self.follow_btn = QPushButton("Подписаться")
|
||||
actions.addWidget(self.message_btn)
|
||||
actions.addWidget(self.follow_btn)
|
||||
root.addLayout(actions)
|
||||
|
||||
self.message_btn.clicked.connect(lambda: self.start_chat_clicked.emit(self.user))
|
||||
self.follow_btn.clicked.connect(lambda: self.follow_clicked.emit(self.user))
|
||||
|
||||
@ -39,7 +39,17 @@ class SearchResultsView(QWidget):
|
||||
for u in users:
|
||||
title = u.login
|
||||
subtitle = u.full_name or u.custom_name or "Пользователь"
|
||||
self._add_chat_like_item(title, subtitle, timestamp="", payload={"type": "user", "user_id": str(u.user_id)})
|
||||
payload = {
|
||||
"type": "user",
|
||||
"user": {
|
||||
"user_id": str(u.user_id),
|
||||
"login": u.login,
|
||||
"full_name": getattr(u, 'full_name', None),
|
||||
"custom_name": getattr(u, 'custom_name', None),
|
||||
"profile": getattr(u, 'profile', None)
|
||||
}
|
||||
}
|
||||
self._add_chat_like_item(title, subtitle, timestamp="", payload=payload)
|
||||
|
||||
# Groups
|
||||
groups = groups
|
||||
|
||||
@ -14,6 +14,7 @@ from app.core.dialogs import show_themed_messagebox
|
||||
from app.ui.views.side_menu_view import SideMenuView
|
||||
from app.ui.views.chat_list_view import ChatListView
|
||||
from app.ui.views.search_results_view import SearchResultsView
|
||||
from app.ui.views.profile_view import ProfileView
|
||||
from app.core.services.auth_service import get_user_role
|
||||
from app.core.database import get_current_access_token
|
||||
from app.core.localizer import localizer
|
||||
@ -252,7 +253,7 @@ class YobbleHomeView(QWidget):
|
||||
self.back_button.setObjectName("BackButton")
|
||||
self.back_button.setFocusPolicy(Qt.NoFocus)
|
||||
self.back_button.setCursor(Qt.PointingHandCursor)
|
||||
self.back_button.clicked.connect(self.close_chat_view)
|
||||
self.back_button.clicked.connect(self.on_back_clicked)
|
||||
self.back_button.hide()
|
||||
top_bar_layout.addWidget(self.back_button)
|
||||
|
||||
@ -414,6 +415,7 @@ class YobbleHomeView(QWidget):
|
||||
# Страница результатов поиска
|
||||
self.search_results_view = SearchResultsView()
|
||||
self.content_stack.addWidget(self.search_results_view)
|
||||
self.search_results_view.result_selected.connect(self.on_search_result_selected)
|
||||
|
||||
def update_chat_list(self, chat_data):
|
||||
"""
|
||||
@ -714,6 +716,7 @@ class YobbleHomeView(QWidget):
|
||||
groups_cnt = len(getattr(data, 'groups', []) or [])
|
||||
channels_cnt = len(getattr(data, 'channels', []) or [])
|
||||
messages_cnt = len(getattr(data, 'messages', []) or [])
|
||||
print("data", data)
|
||||
# self.show_notification(localizer.translate(
|
||||
# f"Найдено: пользователи {users_cnt}, беседы {groups_cnt}, паблики {channels_cnt}, сообщения {messages_cnt}"
|
||||
# ))
|
||||
@ -728,6 +731,37 @@ class YobbleHomeView(QWidget):
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
def on_search_result_selected(self, payload: dict):
|
||||
t = (payload or {}).get("type")
|
||||
if t == "user":
|
||||
user = (payload or {}).get("user") or {}
|
||||
return self.open_profile_view(user)
|
||||
# TODO: handle group/channel/message
|
||||
|
||||
def open_profile_view(self, user: dict):
|
||||
try:
|
||||
self.profile_view = ProfileView(user)
|
||||
self.bottom_bar.hide()
|
||||
self.burger_menu_button.hide()
|
||||
self.back_button.show()
|
||||
self.content_stack.addWidget(self.profile_view)
|
||||
self.content_stack.setCurrentWidget(self.profile_view)
|
||||
except Exception as e:
|
||||
self.show_notification(str(e), is_error=True)
|
||||
|
||||
def close_profile_view(self):
|
||||
self.content_stack.setCurrentWidget(self.search_results_view)
|
||||
self.bottom_bar.show()
|
||||
self.burger_menu_button.show()
|
||||
self.back_button.hide()
|
||||
if hasattr(self, 'profile_view') and self.profile_view:
|
||||
try:
|
||||
self.content_stack.removeWidget(self.profile_view)
|
||||
except Exception:
|
||||
pass
|
||||
self.profile_view.deleteLater()
|
||||
self.profile_view = None
|
||||
|
||||
def handle_notification_click(self):
|
||||
"""Пустышка для кнопки уведомлений."""
|
||||
show_themed_messagebox(
|
||||
@ -737,6 +771,14 @@ class YobbleHomeView(QWidget):
|
||||
"🔔 Центр уведомлений пока в разработке."
|
||||
)
|
||||
|
||||
def on_back_clicked(self):
|
||||
if getattr(self, 'profile_view', None):
|
||||
self.close_profile_view()
|
||||
return
|
||||
if getattr(self, 'chat_view', None):
|
||||
self.close_chat_view()
|
||||
return
|
||||
|
||||
def get_stylesheet(self):
|
||||
"""Возвращает QSS стили для компонента в зависимости от темы."""
|
||||
is_dark = theme_manager.is_dark()
|
||||
|
||||
Reference in New Issue
Block a user