X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcore%2Fsqlitestorage.cpp;h=dc5b546713da8659a09e5eb878fca75568da222f;hp=f56f914e9b339968bbf06befdce9b9a8dcf3189c;hb=b134e777b822b929a78455fd92146bf7443e9aa1;hpb=af9f6788daf6910d3727bf5a85cd88ebf0b93ba4 diff --git a/src/core/sqlitestorage.cpp b/src/core/sqlitestorage.cpp index f56f914e..dc5b5467 100644 --- a/src/core/sqlitestorage.cpp +++ b/src/core/sqlitestorage.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-2019 by the Quassel Project * + * Copyright (C) 2005-2020 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -20,9 +20,10 @@ #include "sqlitestorage.h" -#include - +#include +#include #include +#include #include "network.h" #include "quassel.h" @@ -649,9 +650,9 @@ void SqliteStorage::removeIdentity(UserId user, IdentityId identityId) unlock(); } -QList SqliteStorage::identities(UserId user) +std::vector SqliteStorage::identities(UserId user) { - QList identities; + std::vector identities; QSqlDatabase db = logDb(); db.transaction(); @@ -698,8 +699,8 @@ QList SqliteStorage::identities(UserId user) while (nickQuery.next()) { nicks << nickQuery.value(0).toString(); } - identity.setNicks(nicks); - identities << identity; + identity.setNicks(std::move(nicks)); + identities.push_back(std::move(identity)); } db.commit(); } @@ -937,9 +938,9 @@ bool SqliteStorage::removeNetwork(UserId user, const NetworkId& networkId) return true; } -QList SqliteStorage::networks(UserId user) +std::vector SqliteStorage::networks(UserId user) { - QList nets; + std::vector nets; QSqlDatabase db = logDb(); db.transaction(); @@ -1007,7 +1008,7 @@ QList SqliteStorage::networks(UserId user) servers << server; } net.serverList = servers; - nets << net; + nets.push_back(std::move(net)); } } } @@ -1017,9 +1018,9 @@ QList SqliteStorage::networks(UserId user) return nets; } -QList SqliteStorage::connectedNetworks(UserId user) +std::vector SqliteStorage::connectedNetworks(UserId user) { - QList connectedNets; + std::vector connectedNets; QSqlDatabase db = logDb(); db.transaction(); @@ -1033,7 +1034,7 @@ QList SqliteStorage::connectedNetworks(UserId user) watchQuery(query); while (query.next()) { - connectedNets << query.value(0).toInt(); + connectedNets.emplace_back(query.value(0).toInt()); } db.commit(); } @@ -1294,9 +1295,9 @@ BufferInfo SqliteStorage::getBufferInfo(UserId user, const BufferId& bufferId) return bufferInfo; } -QList SqliteStorage::requestBuffers(UserId user) +std::vector SqliteStorage::requestBuffers(UserId user) { - QList bufferlist; + std::vector bufferlist; QSqlDatabase db = logDb(); db.transaction(); @@ -1310,11 +1311,11 @@ QList SqliteStorage::requestBuffers(UserId user) safeExec(query); watchQuery(query); while (query.next()) { - bufferlist << BufferInfo(query.value(0).toInt(), - query.value(1).toInt(), - (BufferInfo::Type)query.value(2).toInt(), - query.value(3).toInt(), - query.value(4).toString()); + bufferlist.emplace_back(query.value(0).toInt(), + query.value(1).toInt(), + (BufferInfo::Type)query.value(2).toInt(), + query.value(3).toInt(), + query.value(4).toString()); } db.commit(); } @@ -1323,9 +1324,9 @@ QList SqliteStorage::requestBuffers(UserId user) return bufferlist; } -QList SqliteStorage::requestBufferIdsForNetwork(UserId user, NetworkId networkId) +std::vector SqliteStorage::requestBufferIdsForNetwork(UserId user, NetworkId networkId) { - QList bufferList; + std::vector bufferList; QSqlDatabase db = logDb(); db.transaction(); @@ -1340,7 +1341,7 @@ QList SqliteStorage::requestBufferIdsForNetwork(UserId user, NetworkId safeExec(query); watchQuery(query); while (query.next()) { - bufferList << BufferId(query.value(0).toInt()); + bufferList.emplace_back(query.value(0).toInt()); } db.commit(); } @@ -1484,6 +1485,34 @@ bool SqliteStorage::mergeBuffersPermanently(const UserId& user, const BufferId& return !error; } +QHash SqliteStorage::bufferLastMsgIds(UserId user) +{ + QHash lastMsgHash; + + QSqlDatabase db = logDb(); + db.transaction(); + + bool error = false; + { + QSqlQuery query(db); + query.prepare(queryString("select_buffer_last_messages")); + query.bindValue(":userid", user.toInt()); + + lockForRead(); + safeExec(query); + error = !watchQuery(query); + if (!error) { + while (query.next()) { + lastMsgHash[query.value(0).toInt()] = query.value(1).toLongLong(); + } + } + } + + db.commit(); + unlock(); + return lastMsgHash; +} + void SqliteStorage::setBufferLastSeenMsg(UserId user, const BufferId& bufferId, const MsgId& msgId) { QSqlDatabase db = logDb(); @@ -1896,9 +1925,9 @@ bool SqliteStorage::logMessages(MessageList& msgs) return !error; } -QList SqliteStorage::requestMsgs(UserId user, BufferId bufferId, MsgId first, MsgId last, int limit) +std::vector SqliteStorage::requestMsgs(UserId user, BufferId bufferId, MsgId first, MsgId last, int limit) { - QList messagelist; + std::vector messagelist; QSqlDatabase db = logDb(); db.transaction(); @@ -1965,7 +1994,7 @@ QList SqliteStorage::requestMsgs(UserId user, BufferId bufferId, MsgId query.value(7).toString(), (Message::Flags)query.value(3).toInt()); msg.setMsgId(query.value(0).toLongLong()); - messagelist << msg; + messagelist.push_back(std::move(msg)); } } db.commit(); @@ -1974,10 +2003,10 @@ QList SqliteStorage::requestMsgs(UserId user, BufferId bufferId, MsgId return messagelist; } -QList SqliteStorage::requestMsgsFiltered( +std::vector SqliteStorage::requestMsgsFiltered( UserId user, BufferId bufferId, MsgId first, MsgId last, int limit, Message::Types type, Message::Flags flags) { - QList messagelist; + std::vector messagelist; QSqlDatabase db = logDb(); db.transaction(); @@ -2049,7 +2078,7 @@ QList SqliteStorage::requestMsgsFiltered( query.value(7).toString(), Message::Flags{query.value(3).toInt()}); msg.setMsgId(query.value(0).toLongLong()); - messagelist << msg; + messagelist.push_back(std::move(msg)); } } db.commit(); @@ -2058,9 +2087,9 @@ QList SqliteStorage::requestMsgsFiltered( return messagelist; } -QList SqliteStorage::requestAllMsgs(UserId user, MsgId first, MsgId last, int limit) +std::vector SqliteStorage::requestAllMsgs(UserId user, MsgId first, MsgId last, int limit) { - QList messagelist; + std::vector messagelist; QSqlDatabase db = logDb(); db.transaction(); @@ -2112,7 +2141,7 @@ QList SqliteStorage::requestAllMsgs(UserId user, MsgId first, MsgId las query.value(8).toString(), (Message::Flags)query.value(4).toInt()); msg.setMsgId(query.value(0).toLongLong()); - messagelist << msg; + messagelist.push_back(std::move(msg)); } } db.commit(); @@ -2120,9 +2149,9 @@ QList SqliteStorage::requestAllMsgs(UserId user, MsgId first, MsgId las return messagelist; } -QList SqliteStorage::requestAllMsgsFiltered(UserId user, MsgId first, MsgId last, int limit, Message::Types type, Message::Flags flags) +std::vector SqliteStorage::requestAllMsgsFiltered(UserId user, MsgId first, MsgId last, int limit, Message::Types type, Message::Flags flags) { - QList messagelist; + std::vector messagelist; QSqlDatabase db = logDb(); db.transaction(); @@ -2179,7 +2208,7 @@ QList SqliteStorage::requestAllMsgsFiltered(UserId user, MsgId first, M query.value(8).toString(), Message::Flags{query.value(4).toInt()}); msg.setMsgId(query.value(0).toLongLong()); - messagelist << msg; + messagelist.push_back(std::move(msg)); } } db.commit();