/
erhoof
/
telegraf
Обзор
Документация
Войти
/
erhoof
/
telegraf
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
develop
src/data/chatmodel.h
99 строк
5 KB
Nikolay Sinyov
- Первая версия отображения комментариев. Работает пока на readonly и в текущем чате.
16 сен 2025, 18:35
16 сен 2025, 18:35
60833ae
Код
Авторство
О чём код?
#pragma once #include <QAbstractListModel> #include "../tdlib/tdlibresponsehandler.h" class ChatModel : public QAbstractListModel { Q_OBJECT Q_PROPERTY(qlonglong chatId READ getChatId NOTIFY chatIdChanged) Q_PROPERTY(QVariantMap smallPhoto READ smallPhoto NOTIFY smallPhotoChanged) public: static QObject* getSingleton(QQmlEngine*, QJSEngine*) { return instance; } ChatModel(); ~ChatModel() override; virtual QHash<int,QByteArray> roleNames() const override; virtual int rowCount(const QModelIndex&) const override; virtual QVariant data(const QModelIndex &index, int role) const override; Q_INVOKABLE void clear(bool contentOnly = false); Q_INVOKABLE void initialize(const QVariantMap &chatInformation, qlonglong topicId = 0, qlonglong lastMessageId = 0, bool isGeneral = false); Q_INVOKABLE void triggerLoadMoreHistory(); Q_INVOKABLE void triggerLoadHistoryForMessage(qlonglong messageId); Q_INVOKABLE void triggerLoadMoreFuture(); Q_INVOKABLE QVariantMap getChatInformation(); Q_INVOKABLE QVariantMap getMessage(int index); Q_INVOKABLE QVariantList getMessageIdsForAlbum(qlonglong albumId); Q_INVOKABLE QVariantList getMessagesForAlbum(qlonglong albumId, int startAt); Q_INVOKABLE int getLastReadMessageIndex(); Q_INVOKABLE void setSearchQuery(const QString newSearchQuery); Q_INVOKABLE int getDisplayedMessageIndex(qlonglong messageId); QVariantMap smallPhoto() const; qlonglong getChatId() const { return chatId; } signals: void messagesReceived(int modelIndex, int lastReadSentIndex, int totalCount); void messagesIncrementalUpdate(int modelIndex, int lastReadSentIndex); void newMessageReceived(const QVariantMap &message); void unreadCountUpdated(int unreadCount, const QString &lastReadInboxMessageId); void lastReadSentMessageUpdated(int lastReadSentIndex); void notificationSettingsUpdated(); void messageUpdated(int modelIndex); void smallPhotoChanged(); void chatIdChanged(); void pinnedMessageChanged(); private slots: void handleMessagesReceived(const QVariantList &messages, int totalCount); void handleSponsoredMessageReceived(qlonglong chatId, const QVariantMap &sponsoredMessage); void handleNewMessageReceived(qlonglong chatId, const QVariantMap &message); void handleMessageReceived(qlonglong chatId, qlonglong messageId, const QVariantMap &message); void handleChatReadInboxUpdated(const QString &chatId, const QString &lastReadInboxMessageId, int unreadCount); void handleChatReadOutboxUpdated(const QString &chatId, const QString &lastReadOutboxMessageId); void handleMessageSendSucceeded(qlonglong messageId, qlonglong oldMessageId, const QVariantMap &message); void handleChatNotificationSettingsUpdated(const QString &chatId, const QVariantMap &chatNotificationSettings); void handleChatPhotoUpdated(qlonglong chatId, const QVariantMap &photo); void handleChatPinnedMessageUpdated(qlonglong chatId, qlonglong pinnedMessageId); void handleMessageContentUpdated(qlonglong chatId, qlonglong messageId, const QVariantMap &newContent); void handleMessageEditedUpdated(qlonglong chatId, qlonglong messageId, const QVariantMap &replyMarkup); void handleMessageInteractionInfoUpdated(qlonglong chatId, qlonglong messageId, const QVariantMap &updatedInfo); void handleMessagesDeleted(qlonglong chatId, const QList<qlonglong> &messageIds); void handleMessagePropertiesReceived(qlonglong messageId, bool canBeEdited, bool canBePinned, bool canBeDeleted, bool canGetMessageThread); private: class MessageData; void removeRange(int firstDeleted, int lastDeleted); void insertMessages(const QList<MessageData*> newMessages); void appendMessages(const QList<MessageData*> newMessages); void prependMessages(const QList<MessageData*> newMessages); void updateAlbumMessages(qlonglong albumId, bool checkDeleted); void updateAlbumMessages(QList<qlonglong> albumIds, bool checkDeleted); void setMessagesAlbum(const QList<MessageData*> newMessages); void setMessagesAlbum(MessageData *message); QVariantMap enhanceMessage(const QVariantMap &message); int calculateLastKnownMessageId(); int calculateLastReadSentMessageId(); int calculateScrollPosition(int listInboxPosition); bool isMostRecentMessageLoaded(); void requestTopicHistory(qlonglong chatId, qlonglong messageId, qlonglong fromMessageId = 0, qlonglong offset = 0); private: QList<MessageData*> messages; QHash<qlonglong,int> messageIndexMap; QHash<qlonglong, QVariantList> albumMessageMap; QVariantMap chatInformation; qlonglong chatId; qlonglong currentTopicId; qlonglong commentThreadIdForFiltering; bool inTopic() { return currentTopicId > 0; }; bool isGeneralTopic; bool inReload; bool inIncrementalUpdate; bool searchModeActive; QString searchQuery; static ChatModel* instance; };