/
NeoChapay
/
telegraf
Обзор
Документация
Войти
/
NeoChapay
/
telegraf
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
develop
src/chatlistmodel.h
244 строки
9 KB
mbarashkov
Исправляем предупреждение о глобальных QString
28 дек 2024, 18:43
28 дек 2024, 18:43
9190e19
Код
Авторство
О чём код?
#ifndef CHATLISTMODEL_H #define CHATLISTMODEL_H #include <QAbstractListModel> #include <QSortFilterProxyModel> #include "tdlibwrapper.h" #include "appsettings.h" namespace { const char ID[] = "id"; const char DATE[] = "date"; const char TEXT[] = "text"; const char TYPE[] = "type"; const char TITLE[] = "title"; const char PHOTO[] = "photo"; const char SMALL[] = "small"; const char ORDER[] = "order"; const char CHAT_ID[] = "chat_id"; const char CONTENT[] = "content"; const char LAST_MESSAGE[] = "last_message"; const char DRAFT_MESSAGE[] = "draft_message"; const char SENDER_ID[] = "last_message"; const char USER_ID[] = "user_id"; const char BASIC_GROUP_ID[] = "basic_group_id"; const char SUPERGROUP_ID[] = "supergroup_id"; const char UNREAD_COUNT[] = "unread_count"; const char UNREAD_MENTION_COUNT[] = "unread_mention_count"; const char UNREAD_REACTION_COUNT[] = "unread_reaction_count"; const char AVAILABLE_REACTIONS[] = "available_reactions"; const char NOTIFICATION_SETTINGS[] = "notification_settings"; const char LAST_READ_INBOX_MESSAGE_ID[] = "last_read_inbox_message_id"; const char LAST_READ_OUTBOX_MESSAGE_ID[] = "last_read_outbox_message_id"; const char SENDING_STATE[] = "sending_state"; const char IS_CHANNEL[] = "is_channel"; const char IS_VERIFIED[] = "is_verified"; const char IS_MARKED_AS_UNREAD[] = "is_marked_as_unread"; const char IS_PINNED[] = "is_pinned"; const char PINNED_MESSAGE_ID[] = "pinned_message_id"; const char _TYPE[] = "@type"; const char SECRET_CHAT_ID[] = "secret_chat_id"; const char CHAT_FOLDERS[] = "chat_folders"; const char MAIN_CHAT_LIST_POSITION_IN_FOLDERS[] = "main_chat_list_position"; const char IS_ARCHIVED[] = "is_archived"; } class ChatListModel : public QAbstractListModel { Q_OBJECT Q_PROPERTY(bool showAllChats READ showAllChats WRITE setShowAllChats NOTIFY showAllChatsChanged) Q_PROPERTY(int count READ rowCount NOTIFY countChanged) Q_PROPERTY(QVariantList chatFolders READ getChatFolders NOTIFY chatFoldersChanged) public: class ChatData; enum Role { RoleDisplay = Qt::DisplayRole, RoleChatId, RoleChatType, RoleGroupId, RoleTitle, RoleOrder, RolePhotoSmall, RoleUnreadCount, RoleUnreadMentionCount, RoleUnreadReactionCount, RoleAvailableReactions, RoleLastReadInboxMessageId, RoleLastMessageSenderId, RoleLastMessageDate, RoleLastMessageText, RoleLastMessageStatus, RoleChatMemberStatus, RoleSecretChatState, RoleIsVerified, RoleIsChannel, RoleIsGroup, RoleIsBasicGroup, RoleIsSuperGroup, RoleIsPrivateChat, RoleIsContact, RoleIsBot, RoleIsMarkedAsUnread, RoleIsPinned, RoleIsArchived, RoleIsMuted, RoleFilter, RoleDraftMessageText, RoleDraftMessageDate, RoleChatFoldersList, RoleMainChatPositionId, RoleArchiveChatPositionId }; ChatListModel(TDLibWrapper *tdLibWrapper, AppSettings *appSettings); ~ChatListModel() override; QHash<int,QByteArray> roleNames() const Q_DECL_OVERRIDE; int rowCount(const QModelIndex &index = QModelIndex()) const Q_DECL_OVERRIDE; QVariant data(const QModelIndex &index, int role) const Q_DECL_OVERRIDE; Q_INVOKABLE QVariantMap get(int row); Q_INVOKABLE QVariantMap getById(qlonglong chatId); Q_INVOKABLE void reset(); Q_INVOKABLE void calculateUnreadState(); Q_INVOKABLE qlonglong getMainChatListId() const {return mainAllChatFolderPosition;} Q_INVOKABLE qlonglong getArchiveChatListId() const {return (chatFolders.size() - 1);} bool showAllChats() const; void setShowAllChats(bool showAll); ChatListModel* clone(); ChatData* getChatData(int row); qlonglong getSelectedFolderId(QString selectedFolder) const; QList<qlonglong> getChatFoldersListConditionIDs(QString selectedFolder, QString condition) const; bool isChatFolderCondition(QString selectedFolder, QString condition) const; private slots: void handleChatDiscovered(const QString &chatId, const QVariantMap &chatInformation); void handleChatLastMessageUpdated(const QString &chatId, const QString &order, const QVariantMap &lastMessage); void handleChatOrderUpdated(const QString &chatId, const QString &order, const QString &chatListName); void handleChatReadInboxUpdated(const QString &chatId, const QString &lastReadInboxMessageId, int unreadCount); void handleChatReadOutboxUpdated(const QString &chatId, const QString &lastReadOutboxMessageId); void handleChatPhotoUpdated(qlonglong chatId, const QVariantMap &photo); void handleChatPinnedMessageUpdated(qlonglong chatId, qlonglong pinnedMessageId); void handleMessageSendSucceeded(qlonglong messageId, qlonglong oldMessageId, const QVariantMap &message); void handleChatNotificationSettingsUpdated(const QString &chatId, const QVariantMap &chatNotificationSettings); void handleGroupUpdated(qlonglong groupId); void handleSecretChatUpdated(qlonglong secretChatId, const QVariantMap &secretChat); void handleChatTitleUpdated(const QString &chatId, const QString &title); void handleChatPinnedUpdated(qlonglong chatId, bool chatIsPinned, const QString &chatListName); void handleChatIsMarkedAsUnreadUpdated(qlonglong chatId, bool chatIsMarkedAsUnread); void handleChatDraftMessageUpdated(qlonglong chatId, const QVariantMap &draftMessage, const QString &order); void handleChatUnreadMentionCountUpdated(qlonglong chatId, int unreadMentionCount); void handleChatUnreadReactionCountUpdated(qlonglong chatId, int unreadReactionCount); void handleChatAvailableReactionsUpdated(qlonglong chatId, const QVariantMap availableReactions); void handleRelativeTimeRefreshTimer(); void handleRequestSortTimer(); void handleChatInsertionLessThanBufferTimer(); void handleChatFolders(const QVariantList &foldersInformation, qlonglong mainChatlistPosition); void handleUpdateChatInArchive(const qlonglong chatID); void handleChatFolderInformation(const QVariantMap &chatFolderInformation); signals: void countChanged(); void showAllChatsChanged(); void chatChanged(const qlonglong &changedChatId); void chatJoined(const qlonglong &chatId, const QString &chatTitle); void unreadStateChanged(int unreadMessagesCount, int unreadChatsCount); void chatFoldersChanged(const QVariantList &chatFolders); void chatFolderInformationChanged(const QVariantMap &chatFolderInformation); void requestSort(); private: void addVisibleChat(ChatData *chat); void addChatsFromBuffer(); void updateChatVisibility(const TDLibWrapper::Group *group); void updateSecretChatVisibility(const QVariantMap secretChatDetails); //int updateChatOrder(int chatIndex); void enableRefreshTimer(); QVariantList getChatFolders() const; qlonglong mainAllChatFolderPosition; const int chatBufferSize = 100; private: TDLibWrapper *tdLibWrapper; AppSettings *appSettings; QTimer *relativeTimeRefreshTimer; QTimer *requestSortTimer; QTimer *chatInsertionLessThanBufferTimer; QList<ChatData*> chatList; QList<ChatData*> addedChatBuffer; QVariantList chatFolders; // QVariantList chatFolderTitles; QVariantMap chatFolderList; QHash<qlonglong,int> chatIndexMap; QHash<qlonglong,ChatData*> hiddenChats; bool showHiddenChats; int lastChatCount = 0; bool sortRequestedOnce = false; }; class ChatListModel::ChatData { public: ChatData(TDLibWrapper *tdLibWrapper, const QVariantMap &data); int compareTo(const ChatData *chat) const; bool setOrder(const QString &order); const QVariant lastMessage(const QString &key) const; QString title() const; int unreadCount() const; int unreadMentionCount() const; int unreadReactionCount() const; QVariant availableReactions() const; QVariantMap photoSmall() const; qlonglong lastReadInboxMessageId() const; qlonglong senderUserId() const; qlonglong senderChatId() const; bool senderIsChat() const; qlonglong senderMessageDate() const; QString senderMessageText() const; QString senderMessageStatus() const; qlonglong draftMessageDate() const; QString draftMessageText() const; bool isChannel() const; bool isHidden() const; bool isMarkedAsUnread() const; bool isPinned() const; bool isBasicGroup() const; bool isSuperGroup() const; bool isGroup() const; bool isPrivate() const; bool isBot() const; bool isMute() const; qlonglong respondentUserId() const; bool isContact() const; bool updateUnreadCount(int unreadCount); bool updateLastReadInboxMessageId(qlonglong messageId); QVector<int> updateLastMessage(const QVariantMap &message); QVector<int> updateGroup(const TDLibWrapper::Group *group); QVector<int> updateSecretChat(const QVariantMap &secretChatDetails); ChatData* clone(); TDLibWrapper *tdLibWrapper; public: QVariantMap chatData; qlonglong chatId; qlonglong order; qlonglong groupId; bool verified; bool archived; TDLibWrapper::ChatType chatType; TDLibWrapper::ChatMemberStatus memberStatus; TDLibWrapper::SecretChatState secretChatState; }; #endif // CHATLISTMODEL_H