From 75cbb769457a738ea2f676a37b6957a003ad84f5 Mon Sep 17 00:00:00 2001 From: Ronan Abhamon Date: Thu, 18 Jan 2018 16:59:33 +0100 Subject: [PATCH] feat(MainDb): add a findOneToOneConferenceChatRoomAddress method --- src/db/main-db.cpp | 49 ++++++++++++++++++++++++++++++++++++++++++++++ src/db/main-db.h | 5 +++++ 2 files changed, 54 insertions(+) diff --git a/src/db/main-db.cpp b/src/db/main-db.cpp index 88ed92b02..0e6c65d4f 100644 --- a/src/db/main-db.cpp +++ b/src/db/main-db.cpp @@ -2596,6 +2596,48 @@ void MainDb::migrateBasicToClientGroupChatRoom ( L_END_LOG_EXCEPTION } +IdentityAddress MainDb::findOneToOneConferenceChatRoomAddress ( + const IdentityAddress &participantA, + const IdentityAddress &participantB +) const { + static const string query = "SELECT sip_address.value" + " FROM chat_room, sip_address" + " WHERE capabilities = " + Utils::toString(static_cast(ChatRoom::Capabilities::Conference)) + + " AND (SELECT COUNT(*) FROM chat_room_participant WHERE chat_room_id = chat_room.id) = 2" + " AND (SELECT COUNT(*) FROM chat_room_participant WHERE chat_room_id = chat_room.id AND participant_sip_address_id IN (" + " (SELECT id FROM sip_address WHERE value = :participantSipAddressA)," + " (SELECT id FROM sip_address WHERE value = :participantSipAddressB)" + " )) = 2" + " AND sip_address.id = peer_sip_address_id" + " LIMIT 1"; + + L_D(); + + if (!isConnected()) { + lWarning() << "Unable to find one to one conference chat room. Not connected."; + return IdentityAddress(); + } + + L_BEGIN_LOG_EXCEPTION + + soci::session *session = d->dbSession.getBackendSession(); + soci::transaction tr(*session); + + const string &participantSipAddressA = participantA.asString(); + const string &participantSipAddressB = participantB.asString(); + + string chatRoomAddress; + + *session << query, soci::use(participantSipAddressA), soci::use(participantSipAddressB), soci::into(chatRoomAddress); + + return IdentityAddress(chatRoomAddress); + + L_END_LOG_EXCEPTION + + // Soci error. + return IdentityAddress(); +} + void MainDb::enableChatRoomMigration (const ChatRoomId &chatRoomId, bool enable) { L_D(); @@ -2740,6 +2782,13 @@ void MainDb::migrateBasicToClientGroupChatRoom ( const shared_ptr & ) {} +IdentityAddress MainDb::findOneToOneConferenceChatRoomAddress ( + const IdentityAddress &, + const IdentityAddress & +) const { + return IdentityAddress(); +} + void MainDb::cleanHistory (const ChatRoomId &, FilterMask) {} bool MainDb::import (Backend, const string &) { diff --git a/src/db/main-db.h b/src/db/main-db.h index 04fd9b8cb..188cc655e 100644 --- a/src/db/main-db.h +++ b/src/db/main-db.h @@ -125,6 +125,11 @@ public: const std::shared_ptr &clientGroupChatRoom ); + IdentityAddress findOneToOneConferenceChatRoomAddress ( + const IdentityAddress &participantA, + const IdentityAddress &participantB + ) const; + // --------------------------------------------------------------------------- // Other. // ---------------------------------------------------------------------------