X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;f=src%2Fcore%2Fsqlitestorage.cpp;h=b1d3d2688090a07a8a407d9ee3ecedc2e3f4542d;hb=d2f47b8db0c70f434b486583d09062ea77747e66;hp=3c61f985d4f134c79b5cd4d9ed90deaede96d945;hpb=f6e0e4c958187792081b397795eb2ee7de294c23;p=quassel.git diff --git a/src/core/sqlitestorage.cpp b/src/core/sqlitestorage.cpp index 3c61f985..b1d3d268 100644 --- a/src/core/sqlitestorage.cpp +++ b/src/core/sqlitestorage.cpp @@ -24,6 +24,8 @@ #include "network.h" +#include "util.h" + SqliteStorage::SqliteStorage(QObject *parent) : AbstractSqlStorage(parent) { @@ -477,16 +479,11 @@ BufferInfo SqliteStorage::getBufferInfo(UserId user, const BufferId &bufferId) { return bufferInfo; } -QList SqliteStorage::requestBuffers(UserId user, QDateTime since) { - uint time = 0; - if(since.isValid()) - time = since.toTime_t(); - +QList SqliteStorage::requestBuffers(UserId user) { QList bufferlist; QSqlQuery query(logDb()); query.prepare(queryString("select_buffers")); query.bindValue(":userid", user.toInt()); - query.bindValue(":time", time); query.exec(); watchQuery(&query); @@ -558,26 +555,26 @@ BufferId SqliteStorage::renameBuffer(const UserId &user, const NetworkId &networ return BufferId(); } -void SqliteStorage::setBufferLastSeen(UserId user, const BufferId &bufferId, const QDateTime &seenDate) { +void SqliteStorage::setBufferLastSeenMsg(UserId user, const BufferId &bufferId, const MsgId &msgId) { QSqlQuery *query = cachedQuery("update_buffer_lastseen"); query->bindValue(":userid", user.toInt()); query->bindValue(":bufferid", bufferId.toInt()); - query->bindValue(":lastseen", seenDate.toTime_t()); + query->bindValue(":lastseenmsgid", msgId.toInt()); query->exec(); watchQuery(query); } -QHash SqliteStorage::bufferLastSeenDates(UserId user) { - QHash lastSeenHash; +QHash SqliteStorage::bufferLastSeenMsgIds(UserId user) { + QHash lastSeenHash; QSqlQuery query(logDb()); - query.prepare(queryString("select_buffer_lastseen_dates")); + query.prepare(queryString("select_buffer_lastseen_messages")); query.bindValue(":userid", user.toInt()); query.exec(); if(!watchQuery(&query)) return lastSeenHash; while(query.next()) { - lastSeenHash[query.value(0).toInt()] = QDateTime::fromTime_t(query.value(1).toUInt()); + lastSeenHash[query.value(0).toInt()] = query.value(1).toInt(); } return lastSeenHash; } @@ -612,19 +609,28 @@ MsgId SqliteStorage::logMessage(Message msg) { return msgId; } -QList SqliteStorage::requestMsgs(BufferInfo buffer, int lastmsgs, int offset) { +QList SqliteStorage::requestMsgs(UserId user, BufferId bufferId, int lastmsgs, int offset) { QList messagelist; - // we have to determine the real offset first - QSqlQuery *offsetQuery = cachedQuery("select_messagesOffset"); - offsetQuery->bindValue(":bufferid", buffer.bufferId().toInt()); - offsetQuery->bindValue(":messageid", offset); - offsetQuery->exec(); - offsetQuery->first(); - offset = offsetQuery->value(0).toInt(); + + BufferInfo bufferInfo = getBufferInfo(user, bufferId); + if(!bufferInfo.isValid()) + return messagelist; + + if(offset == -1) { + offset = 0; + } else { + // we have to determine the real offset first + QSqlQuery *offsetQuery = cachedQuery("select_messagesOffset"); + offsetQuery->bindValue(":bufferid", bufferId.toInt()); + offsetQuery->bindValue(":messageid", offset); + offsetQuery->exec(); + offsetQuery->first(); + offset = offsetQuery->value(0).toInt(); + } // now let's select the messages QSqlQuery *msgQuery = cachedQuery("select_messages"); - msgQuery->bindValue(":bufferid", buffer.bufferId().toInt()); + msgQuery->bindValue(":bufferid", bufferId.toInt()); msgQuery->bindValue(":limit", lastmsgs); msgQuery->bindValue(":offset", offset); msgQuery->exec(); @@ -633,7 +639,7 @@ QList SqliteStorage::requestMsgs(BufferInfo buffer, int lastmsgs, int o while(msgQuery->next()) { Message msg(QDateTime::fromTime_t(msgQuery->value(1).toInt()), - buffer, + bufferInfo, (Message::Type)msgQuery->value(2).toUInt(), msgQuery->value(5).toString(), msgQuery->value(4).toString(), @@ -645,11 +651,16 @@ QList SqliteStorage::requestMsgs(BufferInfo buffer, int lastmsgs, int o } -QList SqliteStorage::requestMsgs(BufferInfo buffer, QDateTime since, int offset) { +QList SqliteStorage::requestMsgs(UserId user, BufferId bufferId, QDateTime since, int offset) { QList messagelist; + + BufferInfo bufferInfo = getBufferInfo(user, bufferId); + if(!bufferInfo.isValid()) + return messagelist; + // we have to determine the real offset first QSqlQuery *offsetQuery = cachedQuery("select_messagesSinceOffset"); - offsetQuery->bindValue(":bufferid", buffer.bufferId().toInt()); + offsetQuery->bindValue(":bufferid", bufferId.toInt()); offsetQuery->bindValue(":since", since.toTime_t()); offsetQuery->exec(); offsetQuery->first(); @@ -657,7 +668,7 @@ QList SqliteStorage::requestMsgs(BufferInfo buffer, QDateTime since, in // now let's select the messages QSqlQuery *msgQuery = cachedQuery("select_messagesSince"); - msgQuery->bindValue(":bufferid", buffer.bufferId().toInt()); + msgQuery->bindValue(":bufferid", bufferId.toInt()); msgQuery->bindValue(":since", since.toTime_t()); msgQuery->bindValue(":offset", offset); msgQuery->exec(); @@ -666,7 +677,7 @@ QList SqliteStorage::requestMsgs(BufferInfo buffer, QDateTime since, in while(msgQuery->next()) { Message msg(QDateTime::fromTime_t(msgQuery->value(1).toInt()), - buffer, + bufferInfo, (Message::Type)msgQuery->value(2).toUInt(), msgQuery->value(5).toString(), msgQuery->value(4).toString(), @@ -679,10 +690,15 @@ QList SqliteStorage::requestMsgs(BufferInfo buffer, QDateTime since, in } -QList SqliteStorage::requestMsgRange(BufferInfo buffer, int first, int last) { +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 = cachedQuery("select_messageRange"); - rangeQuery->bindValue(":bufferid", buffer.bufferId().toInt()); + rangeQuery->bindValue(":bufferid", bufferId.toInt()); rangeQuery->bindValue(":firstmsg", first); rangeQuery->bindValue(":lastmsg", last); rangeQuery->exec(); @@ -691,7 +707,7 @@ QList SqliteStorage::requestMsgRange(BufferInfo buffer, int first, int while(rangeQuery->next()) { Message msg(QDateTime::fromTime_t(rangeQuery->value(1).toInt()), - buffer, + bufferInfo, (Message::Type)rangeQuery->value(2).toUInt(), rangeQuery->value(5).toString(), rangeQuery->value(4).toString(), @@ -704,18 +720,7 @@ QList SqliteStorage::requestMsgRange(BufferInfo buffer, int first, int } QString SqliteStorage::backlogFile() { - // kinda ugly, but I currently see no other way to do that -#ifdef Q_OS_WIN32 - QString quasselDir = QDir::homePath() + qgetenv("APPDATA") + "\\quassel\\"; -#else - QString quasselDir = QDir::homePath() + "/.quassel/"; -#endif - - QDir qDir(quasselDir); - if(!qDir.exists(quasselDir)) - qDir.mkpath(quasselDir); - - return quasselDir + "quassel-storage.sqlite"; + return quasselDir().absolutePath() + "/quassel-storage.sqlite"; }