#include "network.h"
+#include "util.h"
+
SqliteStorage::SqliteStorage(QObject *parent)
: AbstractSqlStorage(parent)
{
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<BufferId, QDateTime> SqliteStorage::bufferLastSeenDates(UserId user) {
- QHash<BufferId, QDateTime> lastSeenHash;
+QHash<BufferId, MsgId> SqliteStorage::bufferLastSeenMsgIds(UserId user) {
+ QHash<BufferId, MsgId> 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;
}
return msgId;
}
-QList<Message> SqliteStorage::requestMsgs(BufferInfo buffer, int lastmsgs, int offset) {
+QList<Message> SqliteStorage::requestMsgs(UserId user, BufferId bufferId, int lastmsgs, int offset) {
QList<Message> 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();
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(),
}
-QList<Message> SqliteStorage::requestMsgs(BufferInfo buffer, QDateTime since, int offset) {
+QList<Message> SqliteStorage::requestMsgs(UserId user, BufferId bufferId, QDateTime since, int offset) {
QList<Message> 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();
// 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();
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(),
}
-QList<Message> SqliteStorage::requestMsgRange(BufferInfo buffer, int first, int last) {
+QList<Message> SqliteStorage::requestMsgRange(UserId user, BufferId bufferId, int first, int last) {
QList<Message> 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();
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(),
}
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";
}