/*
* 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 getUnreadMessagesCount() const;
void markAsRead();
std::list> getHistory() const;
QString getIdentifier() const;
void deleteHistory();
void deleteChatRoom();
void leave();
std::shared_ptr createTextMessageFromText(QString text);
std::shared_ptr createMessage(QString text,
QList> filesContent);
void compose();
linphone::ChatRoom::State getState() const;
void setMuted(bool muted);
void enableEphemeral(bool enable);
signals:
void historyDeleted();
void messagesRead();
void deleted();
void mutedChanged(bool muted);
void ephemeralEnableChanged(bool enable);
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