diff --git a/src/chat/chat-room/chat-room.h b/src/chat/chat-room/chat-room.h index 01a5108c8..cabe8f6e4 100644 --- a/src/chat/chat-room/chat-room.h +++ b/src/chat/chat-room/chat-room.h @@ -31,6 +31,7 @@ class ChatRoomPrivate; class LINPHONE_PUBLIC ChatRoom : public Object, public ConferenceInterface { friend class Core; + friend class CorePrivate; friend class ChatMessage; friend class ChatMessagePrivate; diff --git a/src/core/core-p.h b/src/core/core-p.h index 243fed9ac..36c70a3a7 100644 --- a/src/core/core-p.h +++ b/src/core/core-p.h @@ -36,6 +36,8 @@ public: void insertChatRoomWithDb (const std::shared_ptr &chatRoom); void deleteChatRoomWithDb (const std::string &peerAddress); + std::shared_ptr createChatRoom (const Address &peerAddress, bool isRtt); + private: void insertChatRoom (const std::shared_ptr &chatRoom); void deleteChatRoom (const std::string &peerAddress); diff --git a/src/core/core.cpp b/src/core/core.cpp index 8a587f74c..f13d69707 100644 --- a/src/core/core.cpp +++ b/src/core/core.cpp @@ -56,6 +56,21 @@ static inline Address getCleanedPeerAddress (const Address &peerAddress) { // CorePrivate: ChatRoom. // ----------------------------------------------------------------------------- +shared_ptr CorePrivate::createChatRoom (const Address &peerAddress, bool isRtt) { + shared_ptr chatRoom; + + if (isRtt) + chatRoom = ObjectFactory::create(cCore, peerAddress); + else + chatRoom = ObjectFactory::create(cCore, peerAddress); + + ChatRoomPrivate *dChatRoom = chatRoom->getPrivate(); + dChatRoom->setState(ChatRoom::State::Instantiated); + dChatRoom->setState(ChatRoom::State::Created); + + return chatRoom; +} + void CorePrivate::insertChatRoom (const shared_ptr &chatRoom) { L_ASSERT(chatRoom); L_ASSERT(chatRoom->getState() == ChatRoom::State::Created); @@ -169,14 +184,7 @@ shared_ptr Core::getOrCreateBasicChatRoom (const Address &peerAddress, if (chatRoom) return chatRoom; - if (isRtt) - chatRoom = ObjectFactory::create(d->cCore, peerAddress); - else - chatRoom = ObjectFactory::create(d->cCore, peerAddress); - - chatRoom->getPrivate()->setState(ChatRoom::State::Instantiated); - chatRoom->getPrivate()->setState(ChatRoom::State::Created); - + chatRoom = d->createChatRoom(peerAddress, isRtt); d->insertChatRoomWithDb(chatRoom); return chatRoom; diff --git a/src/core/core.h b/src/core/core.h index 207e3275b..8a2cd3aa8 100644 --- a/src/core/core.h +++ b/src/core/core.h @@ -36,6 +36,7 @@ class CorePrivate; class LINPHONE_PUBLIC Core : public Object { friend class ClientGroupChatRoom; + friend class MainDb; public: L_OVERRIDE_SHARED_FROM_THIS(Core); diff --git a/src/db/main-db.cpp b/src/db/main-db.cpp index 23ab4e17d..94473a522 100644 --- a/src/db/main-db.cpp +++ b/src/db/main-db.cpp @@ -30,7 +30,7 @@ #include "conference/participant.h" #include "content/content-type.h" #include "content/content.h" -#include "core/core.h" +#include "core/core-p.h" #include "db/session/db-session-provider.h" #include "event-log/event-log-p.h" #include "event-log/events.h" @@ -1035,7 +1035,7 @@ MainDb::MainDb (Core *core) : AbstractDb(*new MainDbPrivate) { tm lastUpdateDate = row.get(2); int capabilities = row.get(3); string subject = row.get(4); - unsigned int lastNotifyId = row.get(5); + unsigned int lastNotifyId = static_cast(row.get(5, 0)); // TODO: Use me. (void)creationDate; @@ -1045,7 +1045,7 @@ MainDb::MainDb (Core *core) : AbstractDb(*new MainDbPrivate) { shared_ptr chatRoom; if (capabilities & static_cast(ChatRoom::Capabilities::Basic)) { - chatRoom = d->core ? d->core->getOrCreateBasicChatRoom( + chatRoom = d->core ? d->core->getPrivate()->createChatRoom( Address(sipAddress), capabilities & static_cast(ChatRoom::Capabilities::RealTimeText) ) : nullptr; @@ -1066,7 +1066,11 @@ MainDb::MainDb (Core *core) : AbstractDb(*new MainDbPrivate) { void MainDb::insertChatRoom (const string &peerAddress, int capabilities) { L_D(); - d->insertChatRoom(d->insertSipAddress(peerAddress), capabilities, Utils::getLongAsTm(0)); + d->insertChatRoom( + d->insertSipAddress(peerAddress), + capabilities, + Utils::getLongAsTm(static_cast(time(0))) + ); } void MainDb::deleteChatRoom (const string &peerAddress) {