X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcore%2Fsqlitestorage.cpp;h=cc484206f6ea192be52ff7fd307e1ade0af10b7d;hp=f495acdf82baba66f95b3082c8a52dc5bdf32827;hb=ac21cc48d22f0cf58a98b74754fa94564a8e3f45;hpb=26b9300ccab24e526a9f43bef95a2a70f59161df diff --git a/src/core/sqlitestorage.cpp b/src/core/sqlitestorage.cpp index f495acdf..cc484206 100644 --- a/src/core/sqlitestorage.cpp +++ b/src/core/sqlitestorage.cpp @@ -246,12 +246,11 @@ bool SqliteStorage::updateNetwork(UserId user, const NetworkInfo &info) { QSqlQuery insertServersQuery(logDb()); insertServersQuery.prepare(queryString("insert_server")); - foreach(QVariant server_, info.serverList) { - QVariantMap server = server_.toMap(); - insertServersQuery.bindValue(":hostname", server["Host"]); - insertServersQuery.bindValue(":port", server["Port"].toInt()); - insertServersQuery.bindValue(":password", server["Password"]); - insertServersQuery.bindValue(":ssl", server["UseSSL"].toBool() ? 1 : 0); + foreach(Network::Server server, info.serverList) { + insertServersQuery.bindValue(":hostname", server.host); + insertServersQuery.bindValue(":port", server.port); + insertServersQuery.bindValue(":password", server.password); + insertServersQuery.bindValue(":ssl", server.useSsl ? 1 : 0); insertServersQuery.bindValue(":userid", user.toInt()); insertServersQuery.bindValue(":networkid", info.networkId.toInt()); @@ -358,13 +357,13 @@ QList SqliteStorage::networks(UserId user) { if(!watchQuery(serversQuery)) return nets; - QVariantList servers; + Network::ServerList servers; while(serversQuery.next()) { - QVariantMap server; - server["Host"] = serversQuery.value(0).toString(); - server["Port"] = serversQuery.value(1).toInt(); - server["Password"] = serversQuery.value(2).toString(); - server["UseSSL"] = serversQuery.value(3).toInt() == 1 ? true : false; + Network::Server server; + server.host = serversQuery.value(0).toString(); + server.port = serversQuery.value(1).toUInt(); + server.password = serversQuery.value(2).toString(); + server.useSsl = serversQuery.value(3).toInt() == 1 ? true : false; servers << server; } net.serverList = servers; @@ -693,118 +692,71 @@ MsgId SqliteStorage::logMessage(Message msg) { return msgId; } -QList SqliteStorage::requestMsgs(UserId user, BufferId bufferId, int limit, int offset) { +QList SqliteStorage::requestMsgs(UserId user, BufferId bufferId, MsgId first, MsgId last, int limit) { QList messagelist; BufferInfo bufferInfo = getBufferInfo(user, bufferId); if(!bufferInfo.isValid()) return messagelist; - if(offset == -1) { - offset = 0; + QSqlQuery query(logDb()); + if(last == -1) { + query.prepare(queryString("select_messagesNew")); } else { - // we have to determine the real offset first - QSqlQuery offsetQuery(logDb()); - offsetQuery.prepare(queryString("select_messagesOffset")); - - offsetQuery.bindValue(":bufferid", bufferId.toInt()); - offsetQuery.bindValue(":messageid", offset); - safeExec(offsetQuery); - offsetQuery.first(); - offset = offsetQuery.value(0).toInt(); + query.prepare(queryString("select_messages")); + query.bindValue(":lastmsg", last.toInt()); } - // now let's select the messages - QSqlQuery msgQuery(logDb()); - msgQuery.prepare(queryString("select_messages")); - - msgQuery.bindValue(":bufferid", bufferId.toInt()); - msgQuery.bindValue(":limit", limit); - msgQuery.bindValue(":offset", offset); - safeExec(msgQuery); + query.bindValue(":bufferid", bufferId.toInt()); + query.bindValue(":firstmsg", first.toInt()); + query.bindValue(":limit", limit); + safeExec(query); - watchQuery(msgQuery); + watchQuery(query); - while(msgQuery.next()) { - Message msg(QDateTime::fromTime_t(msgQuery.value(1).toInt()), + while(query.next()) { + Message msg(QDateTime::fromTime_t(query.value(1).toInt()), bufferInfo, - (Message::Type)msgQuery.value(2).toUInt(), - msgQuery.value(5).toString(), - msgQuery.value(4).toString(), - (Message::Flags)msgQuery.value(3).toUInt()); - msg.setMsgId(msgQuery.value(0).toInt()); + (Message::Type)query.value(2).toUInt(), + query.value(5).toString(), + query.value(4).toString(), + (Message::Flags)query.value(3).toUInt()); + msg.setMsgId(query.value(0).toInt()); messagelist << msg; } return messagelist; } - -QList SqliteStorage::requestMsgs(UserId user, BufferId bufferId, QDateTime since, int offset) { +QList SqliteStorage::requestAllMsgs(UserId user, MsgId first, MsgId last, int limit) { QList messagelist; - BufferInfo bufferInfo = getBufferInfo(user, bufferId); - if(!bufferInfo.isValid()) - return messagelist; - - // we have to determine the real offset first - QSqlQuery offsetQuery(logDb()); - offsetQuery.prepare(queryString("select_messagesSinceOffset")); - - offsetQuery.bindValue(":bufferid", bufferId.toInt()); - offsetQuery.bindValue(":since", since.toTime_t()); - safeExec(offsetQuery); - offsetQuery.first(); - offset = offsetQuery.value(0).toInt(); - - // now let's select the messages - QSqlQuery msgQuery(logDb()); - msgQuery.prepare(queryString("select_messagesSince")); - msgQuery.bindValue(":bufferid", bufferId.toInt()); - msgQuery.bindValue(":since", since.toTime_t()); - msgQuery.bindValue(":offset", offset); - safeExec(msgQuery); - - watchQuery(msgQuery); - - while(msgQuery.next()) { - Message msg(QDateTime::fromTime_t(msgQuery.value(1).toInt()), - bufferInfo, - (Message::Type)msgQuery.value(2).toUInt(), - msgQuery.value(5).toString(), - msgQuery.value(4).toString(), - (Message::Flags)msgQuery.value(3).toUInt()); - msg.setMsgId(msgQuery.value(0).toInt()); - messagelist << msg; + QHash bufferInfoHash; + foreach(BufferInfo bufferInfo, requestBuffers(user)) { + bufferInfoHash[bufferInfo.bufferId()] = bufferInfo; } - return messagelist; -} - - -QList SqliteStorage::requestMsgRange(UserId user, BufferId bufferId, int first, int last) { - QList messagelist; - - BufferInfo bufferInfo = getBufferInfo(user, bufferId); - if(!bufferInfo.isValid()) - return messagelist; - - QSqlQuery rangeQuery(logDb()); - rangeQuery.prepare(queryString("select_messageRange")); - rangeQuery.bindValue(":bufferid", bufferId.toInt()); - rangeQuery.bindValue(":firstmsg", first); - rangeQuery.bindValue(":lastmsg", last); - safeExec(rangeQuery); + QSqlQuery query(logDb()); + if(last == -1) { + query.prepare(queryString("select_messagesAllNew")); + } else { + query.prepare(queryString("select_messagesAll")); + query.bindValue(":lastmsg", last.toInt()); + } + query.bindValue(":userid", user.toInt()); + query.bindValue(":firstmsg", first.toInt()); + query.bindValue(":limit", limit); + safeExec(query); - watchQuery(rangeQuery); + watchQuery(query); - while(rangeQuery.next()) { - Message msg(QDateTime::fromTime_t(rangeQuery.value(1).toInt()), - bufferInfo, - (Message::Type)rangeQuery.value(2).toUInt(), - rangeQuery.value(5).toString(), - rangeQuery.value(4).toString(), - (Message::Flags)rangeQuery.value(3).toUInt()); - msg.setMsgId(rangeQuery.value(0).toInt()); + while(query.next()) { + Message msg(QDateTime::fromTime_t(query.value(2).toInt()), + bufferInfoHash[query.value(1).toInt()], + (Message::Type)query.value(3).toUInt(), + query.value(6).toString(), + query.value(5).toString(), + (Message::Flags)query.value(4).toUInt()); + msg.setMsgId(query.value(0).toInt()); messagelist << msg; }