From a6b6b7aeb4e59b3bb3ab3fba07469253473fb71e Mon Sep 17 00:00:00 2001 From: Ronan Abhamon Date: Mon, 27 Nov 2017 11:54:47 +0100 Subject: [PATCH] fix(MainDb): add me in db --- src/chat/chat-room/client-group-chat-room.cpp | 9 +++++---- src/chat/chat-room/client-group-chat-room.h | 3 ++- src/conference/conference-p.h | 7 +++---- src/db/main-db.cpp | 17 +++++++++++++++-- 4 files changed, 25 insertions(+), 11 deletions(-) diff --git a/src/chat/chat-room/client-group-chat-room.cpp b/src/chat/chat-room/client-group-chat-room.cpp index dbb526e49..a1d67734a 100644 --- a/src/chat/chat-room/client-group-chat-room.cpp +++ b/src/chat/chat-room/client-group-chat-room.cpp @@ -99,19 +99,20 @@ RemoteConference(core, me, nullptr) { ClientGroupChatRoom::ClientGroupChatRoom ( const shared_ptr &core, - const ChatRoomId &chatRoomId, + const IdentityAddress &peerAddress, + shared_ptr &me, const string &subject, list> &&participants -) : ChatRoom(*new ClientGroupChatRoomPrivate, core, chatRoomId), -RemoteConference(core, chatRoomId.getLocalAddress(), nullptr) { +) : ChatRoom(*new ClientGroupChatRoomPrivate, core, ChatRoomId(peerAddress, me->getAddress())), +RemoteConference(core, me->getAddress(), nullptr) { L_D(); L_D_T(RemoteConference, dConference); - const IdentityAddress &peerAddress = chatRoomId.getPeerAddress(); dConference->focus = make_shared(peerAddress); dConference->conferenceAddress = peerAddress; dConference->subject = subject; dConference->participants = move(participants); d->state = ChatRoom::State::Created; + getMe()->getPrivate()->setAdmin(me->isAdmin()); } shared_ptr ClientGroupChatRoom::getCore () const { diff --git a/src/chat/chat-room/client-group-chat-room.h b/src/chat/chat-room/client-group-chat-room.h index c0b240538..28ef3ffdd 100644 --- a/src/chat/chat-room/client-group-chat-room.h +++ b/src/chat/chat-room/client-group-chat-room.h @@ -41,7 +41,8 @@ public: ClientGroupChatRoom ( const std::shared_ptr &core, - const ChatRoomId &chatRoomId, + const IdentityAddress &peerAddress, + std::shared_ptr &me, const std::string &subject, std::list> &&participants ); diff --git a/src/conference/conference-p.h b/src/conference/conference-p.h index f738da3a5..242e76dc7 100644 --- a/src/conference/conference-p.h +++ b/src/conference/conference-p.h @@ -37,15 +37,14 @@ public: std::string subject; protected: - Conference *mPublic = nullptr; - std::shared_ptr activeParticipant; + std::shared_ptr me; + + Conference *mPublic = nullptr; private: CallListener *callListener = nullptr; - std::shared_ptr me; - L_DECLARE_PUBLIC(Conference); }; diff --git a/src/db/main-db.cpp b/src/db/main-db.cpp index 49daee670..c7804c371 100644 --- a/src/db/main-db.cpp +++ b/src/db/main-db.cpp @@ -235,6 +235,8 @@ MainDb::MainDb (const shared_ptr &core) : AbstractDb(*new MainDbPrivate), soci::use(static_cast(chatRoom->getCapabilities())), soci::use(chatRoom->getSubject()); id = q->getLastInsertId(); + shared_ptr me = chatRoom->getMe(); + insertChatRoomParticipant(id, insertSipAddress(me->getAddress().asString()), me->isAdmin()); for (const auto &participant : chatRoom->getParticipants()) insertChatRoomParticipant(id, insertSipAddress(participant->getAddress().asString()), participant->isAdmin()); @@ -1577,13 +1579,24 @@ MainDb::MainDb (const shared_ptr &core) : AbstractDb(*new MainDbPrivate), " AND chat_room_participant.chat_room_id = chat_room.id"; soci::rowset rows = (session->prepare << query); + shared_ptr me; for (const auto &row : rows) { shared_ptr participant = make_shared(IdentityAddress(row.get(0))); participant->getPrivate()->setAdmin(!!row.get(1)); - participants.push_back(participant); + + if (participant->getAddress() == chatRoomId.getPeerAddress()) + me = participant; + else + participants.push_back(participant); } - chatRoom = make_shared(core, chatRoomId, subject, move(participants)); + if (!me) { + lError() << "Unable to find me in: (peer=" + chatRoomId.getPeerAddress().asString() + + ", local=" + chatRoomId.getLocalAddress().asString() + ")."; + continue; + } + + chatRoom = make_shared(core, chatRoomId.getPeerAddress(), me, subject, move(participants)); } if (!chatRoom)