From fe8930cecd1f2103361317a1e2dc2de19b8e93e5 Mon Sep 17 00:00:00 2001 From: Benjamin Reis Date: Fri, 22 Dec 2017 16:11:32 +0100 Subject: [PATCH] notify fallbacked chat room creation --- src/chat/chat-room/abstract-chat-room.h | 1 + src/chat/chat-room/basic-chat-room.h | 1 + .../chat-room/client-group-to-basic-chat-room.cpp | 7 ++++++- src/core/core-chat-room.cpp | 14 ++++++++++++++ src/core/core.h | 1 + 5 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/chat/chat-room/abstract-chat-room.h b/src/chat/chat-room/abstract-chat-room.h index 9eb1139a0..63c42c4b5 100644 --- a/src/chat/chat-room/abstract-chat-room.h +++ b/src/chat/chat-room/abstract-chat-room.h @@ -37,6 +37,7 @@ class EventLog; class LINPHONE_PUBLIC AbstractChatRoom : public Object, public CoreAccessor, public ConferenceInterface { friend class ChatMessage; friend class ChatMessagePrivate; + friend class ClientGroupToBasicChatRoomPrivate; friend class CorePrivate; friend class MainDb; friend class ProxyChatRoomPrivate; diff --git a/src/chat/chat-room/basic-chat-room.h b/src/chat/chat-room/basic-chat-room.h index 50d0eb522..bf11ef9c1 100644 --- a/src/chat/chat-room/basic-chat-room.h +++ b/src/chat/chat-room/basic-chat-room.h @@ -29,6 +29,7 @@ LINPHONE_BEGIN_NAMESPACE class BasicChatRoomPrivate; class LINPHONE_PUBLIC BasicChatRoom : public ChatRoom { + friend class Core; friend class CorePrivate; public: diff --git a/src/chat/chat-room/client-group-to-basic-chat-room.cpp b/src/chat/chat-room/client-group-to-basic-chat-room.cpp index 0aa3ec351..00a4c4e0f 100644 --- a/src/chat/chat-room/client-group-to-basic-chat-room.cpp +++ b/src/chat/chat-room/client-group-to-basic-chat-room.cpp @@ -68,7 +68,12 @@ public: cgcr->getPrivate()->setChatRoomListener(nullptr); Core::deleteChatRoom(q->getSharedFromThis()); LinphoneChatRoom *lcr = L_GET_C_BACK_PTR(q); - L_SET_CPP_PTR_FROM_C_OBJECT(lcr, cgcr->getCore()->getOrCreateBasicChatRoom(invitedAddresses.front())); + shared_ptr bcr = cgcr->getCore()->onlyGetOrCreateBasicChatRoom(invitedAddresses.front()); + L_SET_CPP_PTR_FROM_C_OBJECT(lcr, bcr); + bcr->getPrivate()->setState(ChatRoom::State::Instantiated); + bcr->getPrivate()->setState(ChatRoom::State::Created); + cgcr->getCore()->getPrivate()->insertChatRoom(bcr); + cgcr->getCore()->getPrivate()->insertChatRoomWithDb(bcr); return; } cgcr->getPrivate()->onCallSessionStateChanged(session, newState, message); diff --git a/src/core/core-chat-room.cpp b/src/core/core-chat-room.cpp index 757d3325f..98339fadf 100644 --- a/src/core/core-chat-room.cpp +++ b/src/core/core-chat-room.cpp @@ -185,6 +185,20 @@ shared_ptr Core::createClientGroupChatRoom (const string &subj return d->createClientGroupChatRoom(subject, true); } +shared_ptr Core::onlyGetOrCreateBasicChatRoom (const IdentityAddress &peerAddress, bool isRtt) { + list> chatRooms = findChatRooms(peerAddress); + if (!chatRooms.empty()) + return chatRooms.front(); + + const ChatRoomId &chatRoomId = ChatRoomId(peerAddress, getDefaultLocalAddress(getSharedFromThis(), peerAddress)); + shared_ptr chatRoom; + + BasicChatRoom *basicChatRoom = new BasicChatRoom(getSharedFromThis(), chatRoomId); + chatRoom.reset(basicChatRoom); + + return chatRoom; +} + shared_ptr Core::getOrCreateBasicChatRoom (const ChatRoomId &chatRoomId, bool isRtt) { L_D(); diff --git a/src/core/core.h b/src/core/core.h index 1a09fc193..f078b4fd1 100644 --- a/src/core/core.h +++ b/src/core/core.h @@ -107,6 +107,7 @@ public: const IdentityAddress &localAddress ); + std::shared_ptr onlyGetOrCreateBasicChatRoom (const IdentityAddress &peerAddress, bool isRtt = false); std::shared_ptr getOrCreateBasicChatRoom (const ChatRoomId &chatRoomId, bool isRtt = false); std::shared_ptr getOrCreateBasicChatRoom (const IdentityAddress &peerAddress, bool isRtt = false);