From bb9c6de6d66e4189e1b6fcdea1e938b87f45e60f Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Fri, 22 Sep 2017 11:17:58 +0200 Subject: [PATCH] Started cpp ChatMessage --- src/chat/chat-message-p.h | 6 +++++- src/chat/chat-message.cpp | 22 +++++++++++++++++----- src/chat/chat-message.h | 12 ++++++++++-- src/chat/chat-room.cpp | 4 +++- 4 files changed, 35 insertions(+), 9 deletions(-) diff --git a/src/chat/chat-message-p.h b/src/chat/chat-message-p.h index 7b77764cd..8614e1e7a 100644 --- a/src/chat/chat-message-p.h +++ b/src/chat/chat-message-p.h @@ -31,8 +31,12 @@ class ChatMessagePrivate : public ObjectPrivate { friend class CpimChatMessageModifier; friend class MultipartChatMessageModifier; +public: + ChatMessagePrivate (const std::shared_ptr &room); + virtual ~ChatMessagePrivate (); + private: - std::weak_ptr chatRoom; + std::shared_ptr chatRoom; ChatMessage::Direction direction = ChatMessage::Incoming; // LinphoneAddress *from; // LinphoneAddress *to; diff --git a/src/chat/chat-message.cpp b/src/chat/chat-message.cpp index ee56033da..a38ca9fd5 100644 --- a/src/chat/chat-message.cpp +++ b/src/chat/chat-message.cpp @@ -22,6 +22,7 @@ #include "linphone/types.h" #include "linphone/core.h" #include "linphone/lpconfig.h" +#include "c-wrapper/c-wrapper.h" #include "chat-message-p.h" #include "chat-message.h" @@ -30,6 +31,8 @@ #include "modifier/cpim-chat-message-modifier.h" #include "chat-room.h" +#define GET_BACK_PTR(object) L_GET_C_BACK_PTR(object->shared_from_this(), ChatMessage) + // ============================================================================= LINPHONE_BEGIN_NAMESPACE @@ -38,15 +41,24 @@ using namespace std; // ----------------------------------------------------------------------------- +ChatMessagePrivate::ChatMessagePrivate (const std::shared_ptr &room) +: chatRoom(room) {} + +ChatMessagePrivate::~ChatMessagePrivate () {} + +// ----------------------------------------------------------------------------- + +ChatMessage::ChatMessage (const std::shared_ptr &room) : Object(*new ChatMessagePrivate(room)) {} + ChatMessage::ChatMessage (ChatMessagePrivate &p) : Object(p) {} +LinphoneChatMessage * ChatMessage::getBackPtr() { + return GET_BACK_PTR(this); +} + shared_ptr ChatMessage::getChatRoom () const { L_D(const ChatMessage); - shared_ptr chatRoom = d->chatRoom.lock(); - if (!chatRoom) { - // TODO. - } - return chatRoom; + return d->chatRoom; } ChatMessage::Direction ChatMessage::getDirection () const { diff --git a/src/chat/chat-message.h b/src/chat/chat-message.h index b8b026c8e..a105d7487 100644 --- a/src/chat/chat-message.h +++ b/src/chat/chat-message.h @@ -22,6 +22,8 @@ #include #include +#include "linphone/api/c-chat-message.h" + #include "object/object.h" // ============================================================================= @@ -54,6 +56,11 @@ public: Displayed }; + ChatMessage (const std::shared_ptr &room); + virtual ~ChatMessage () = default; + + LinphoneChatMessage * getBackPtr(); + std::shared_ptr getChatRoom () const; Direction getDirection () const; @@ -89,9 +96,10 @@ public: void addCustomHeader (const std::string &headerName, const std::string &headerValue); void removeCustomHeader (const std::string &headerName); -private: - ChatMessage (ChatMessagePrivate &p); +protected: + explicit ChatMessage (ChatMessagePrivate &p); +private: L_DECLARE_PRIVATE(ChatMessage); L_DISABLE_COPY(ChatMessage); }; diff --git a/src/chat/chat-room.cpp b/src/chat/chat-room.cpp index dd28bc88d..97e78cef1 100644 --- a/src/chat/chat-room.cpp +++ b/src/chat/chat-room.cpp @@ -27,6 +27,7 @@ #include "imdn.h" #include "logger/logger.h" +#include "chat-message.h" #include "chat-room.h" #define GET_BACK_PTR(object) L_GET_C_BACK_PTR(object->shared_from_this(), ChatRoom) @@ -609,7 +610,8 @@ LinphoneChatMessage *ChatRoom::createFileTransferMessage (const LinphoneContent } LinphoneChatMessage *ChatRoom::createMessage (const string &message) { - LinphoneChatMessage *msg = createMessage(""); + ChatMessage chatMessage(static_pointer_cast(shared_from_this())); + LinphoneChatMessage *msg = chatMessage.getBackPtr(); linphone_chat_message_set_chat_room(msg, GET_BACK_PTR(this)); linphone_chat_message_set_state(msg, LinphoneChatMessageStateIdle); linphone_chat_message_set_text(msg, message.empty() ? nullptr : ms_strdup(message.c_str()));