/
s5z6
/
telegraf
Обзор
Документация
Войти
/
s5z6
/
telegraf
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
develop
src/data/tdlibdatarepository.cpp
142 строки
4 KB
mbarashkov
Версия 0.96.3. Снова отображаются имена автора последнего сообщения.
03 июн 2025, 21:06
03 июн 2025, 21:06
c3f08a8
Код
Авторство
О чём код?
#include "tdlibdatarepository.h" #include <QDebug> TDLibDataRepository* TDLibDataRepository::instance; namespace { const char ID[] = "id"; const char USERNAMES[] = "usernames"; const char EDITABLE_USERNAME[] = "editable_username"; const char CHAT_AVAILABLE_REACTIONS[] = "available_reactions"; const char CHAT_AVAILABLE_REACTIONS_SOME[] = "chatAvailableReactionsSome"; const char CHAT_AVAILABLE_REACTIONS_ALL[] = "chatAvailableReactionsAll"; const char REACTION_TYPE_EMOJI[] = "reactionTypeEmoji"; const char EMOJI[] = "emoji"; const char REACTIONS[] = "reactions"; const char _TYPE[] = "@type"; const char LAST_NAME[] = "last_name"; const char FIRST_NAME[] = "first_name"; } TDLibDataRepository::TDLibDataRepository(QObject *parent) : QObject(parent) { TDLibDataRepository::instance = this; } void TDLibDataRepository::putUser(const qlonglong userId, const QVariantMap &userInformation) { usersById.insert(userId, userInformation); usersByName.insert( userInformation.value(USERNAMES).toMap().value(EDITABLE_USERNAME).toString(), userInformation ); } QVariantMap TDLibDataRepository::getUserById(const qlonglong userId) const { return usersById.value(userId); } QVariantMap TDLibDataRepository::getUserByName(const QString &name) const { return usersByName.value(name); } bool TDLibDataRepository::containsUserById(const qlonglong userId) const { return usersById.contains(userId); } QVariantMap TDLibDataRepository::getChat(const qlonglong chatId) const { return chatById.value(chatId); } void TDLibDataRepository::putChat(const QVariantMap &chatInformation) { qlonglong chatId = chatInformation.value(ID).toLongLong(); chatById.insert(chatId, chatInformation); } bool TDLibDataRepository::containsUserNameById(const qlonglong userId) const { return userNamesById.contains(userId); } QString TDLibDataRepository::getUserName(const qlonglong userId) { QString userName; if(containsUserNameById(userId)) { userName = userNamesById.value(userId); } else { auto userInformation = getUserById(userId); auto firstName = userInformation.value(FIRST_NAME).toString(); auto lastName = userInformation.value(LAST_NAME).toString(); userName = (firstName + " " + lastName).trimmed(); putUserName(userId, userName); } return userName; } void TDLibDataRepository::putUserName(const qlonglong userId, const QString userName) { userNamesById.insert(userId, userName); } void TDLibDataRepository::clear() { usersById.clear(); usersByName.clear(); chatById.clear(); userNamesById.clear(); } void TDLibDataRepository::updateActiveEmojiReactions(const QStringList &emojis) { if (activeEmojiReactions != emojis) { activeEmojiReactions = emojis; emit reactionsUpdated(); } } QStringList TDLibDataRepository::getChatReactions(const qlonglong chatId) const { const QVariant available_reactions(getChat(chatId).value(CHAT_AVAILABLE_REACTIONS)); const QVariantMap map(available_reactions.toMap()); const QString reactions_type(map.value(_TYPE).toString()); if (reactions_type == CHAT_AVAILABLE_REACTIONS_ALL) { return activeEmojiReactions; } else if (reactions_type == CHAT_AVAILABLE_REACTIONS_SOME) { const QVariantList reactions(map.value(REACTIONS).toList()); const int n = reactions.count(); QStringList emojis; // "available_reactions": { // "@type": "chatAvailableReactionsSome", // "reactions": [ // { // "@type": "reactionTypeEmoji", // "emoji": "..." // }, emojis.reserve(n); for (int i = 0; i < n; i++) { const QVariantMap reaction(reactions.at(i).toMap()); if (reaction.value(_TYPE).toString() == REACTION_TYPE_EMOJI) { const QString emoji(reaction.value(EMOJI).toString()); if (!emoji.isEmpty()) emojis.append(emoji); } } return emojis; } else if (reactions_type.isEmpty()) { return available_reactions.toStringList(); } else { return QStringList(); } }