setWaitingBuffers(allBuffers);
backlogManager->emitMessagesRequested(QObject::tr("Requesting a total of up to %1 backlog messages for %2 buffers").arg(_backlogCount * allBuffers.count()).arg(allBuffers.count()));
foreach(BufferId bufferId, allBuffers) {
- backlogManager->requestBacklog(bufferId, _backlogCount, -1);
+ backlogManager->requestBacklog(bufferId, -1, -1, _backlogCount);
}
}
{
}
-void ClientBacklogManager::receiveBacklog(BufferId bufferId, int limit, int offset, QVariantList msgs) {
+void ClientBacklogManager::receiveBacklog(BufferId bufferId, MsgId first, MsgId last, int limit, QVariantList msgs) {
+ Q_UNUSED(first)
+ Q_UNUSED(last)
Q_UNUSED(limit)
- Q_UNUSED(offset)
if(msgs.isEmpty())
return;
public:
ClientBacklogManager(QObject *parent = 0);
- virtual const QMetaObject *syncMetaObject() const { return &BacklogManager::staticMetaObject; }
-
// helper for the backlogRequester, as it isn't a QObject and can't emit itself
inline void emitMessagesRequested(const QString &msg) const { emit messagesRequested(msg); }
void reset();
public slots:
- virtual void receiveBacklog(BufferId bufferId, int limit, int offset, QVariantList msgs);
+ virtual void receiveBacklog(BufferId bufferId, MsgId first, MsgId last, int limit, QVariantList msgs);
void requestInitialBacklog();
signals:
.arg(requestCount)
.arg(Client::networkModel()->networkName(bufferId))
.arg(Client::networkModel()->bufferName(bufferId)));
- Client::backlogManager()->requestBacklog(bufferId, requestCount, _messageList.at(i)->msgId().toInt());
+ Client::backlogManager()->requestBacklog(bufferId, -1, _messageList.at(i)->msgId(), requestCount);
return;
}
}
#include "backlogmanager.h"
-QVariantList BacklogManager::requestBacklog(BufferId bufferId, int limit, int offset) {
- emit backlogRequested(bufferId, limit, offset);
+QVariantList BacklogManager::requestBacklog(BufferId bufferId, MsgId first, MsgId last, int limit) {
+ emit backlogRequested(bufferId, first, last, limit);
return QVariantList();
}
public:
BacklogManager(QObject *parent = 0) : SyncableObject(parent) {}
+ inline virtual const QMetaObject *syncMetaObject() const { return &staticMetaObject; }
public slots:
- virtual QVariantList requestBacklog(BufferId bufferId, int limit = -1, int offset = -1);
- inline virtual void receiveBacklog(BufferId, int, int, QVariantList) {};
+ virtual QVariantList requestBacklog(BufferId bufferId, MsgId first = -1, MsgId last = -1, int limit = -1);
+ inline virtual void receiveBacklog(BufferId, MsgId, MsgId, int, QVariantList) {};
signals:
- void backlogRequested(BufferId, int, int);
+ void backlogRequested(BufferId, MsgId, MsgId, int);
};
+++ /dev/null
-SELECT messageid, time, type, flags, sender, message
-FROM backlog
-JOIN buffer ON backlog.bufferid = buffer.bufferid
-JOIN sender ON backlog.senderid = sender.senderid
-WHERE buffer.bufferid = :bufferid AND backlog.messageid >= :firstmsg AND backlog.messageid <= :lastmsg
-ORDER BY messageid DESC
SELECT messageid, time, type, flags, sender, message
FROM backlog
+JOIN buffer ON backlog.bufferid = buffer.bufferid
JOIN sender ON backlog.senderid = sender.senderid
-WHERE bufferid = :bufferid
+WHERE buffer.bufferid = :bufferid
+ AND backlog.messageid >= :firstmsg
+ AND backlog.messageid < :lastmsg
ORDER BY messageid DESC
-LIMIT :limit OFFSET :offset
+LIMIT :limit
FROM backlog
JOIN buffer ON backlog.bufferid = buffer.bufferid
JOIN sender ON backlog.senderid = sender.senderid
-WHERE buffer.bufferid = :bufferid AND backlog.messageid >= :firstmsg
+WHERE buffer.bufferid = :bufferid
+ AND backlog.messageid >= :firstmsg
ORDER BY messageid DESC
LIMIT :limit
+++ /dev/null
-SELECT count(*)
-FROM backlog
-WHERE bufferid = :bufferid AND messageid >= :messageid
+++ /dev/null
-SELECT messageid, time, type, flags, sender, message
-FROM backlog
-JOIN sender ON backlog.senderid = sender.senderid
-WHERE bufferid = :bufferid AND time >= :since
-ORDER BY messageid DESC
-LIMIT -1 OFFSET :offset
+++ /dev/null
-SELECT count(*)
-FROM backlog
-WHERE bufferid = :bufferid AND time >= :since
return instance()->storage->logMessage(message);
}
- //! Request a certain number (or all) messages stored in a given buffer.
- /** \note This method is threadsafe.
- *
- * \param buffer The buffer we request messages from
- * \param limit The number of messages we would like to receive, or -1 if we'd like all messages from that buffername
- * \param offset Do not return (but DO count) messages with MsgId >= offset, if offset >= 0
- * \return The requested list of messages
- */
- static inline QList<Message> requestMsgs(UserId user, BufferId buffer, int limit = -1, int offset = -1) {
- return instance()->storage->requestMsgs(user, buffer, limit, offset);
- }
-
- //! Request messages stored in a given buffer since a certain point in time.
- /** \note This method is threadsafe.
- *
- * \param buffer The buffer we request messages from
- * \param since Only return messages newer than this point in time
- * \param offset Do not return messages with MsgId >= offset, if offset >= 0
- * \return The requested list of messages
- */
- static inline QList<Message> requestMsgs(UserId user, BufferId buffer, QDateTime since, int offset = -1) {
- return instance()->storage->requestMsgs(user, buffer, since, offset);
- }
-
- //! Request a range of messages stored in a given buffer.
- /** \note This method is threadsafe.
- *
- * \param buffer The buffer we request messages from
- * \param first Return messages with first <= MsgId <= last
- * \param last Return messages with first <= MsgId <= last
- * \return The requested list of messages
- */
- static inline QList<Message> requestMsgRange(UserId user, BufferId buffer, int first, int last) {
- return instance()->storage->requestMsgRange(user, buffer, first, last);
- }
-
- //! Request all unread messages
+ //! Request a certain number messages stored in a given buffer.
/** \param buffer The buffer we request messages from
- * \param first Return messages with first <= MsgId
- * \param limit Max amount of messages
+ * \param first if != -1 return only messages with a MsgId >= first
+ * \param last if != -1 return only messages with a MsgId < last
+ * \param limit if != -1 limit the returned list to a max of \limit entries
* \return The requested list of messages
*/
- static inline QList<Message> requestNewMsgs(UserId user, BufferId bufferId, int first, int limit = -1) {
- return instance()->storage->requestNewMsgs(user, bufferId, first, limit);
+ static inline QList<Message> requestMsgs(UserId user, BufferId bufferId, MsgId first = -1, MsgId last = -1, int limit = -1) {
+ return instance()->storage->requestMsgs(user, bufferId, first, last, limit);
}
//! Request all unread messages for all buffers
- /** \param first Return messages with first <= MsgId
+ /** \param first Return messages with MsgId >= first
* \param limit Max amount of messages
* \return The requested list of messages
*/
{
}
-QVariantList CoreBacklogManager::requestBacklog(BufferId bufferId, int limit, int offset) {
+QVariantList CoreBacklogManager::requestBacklog(BufferId bufferId, MsgId first, MsgId last, int limit) {
QVariantList backlog;
QList<Message> msgList;
- msgList = Core::requestMsgs(coreSession()->user(), bufferId, limit, offset);
+ msgList = Core::requestMsgs(coreSession()->user(), bufferId, first, last, limit);
QList<Message>::const_iterator msgIter = msgList.constBegin();
QList<Message>::const_iterator msgListEnd = msgList.constEnd();
public:
CoreBacklogManager(CoreSession *coreSession = 0);
- inline virtual const QMetaObject *syncMetaObject() const { return &BacklogManager::staticMetaObject; }
-
CoreSession *coreSession() { return _coreSession; }
public slots:
- virtual QVariantList requestBacklog(BufferId bufferId, int limit = -1, int offset = -1);
+ virtual QVariantList requestBacklog(BufferId bufferId, MsgId first = -1, MsgId last = -1, int limit = -1);
private:
CoreSession *_coreSession;
<file>./SQL/SQLite/11/select_buffers_for_network.sql</file>
<file>./SQL/SQLite/11/select_connected_networks.sql</file>
<file>./SQL/SQLite/11/select_internaluser.sql</file>
- <file>./SQL/SQLite/11/select_messageRange.sql</file>
<file>./SQL/SQLite/11/select_messages.sql</file>
<file>./SQL/SQLite/11/select_messagesAllNew.sql</file>
<file>./SQL/SQLite/11/select_messagesNew.sql</file>
- <file>./SQL/SQLite/11/select_messagesOffset.sql</file>
- <file>./SQL/SQLite/11/select_messagesSince.sql</file>
- <file>./SQL/SQLite/11/select_messagesSinceOffset.sql</file>
<file>./SQL/SQLite/11/select_networkExists.sql</file>
<file>./SQL/SQLite/11/select_networks_for_user.sql</file>
<file>./SQL/SQLite/11/select_persistent_channels.sql</file>
return msgId;
}
-QList<Message> SqliteStorage::requestMsgs(UserId user, BufferId bufferId, int limit, 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();
- }
-
- // 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);
-
- 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;
+ query.prepare(queryString("select_messages"));
+ query.bindValue(":lastmsg", last.toInt());
}
- return messagelist;
-}
-
-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(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;
- }
-
- 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);
-
- watchQuery(rangeQuery);
-
- 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());
- messagelist << msg;
- }
-
- return messagelist;
-}
-
-QList<Message> SqliteStorage::requestNewMsgs(UserId user, BufferId bufferId, int first, int limit) {
- QList<Message> messagelist;
-
- BufferInfo bufferInfo = getBufferInfo(user, bufferId);
- if(!bufferInfo.isValid())
- return messagelist;
-
- QSqlQuery query(logDb());
- query.prepare(queryString("select_messagesNew"));
query.bindValue(":bufferid", bufferId.toInt());
- query.bindValue(":firstmsg", first);
+ query.bindValue(":firstmsg", first.toInt());
query.bindValue(":limit", limit);
safeExec(query);
msg.setMsgId(query.value(0).toInt());
messagelist << msg;
}
-
return messagelist;
}
/* Message handling */
virtual MsgId logMessage(Message msg);
- virtual QList<Message> requestMsgs(UserId user, BufferId bufferId, int limit = -1, int offset = -1);
- virtual QList<Message> requestMsgs(UserId user, BufferId bufferId, QDateTime since, int offset = -1);
- virtual QList<Message> requestMsgRange(UserId user, BufferId bufferId, int first, int last);
- virtual QList<Message> requestNewMsgs(UserId user, BufferId bufferId, int first, int limit = -1);
+ virtual QList<Message> requestMsgs(UserId user, BufferId bufferId, MsgId first = -1, MsgId last = -1, int limit = -1);
virtual QList<Message> requestAllNewMsgs(UserId user, int first, int limit = -1);
protected:
*/
virtual MsgId logMessage(Message msg) = 0;
- //! Request a certain number (or all) messages stored in a given buffer.
+ //! Request a certain number messages stored in a given buffer.
/** \param buffer The buffer we request messages from
- * \param limit The number of messages we would like to receive, or -1 if we'd like all messages from that buffername
- * \param offset Do not return (but DO count) messages with MsgId >= offset, if offset >= 0
+ * \param first if != -1 return only messages with a MsgId >= first
+ * \param last if != -1 return only messages with a MsgId < last
+ * \param limit if != -1 limit the returned list to a max of \limit entries
* \return The requested list of messages
*/
- virtual QList<Message> requestMsgs(UserId user, BufferId buffer, int limit = -1, int offset = -1) = 0;
-
- //! Request messages stored in a given buffer since a certain point in time.
- /** \param buffer The buffer we request messages from
- * \param since Only return messages newer than this point in time
- * \param offset Do not return messages with MsgId >= offset, if offset >= 0
- * \return The requested list of messages
- */
- virtual QList<Message> requestMsgs(UserId user, BufferId buffer, QDateTime since, int offset = -1) = 0;
-
- //! Request a range of messages stored in a given buffer.
- /** \param buffer The buffer we request messages from
- * \param first Return messages with first <= MsgId <= last
- * \param last Return messages with first <= MsgId <= last
- * \return The requested list of messages
- */
- virtual QList<Message> requestMsgRange(UserId user, BufferId buffer, int first, int last) = 0;
-
- //! Request all unread messages
- /** \param buffer The buffer we request messages from
- * \param first Return messages with first <= MsgId
- * \param limit Max amount of messages
- * \return The requested list of messages
- */
- virtual QList<Message> requestNewMsgs(UserId user, BufferId bufferId, int first, int limit = -1) = 0;
+ virtual QList<Message> requestMsgs(UserId user, BufferId bufferId, MsgId first = -1, MsgId last = -1, int limit = -1) = 0;
//! Request all unread messages for all buffers
- /** \param first Return messages with first <= MsgId
+ /** \param first Return messages with MsgId >= first
* \param limit Max amount of messages
* \return The requested list of messages
*/