diff --git a/src/db/main-db.cpp b/src/db/main-db.cpp index b30a24bf7..e6e22caaa 100644 --- a/src/db/main-db.cpp +++ b/src/db/main-db.cpp @@ -1504,7 +1504,7 @@ MainDb::MainDb (const shared_ptr &core) : AbstractDb(*new MainDbPrivate), // ----------------------------------------------------------------------------- list> MainDb::getChatRooms () const { - static const string query = "SELECT peer_sip_address.value, local_sip_address.value, creation_time, last_update_time, capabilities, subject, last_notify_id" + static const string query = "SELECT chat_room.id, peer_sip_address.value, local_sip_address.value, creation_time, last_update_time, capabilities, subject, last_notify_id" " FROM chat_room, sip_address AS peer_sip_address, sip_address AS local_sip_address" " WHERE chat_room.peer_sip_address_id = peer_sip_address.id AND chat_room.local_sip_address_id = local_sip_address.id" " ORDER BY last_update_time DESC"; @@ -1528,8 +1528,8 @@ MainDb::MainDb (const shared_ptr &core) : AbstractDb(*new MainDbPrivate), soci::rowset rows = (session->prepare << query); for (const auto &row : rows) { ChatRoomId chatRoomId = ChatRoomId( - IdentityAddress(row.get(0)), - IdentityAddress(row.get(1)) + IdentityAddress(row.get(1)), + IdentityAddress(row.get(2)) ); shared_ptr chatRoom = core->findChatRoom(chatRoomId); if (chatRoom) { @@ -1537,11 +1537,11 @@ MainDb::MainDb (const shared_ptr &core) : AbstractDb(*new MainDbPrivate), continue; } - tm creationTime = row.get(2); - tm lastUpdateTime = row.get(3); - int capabilities = row.get(4); - string subject = row.get(5); - unsigned int lastNotifyId = static_cast(row.get(6, 0)); + tm creationTime = row.get(3); + tm lastUpdateTime = row.get(4); + int capabilities = row.get(5); + string subject = row.get(6); + unsigned int lastNotifyId = static_cast(row.get(7, 0)); // TODO: Use me. (void)lastNotifyId; @@ -1555,9 +1555,13 @@ MainDb::MainDb (const shared_ptr &core) : AbstractDb(*new MainDbPrivate), } else if (capabilities & static_cast(ChatRoom::Capabilities::Conference)) { list> participants; + long long dbChatRoomId = getBackend() == AbstractDb::Sqlite3 + ? static_cast(row.get(0)) + : row.get(0); + string query = "SELECT sip_address.value, is_admin" " FROM sip_address, chat_room, chat_room_participant" - " WHERE chat_room.id = :chatRoomId" + " WHERE chat_room.id = " + Utils::toString(dbChatRoomId) + " AND sip_address.id = chat_room_participant.participant_sip_address_id" " AND chat_room_participant.chat_room_id = chat_room.id";