From 0e0ae5b546da0bfcc5372bd6f58c74adfc13eb05 Mon Sep 17 00:00:00 2001 From: Ronan Abhamon Date: Thu, 21 Dec 2017 16:06:01 +0100 Subject: [PATCH] feat(MainDb): add participants and devices on basic to client group chat room migration --- src/db/main-db.cpp | 42 ++++++++++++++++++++++++++++++------------ src/db/main-db.h | 4 ++-- 2 files changed, 32 insertions(+), 14 deletions(-) diff --git a/src/db/main-db.cpp b/src/db/main-db.cpp index 01fca6f1d..dee20e146 100644 --- a/src/db/main-db.cpp +++ b/src/db/main-db.cpp @@ -2215,8 +2215,8 @@ static constexpr string &blobToString (string &in) { } void MainDb::migrateBasicToClientGroupChatRoom ( - const shared_ptr &chatRoom, - const ChatRoomId &newChatRoomId + const shared_ptr &basicChatRoom, + const shared_ptr &clientGroupChatRoom ) { L_D(); @@ -2225,32 +2225,50 @@ static constexpr string &blobToString (string &in) { return; } - L_ASSERT( - chatRoom->getCapabilities().isSet(ChatRoom::Capabilities::Proxy) && - chatRoom->getCapabilities().isSet(ChatRoom::Capabilities::Basic) - ); + L_ASSERT(basicChatRoom->getCapabilities().isSet(ChatRoom::Capabilities::Basic)); + L_ASSERT(clientGroupChatRoom->getCapabilities().isSet(ChatRoom::Capabilities::Conference)); L_BEGIN_LOG_EXCEPTION - const long long &dbChatRoomId = d->selectChatRoomId(chatRoom->getChatRoomId()); + const long long &dbChatRoomId = d->selectChatRoomId(basicChatRoom->getChatRoomId()); // TODO: Update events and chat messages. (Or wait signals.) soci::session *session = d->dbSession.getBackendSession(); soci::transaction tr(*session); + const ChatRoomId &newChatRoomId = clientGroupChatRoom->getChatRoomId(); const long long &peerSipAddressId = d->insertSipAddress(newChatRoomId.getPeerAddress().asString()); const long long &localSipAddressId = d->insertSipAddress(newChatRoomId.getLocalAddress().asString()); - const int &capabilities = ChatRoom::CapabilitiesMask({ ChatRoom::Capabilities::Conference }); + const int &capabilities = clientGroupChatRoom->getCapabilities(); *session << "UPDATE chat_room" " SET capabilities = :capabilities," - " peer_sip_address_id = :peerSipAddressId," - " local_sip_address_id = :localSipAddressId" + " peer_sip_address_id = :peerSipAddressId," + " local_sip_address_id = :localSipAddressId" " WHERE id = :chatRoomId", soci::use(capabilities), soci::use(peerSipAddressId), soci::use(localSipAddressId), soci::use(dbChatRoomId); - // TODO: Participants. + shared_ptr me = clientGroupChatRoom->getMe(); + long long meId = d->insertChatRoomParticipant( + dbChatRoomId, + d->insertSipAddress(me->getAddress().asString()), + true + ); + for (const auto &device : me->getPrivate()->getDevices()) + d->insertChatRoomParticipantDevice(meId, d->insertSipAddress(device->getAddress().asString())); + + for (const auto &participant : clientGroupChatRoom->getParticipants()) { + long long participantId = d->insertChatRoomParticipant( + dbChatRoomId, + d->insertSipAddress(participant->getAddress().asString()), + true + ); + for (const auto &device : participant->getPrivate()->getDevices()) + d->insertChatRoomParticipantDevice(participantId, d->insertSipAddress(device->getAddress().asString())); + } + + tr.commit(); L_END_LOG_EXCEPTION } @@ -2497,7 +2515,7 @@ static constexpr string &blobToString (string &in) { void MainDb::migrateBasicToClientGroupChatRoom ( const shared_ptr &, - const ChatRoomId &newChatRoomId + const shared_ptr & ) {} void MainDb::cleanHistory (const ChatRoomId &, FilterMask) {} diff --git a/src/db/main-db.h b/src/db/main-db.h index 38f6fbc99..c2b164f65 100644 --- a/src/db/main-db.h +++ b/src/db/main-db.h @@ -120,8 +120,8 @@ public: void deleteChatRoom (const ChatRoomId &chatRoomId); void migrateBasicToClientGroupChatRoom ( - const std::shared_ptr &chatRoom, - const ChatRoomId &newChatRoomId + const std::shared_ptr &basicChatRoom, + const std::shared_ptr &clientGroupChatRoom ); // ---------------------------------------------------------------------------