// SPDX-FileCopyrightText: 2021 Jonah BrĂ¼chert // // SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL #pragma once #include #include #include #include #include "qcorotask.h" #include "global.h" #include #include class MessageModel; class ChannelHandler; class ChatListModel : public QAbstractListModel { Q_OBJECT Q_PROPERTY(bool loading READ loading NOTIFY loadingChanged) public: ~ChatListModel(); enum Role { DisplayNameRole = Qt::UserRole + 1, PhoneNumberListRole, UnreadMessagesRole, LastMessageRole, LastDateTimeRole, LastSentByMeRole, LastAttachmentRole, LastContactedRole, IsContactRole }; Q_ENUM(Role) explicit ChatListModel(ChannelHandler &handler, QObject *parent = nullptr); QHash roleNames() const override; QVariant data(const QModelIndex &index, int role) const override; int rowCount(const QModelIndex &parent = {}) const override; Q_INVOKABLE void fetchChatDetails(const PhoneNumberList &phoneNumberList, const bool sort = false); Q_INVOKABLE void startChat(const PhoneNumberList &phoneNumberList); Q_INVOKABLE void markChatAsRead(const PhoneNumberList &phoneNumberList); Q_INVOKABLE void restoreDefaults(); Q_INVOKABLE void saveSettings(); Q_INVOKABLE QString attachmentsFolder(const PhoneNumberList &phoneNumberList) const; Q_INVOKABLE void setCharacterLimit(const int &width); bool ready() const; bool loading() const; public Q_SLOTS: void fetchChats(const PhoneNumberList &phoneNumberList); void deleteChat(const PhoneNumberList &phoneNumberList); Q_SIGNALS: void chatStarted(MessageModel *messageModel); void startingChatFaild(const QString &errorMessage); void readyChanged(); void loadingChanged(); private: QPair getChatIndex(const PhoneNumberList &phoneNumberList); void fetchChatsInternal(); void fetchChatDetailsInternal(const PhoneNumberList &phoneNumberList, const bool sort = false); bool m_loading{false}; ChannelHandler &m_handler; QVector m_chats; ContactPhoneNumberMapper &m_mapper; MessageModel *m_messageModel = nullptr; int m_characters = 15; };