/
s5z6
/
telegraf
Обзор
Документация
Войти
/
s5z6
/
telegraf
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
develop
src/data/chatfoldersmodel.cpp
72 строки
3 KB
mbarashkov
Закончена переработка закрепления чатов (можно ускорить отображение в UI следующим этапом, в разных папках)
19 апр 2025, 17:06
19 апр 2025, 17:06
2a2d948
Код
Авторство
О чём код?
#include "chatfoldersmodel.h" ChatFoldersModel* ChatFoldersModel::instance; ChatFoldersModel::ChatFoldersModel(QObject *parent): QObject(parent), selectedChatFolderId(new ChatFolderId(this)) { connect(TDLibResponseHandler::getInstance(), SIGNAL(chatFolders(QVariantList,qlonglong)), this, SLOT(handleChatFolders(QVariantList,qlonglong))); connect(TDLibResponseHandler::getInstance(), SIGNAL(chatFolder(QVariantMap)), this, SLOT(handleChatFolderInformation(QVariantMap))); ChatFoldersModel::instance = this; } void ChatFoldersModel::handleChatFolders(const QVariantList &foldersInformation, qlonglong mainAllChatFolderPosition) { chatFolders.clear(); for (const auto&folder: foldersInformation) { chatFolders.append(new ChatFolderModel(folder.toMap(), ChatFolderId::Type::Generic, this)); } chatFolders.insert(mainAllChatFolderPosition, new ChatFolderModel(0, tr("All Chats"), ChatFolderId::Type::AllChats, this)); chatFolders.append(new ChatFolderModel(0, tr("Archive"), ChatFolderId::Type::Archive, this)); if(findFolder(selectedChatFolderId) == Q_NULLPTR) { // Наша выбранная папка чатов уже не существует. selectChatFolder(ChatFolderId::Type::AllChats, 0); } emit chatFoldersChanged(chatFolders); } void ChatFoldersModel::handleChatFolderInformation(const QVariantMap &chatFolderInformation) { QString name = chatFolderInformation.value("name").toMap().value("text").toMap().value("text").toString(); // К сожалению, tdlib действительно не присылает ID чата: https://core.telegram.org/tdlib/docs/classtd_1_1td__api_1_1chat_folder.html auto folder = findFolder(name); if(folder != Q_NULLPTR) { if(folder->setProperties(chatFolderInformation)) { emit chatFolderChanged(folder); } } } ChatFolderModel* ChatFoldersModel::findFolder(ChatFolderId* chatFolderId) const { if(chatFolderId == Q_NULLPTR) { return Q_NULLPTR; } auto tdLibId = chatFolderId->getTdLibId(); auto type = chatFolderId->getType(); for(int i = 0; i < chatFolders.size(); i++) { auto chatFolder = qobject_cast<ChatFolderModel*>(chatFolders[i]); if(chatFolder->getTdLibId() == tdLibId && chatFolder->getType() == type) { return chatFolder; } } return Q_NULLPTR; } ChatFolderModel* ChatFoldersModel::findFolder(QString name) const { if(name == Q_NULLPTR) { return Q_NULLPTR; } for(int i = 0; i < chatFolders.size(); i++) { auto chatFolder = qobject_cast<ChatFolderModel*>(chatFolders[i]); if(chatFolder->getName() == name) { return chatFolder; } } return Q_NULLPTR; }