/* * Copyright (c) 2010-2024 Belledonne Communications SARL. * * This file is part of linphone-desktop * (see https://www.linphone.org). * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef CHAT_CORE_H_ #define CHAT_CORE_H_ #include "core/chat/message/ChatMessageGui.hpp" #include "model/chat/ChatModel.hpp" #include "model/search/MagicSearchModel.hpp" #include "tool/LinphoneEnums.hpp" #include "tool/thread/SafeConnection.hpp" #include #include #include class ChatCore : public QObject, public AbstractObject { Q_OBJECT public: Q_PROPERTY(QString title READ getTitle WRITE setTitle NOTIFY titleChanged) Q_PROPERTY(QString identifier READ getIdentifier CONSTANT) Q_PROPERTY(QString peerAddress READ getPeerAddress CONSTANT) Q_PROPERTY(QString chatRoomAddress READ getChatRoomAddress CONSTANT) Q_PROPERTY(QString avatarUri READ getAvatarUri WRITE setAvatarUri NOTIFY avatarUriChanged) Q_PROPERTY(QDateTime lastUpdatedTime READ getLastUpdatedTime WRITE setLastUpdatedTime NOTIFY lastUpdatedTimeChanged) Q_PROPERTY(QString lastMessageText READ getLastMessageText NOTIFY lastMessageChanged) Q_PROPERTY(ChatMessageGui *lastMessage READ getLastMessage NOTIFY lastMessageChanged) Q_PROPERTY(LinphoneEnums::ChatMessageState lastMessageState READ getLastMessageState NOTIFY lastMessageChanged) Q_PROPERTY(LinphoneEnums::ChatRoomState state READ getChatRoomState NOTIFY chatRoomStateChanged) Q_PROPERTY(int unreadMessagesCount READ getUnreadMessagesCount WRITE setUnreadMessagesCount NOTIFY unreadMessagesCountChanged) Q_PROPERTY(QString composingName READ getComposingName WRITE setComposingName NOTIFY composingUserChanged) Q_PROPERTY(QString composingAddress READ getComposingAddress WRITE setComposingAddress NOTIFY composingUserChanged) Q_PROPERTY(bool isGroupChat READ isGroupChat CONSTANT) Q_PROPERTY(bool isEncrypted READ isEncrypted CONSTANT) Q_PROPERTY(bool isReadOnly READ getIsReadOnly WRITE setIsReadOnly NOTIFY readOnlyChanged) Q_PROPERTY(QString sendingText READ getSendingText WRITE setSendingText NOTIFY sendingTextChanged) // Should be call from model Thread. Will be automatically in App thread after initialization static QSharedPointer create(const std::shared_ptr &chatRoom); ChatCore(const std::shared_ptr &chatRoom); ~ChatCore(); void setSelf(QSharedPointer me); QDateTime getLastUpdatedTime() const; void setLastUpdatedTime(QDateTime time); QString getTitle() const; void setTitle(QString title); bool isGroupChat() const; bool isEncrypted() const; QString getIdentifier() const; QString getSendingText() const; void setSendingText(const QString &text); ChatMessageGui *getLastMessage() const; QString getLastMessageText() const; LinphoneEnums::ChatMessageState getLastMessageState() const; LinphoneEnums::ChatRoomState getChatRoomState() const; void setChatRoomState(LinphoneEnums::ChatRoomState state); bool getIsReadOnly() const; void setIsReadOnly(bool readOnly); QSharedPointer getLastMessageCore() const; void setLastMessage(QSharedPointer lastMessage); int getUnreadMessagesCount() const; void setUnreadMessagesCount(int count); QString getChatRoomAddress() const; QString getPeerAddress() const; QList> getChatMessageList() const; void resetChatMessageList(QList> list); void appendMessageToMessageList(QSharedPointer message); void appendMessagesToMessageList(QList> list); void removeMessagesFromMessageList(QList> list); void clearMessagesList(); QString getAvatarUri() const; void setAvatarUri(QString avatarUri); QString getComposingName() const; QString getComposingAddress() const; void setComposingName(QString composingName); void setComposingAddress(QString composingAddress); std::shared_ptr getModel() const; signals: // used to close all the notifications when one is clicked void messageOpen(); void lastUpdatedTimeChanged(QDateTime time); void lastMessageChanged(); void titleChanged(QString title); void unreadMessagesCountChanged(int count); void messageListChanged(); void messagesInserted(QList> list); void messageRemoved(); void avatarUriChanged(); void deleted(); void composingUserChanged(); void chatRoomStateChanged(); void readOnlyChanged(); void sendingTextChanged(QString text); void lDeleteMessage(); void lDelete(); void lDeleteHistory(); void lMarkAsRead(); void lUpdateLastMessage(); void lUpdateUnreadCount(); void lUpdateLastUpdatedTime(); void lSendTextMessage(QString message); void lCompose(); void lLeave(); private: QString id; QDateTime mLastUpdatedTime; QString mPeerAddress; QString mChatRoomAddress; QString mTitle; QString mIdentifier; QString mAvatarUri; QString mSendingText; int mUnreadMessagesCount; QString mComposingName; QString mComposingAddress; bool mIsGroupChat = false; bool mIsEncrypted = false; bool mIsReadOnly = false; LinphoneEnums::ChatRoomState mChatRoomState; std::shared_ptr mChatModel; QSharedPointer mLastMessage; QList> mChatMessageList; QSharedPointer> mChatModelConnection; DECLARE_ABSTRACT_OBJECT }; Q_DECLARE_METATYPE(ChatCore *) #endif