/* * 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_MODEL_H_ #define CHAT_MODEL_H_ #include "model/chat/message/content/ChatMessageContentModel.hpp" #include "model/listener/Listener.hpp" #include "tool/AbstractObject.hpp" #include "tool/LinphoneEnums.hpp" #include #include #include class ChatModel : public ::Listener, public linphone::ChatRoomListener, public AbstractObject { Q_OBJECT public: ChatModel(const std::shared_ptr &chatRoom, QObject *parent = nullptr); ~ChatModel(); QDateTime getLastUpdateTime(); QString getTitle(); QString getPeerAddress() const; std::shared_ptr getLastChatMessage(); int getCapabilities() const; bool hasCapability(int capability) const; int getUnreadMessagesCount() const; void markAsRead(); std::list> getSharedMedias() const; std::list> getSharedDocuments() const; std::list> getHistory() const; std::list> getHistoryRange(int begin, int end); std::list> getHistoryRangeBetween(const std::shared_ptr firstEvent, const std::shared_ptr lastEvent, int filters); std::list> getHistoryRangeNear(int before, int after, const std::shared_ptr firstEvent, int filters); std::list> getChatMessageHistory() const; int getHistorySizeEvents() const; QString getIdentifier() const; void deleteHistory(); void deleteMessage(std::shared_ptr message); void deleteChatRoom(); void leave(); std::shared_ptr createVoiceRecordingMessage(const std::shared_ptr &recorder); std::shared_ptr createReplyMessage(const std::shared_ptr &message); std::shared_ptr createForwardMessage(const std::shared_ptr &message); std::shared_ptr createReplacesMessage(const std::shared_ptr &message); std::shared_ptr createTextMessageFromText(QString text); std::shared_ptr createMessage(QString text, QList> filesContent); std::shared_ptr searchMessageByText(QString text, std::shared_ptr = nullptr, bool forward = true); void compose(); linphone::ChatRoom::State getState() const; void setMuted(bool muted); void enableEphemeral(bool enable); void setEphemeralLifetime(int time); void setSubject(QString subject) const; void removeParticipantAtIndex(int index) const; void setParticipantAddresses(const QStringList &addresses) const; void toggleParticipantAdminStatusAtIndex(int index) const; signals: void historyDeleted(); void messagesRead(); void deleted(); void mutedChanged(bool muted); void ephemeralEnableChanged(bool enable); void ephemeralLifetimeChanged(int time); private: DECLARE_ABSTRACT_OBJECT //-------------------------------------------------------------------------------- // LINPHONE //-------------------------------------------------------------------------------- virtual void onIsComposingReceived(const std::shared_ptr &chatRoom, const std::shared_ptr &remoteAddress, bool isComposing) override; virtual void onMessageReceived(const std::shared_ptr &chatRoom, const std::shared_ptr &message) override; virtual void onMessagesReceived(const std::shared_ptr &chatRoom, const std::list> &chatMessages) override; virtual void onNewEvent(const std::shared_ptr &chatRoom, const std::shared_ptr &eventLog) override; virtual void onNewEvents(const std::shared_ptr &chatRoom, const std::list> &eventLogs) override; virtual void onChatMessageReceived(const std::shared_ptr &chatRoom, const std::shared_ptr &eventLog) override; virtual void onChatMessagesReceived(const std::shared_ptr &chatRoom, const std::list> &eventLogs) override; virtual void onChatMessageSending(const std::shared_ptr &chatRoom, const std::shared_ptr &eventLog) override; virtual void onChatMessageSent(const std::shared_ptr &chatRoom, const std::shared_ptr &eventLog) override; virtual void onParticipantAdded(const std::shared_ptr &chatRoom, const std::shared_ptr &eventLog) override; virtual void onParticipantRemoved(const std::shared_ptr &chatRoom, const std::shared_ptr &eventLog) override; virtual void onParticipantAdminStatusChanged(const std::shared_ptr &chatRoom, const std::shared_ptr &eventLog) override; virtual void onStateChanged(const std::shared_ptr &chatRoom, linphone::ChatRoom::State newState) override; virtual void onSecurityEvent(const std::shared_ptr &chatRoom, const std::shared_ptr &eventLog) override; virtual void onSubjectChanged(const std::shared_ptr &chatRoom, const std::shared_ptr &eventLog) override; virtual void onUndecryptableMessageReceived(const std::shared_ptr &chatRoom, const std::shared_ptr &message) override; virtual void onParticipantDeviceAdded(const std::shared_ptr &chatRoom, const std::shared_ptr &eventLog) override; virtual void onParticipantDeviceRemoved(const std::shared_ptr &chatRoom, const std::shared_ptr &eventLog) override; virtual void onParticipantDeviceStateChanged(const std::shared_ptr &chatRoom, const std::shared_ptr &eventLog, linphone::ParticipantDevice::State state) override; virtual void onParticipantDeviceMediaAvailabilityChanged(const std::shared_ptr &chatRoom, const std::shared_ptr &eventLog) override; virtual void onConferenceJoined(const std::shared_ptr &chatRoom, const std::shared_ptr &eventLog) override; virtual void onConferenceLeft(const std::shared_ptr &chatRoom, const std::shared_ptr &eventLog) override; virtual void onEphemeralEvent(const std::shared_ptr &chatRoom, const std::shared_ptr &eventLog) override; virtual void onEphemeralMessageTimerStarted(const std::shared_ptr &chatRoom, const std::shared_ptr &eventLog) override; virtual void onEphemeralMessageDeleted(const std::shared_ptr &chatRoom, const std::shared_ptr &eventLog) override; virtual void onConferenceAddressGeneration(const std::shared_ptr &chatRoom) override; virtual void onParticipantRegistrationSubscriptionRequested( const std::shared_ptr &chatRoom, const std::shared_ptr &participantAddress) override; virtual void onParticipantRegistrationUnsubscriptionRequested( const std::shared_ptr &chatRoom, const std::shared_ptr &participantAddress) override; virtual void onChatMessageShouldBeStored(const std::shared_ptr &chatRoom, const std::shared_ptr &message) override; virtual void onChatMessageParticipantImdnStateChanged( const std::shared_ptr &chatRoom, const std::shared_ptr &message, const std::shared_ptr &state) override; virtual void onChatRoomRead(const std::shared_ptr &chatRoom) override; virtual void onNewMessageReaction(const std::shared_ptr &chatRoom, const std::shared_ptr &message, const std::shared_ptr &reaction) override; signals: void isComposingReceived(const std::shared_ptr &chatRoom, const std::shared_ptr &remoteAddress, bool isComposing); void messageReceived(const std::shared_ptr &chatRoom, const std::shared_ptr &message); void messagesReceived(const std::shared_ptr &chatRoom, const std::list> &chatMessages); void newEvent(const std::shared_ptr &chatRoom, const std::shared_ptr &eventLog); void newEvents(const std::shared_ptr &chatRoom, const std::list> &eventLogs); void chatMessageReceived(const std::shared_ptr &chatRoom, const std::shared_ptr &eventLog); void chatMessagesReceived(const std::shared_ptr &chatRoom, const std::list> &eventLogs); void chatMessageSending(const std::shared_ptr &chatRoom, const std::shared_ptr &eventLog); void chatMessageSent(const std::shared_ptr &chatRoom, const std::shared_ptr &eventLog); void participantAdded(const std::shared_ptr &chatRoom, const std::shared_ptr &eventLog); void participantRemoved(const std::shared_ptr &chatRoom, const std::shared_ptr &eventLog); void participantAdminStatusChanged(const std::shared_ptr &chatRoom, const std::shared_ptr &eventLog); void stateChanged(const std::shared_ptr &chatRoom, linphone::ChatRoom::State newState); void securityEvent(const std::shared_ptr &chatRoom, const std::shared_ptr &eventLog); void subjectChanged(const std::shared_ptr &chatRoom, const std::shared_ptr &eventLog); void undecryptableMessageReceived(const std::shared_ptr &chatRoom, const std::shared_ptr &message); void participantDeviceAdded(const std::shared_ptr &chatRoom, const std::shared_ptr &eventLog); void participantDeviceRemoved(const std::shared_ptr &chatRoom, const std::shared_ptr &eventLog); void participantDeviceStateChanged(const std::shared_ptr &chatRoom, const std::shared_ptr &eventLog, linphone::ParticipantDevice::State state); void participantDeviceMediaAvailabilityChanged(const std::shared_ptr &chatRoom, const std::shared_ptr &eventLog); void conferenceJoined(const std::shared_ptr &chatRoom, const std::shared_ptr &eventLog); void conferenceLeft(const std::shared_ptr &chatRoom, const std::shared_ptr &eventLog); void ephemeralEvent(const std::shared_ptr &chatRoom, const std::shared_ptr &eventLog); void ephemeralMessageTimerStarted(const std::shared_ptr &chatRoom, const std::shared_ptr &eventLog); void ephemeralMessageDeleted(const std::shared_ptr &chatRoom, const std::shared_ptr &eventLog); void conferenceAddressGeneration(const std::shared_ptr &chatRoom); void participantRegistrationSubscriptionRequested(const std::shared_ptr &chatRoom, const std::shared_ptr &participantAddress); void participantRegistrationUnsubscriptionRequested(const std::shared_ptr &chatRoom, const std::shared_ptr &participantAddress); void chatMessageShouldBeStored(const std::shared_ptr &chatRoom, const std::shared_ptr &message); void chatMessageParticipantImdnStateChanged(const std::shared_ptr &chatRoom, const std::shared_ptr &message, const std::shared_ptr &state); void chatRoomRead(const std::shared_ptr &chatRoom); void newMessageReaction(const std::shared_ptr &chatRoom, const std::shared_ptr &message, const std::shared_ptr &reaction); }; #endif