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());
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;
return msgId;
}
-QList<Message> SqliteStorage::requestMsgs(UserId user, BufferId bufferId, int lastmsgs, int offset) {
+QList<Message> SqliteStorage::requestMsgs(UserId user, BufferId bufferId, MsgId first, MsgId last, int limit) {
QList<Message> 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", lastmsgs);
- 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<Message> SqliteStorage::requestMsgs(UserId user, BufferId bufferId, QDateTime since, int offset) {
+QList<Message> SqliteStorage::requestAllMsgs(UserId user, MsgId first, MsgId last, int limit) {
QList<Message> 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<BufferId, BufferInfo> bufferInfoHash;
+ foreach(BufferInfo bufferInfo, requestBuffers(user)) {
+ bufferInfoHash[bufferInfo.bufferId()] = bufferInfo;
}
- return messagelist;
-}
-
-
-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(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;
}