desktop_app/app/ui/views/chat_list_view.py
2025-09-29 02:13:54 +03:00

105 lines
4.0 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 QWidget, QListWidget, QVBoxLayout, QListWidgetItem
from PySide6.QtCore import Qt, QSize
from typing import List
from app.core.models.chat_models import PrivateChatListItem
from app.ui.widgets.chat_list_item_widget import ChatListItemWidget
from datetime import datetime
class ChatListView(QWidget):
def __init__(self):
super().__init__()
self.init_ui()
def init_ui(self):
"""Инициализирует пользовательский интерфейс."""
layout = QVBoxLayout(self)
layout.setContentsMargins(10, 10, 10, 10)
layout.setSpacing(0)
self.chat_list = QListWidget()
self.chat_list.setStyleSheet("""
QListWidget {
background-color: #ffffff;
border: none;
padding: 5px;
spacing: 8px;
outline: 0;
}
QListWidget::item {
background-color: #f5f5f5;
border-radius: 10px;
padding: 5px;
}
QListWidget::item:hover {
background-color: #e9e9e9;
}
QListWidget::item:selected {
background-color: #dcdcdc;
color: #000000;
}
QScrollBar:vertical {
border: none;
background: #f5f5f5;
width: 8px;
margin: 0px 0px 0px 0px;
}
QScrollBar::handle:vertical {
background: #cccccc;
min-height: 20px;
border-radius: 4px;
}
QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical {
height: 0px;
}
""")
layout.addWidget(self.chat_list)
# Изначальное состояние
self.show_placeholder_message("Загрузка чатов...")
def show_placeholder_message(self, text):
"""Очищает список и показывает одно сообщение (например, "Загрузка..." или "Чатов нет")."""
self.chat_list.clear()
item = QListWidgetItem(text)
item.setTextAlignment(Qt.AlignCenter)
item.setBackground(Qt.transparent)
self.chat_list.addItem(item)
def populate_chats(self, chat_items: List[PrivateChatListItem]):
"""
Заполняет список чатов данными, полученными от сервера.
"""
self.chat_list.clear()
if not chat_items:
self.show_placeholder_message("У вас пока нет чатов")
return
for chat in chat_items:
# Определяем имя собеседника
if chat.chat_type == "self":
companion_name = "Избранное"
elif chat.chat_data and 'login' in chat.chat_data:
companion_name = chat.chat_data['login']
else:
companion_name = "Неизвестный"
# Получаем текст и время последнего сообщения
if chat.last_message and chat.last_message.content:
last_msg = chat.last_message.content
# Преобразуем время
timestamp = chat.last_message.created_at.strftime('%H:%M')
else:
last_msg = "Нет сообщений"
timestamp = ""
# Создаем кастомный виджет
item_widget = ChatListItemWidget(companion_name, last_msg, timestamp)
# Создаем элемент списка и устанавливаем для него наш виджет
list_item = QListWidgetItem(self.chat_list)
list_item.setSizeHint(item_widget.sizeHint())
self.chat_list.addItem(list_item)
self.chat_list.setItemWidget(list_item, item_widget)