From de1619ce11bf386490cdb38bc1be134a391eeaae Mon Sep 17 00:00:00 2001 From: Marcus Eggenberger Date: Sat, 29 Nov 2008 13:50:01 +0100 Subject: [PATCH] adapting the backlogmanagers to the new storage api --- src/client/backlogrequester.cpp | 2 +- src/client/clientbacklogmanager.cpp | 5 +- src/client/clientbacklogmanager.h | 4 +- src/client/messagemodel.cpp | 2 +- src/common/backlogmanager.cpp | 4 +- src/common/backlogmanager.h | 7 +- .../SQL/SQLite/11/select_messageRange.sql | 6 - src/core/SQL/SQLite/11/select_messages.sql | 7 +- src/core/SQL/SQLite/11/select_messagesNew.sql | 3 +- .../SQL/SQLite/11/select_messagesOffset.sql | 3 - .../SQL/SQLite/11/select_messagesSince.sql | 6 - .../SQLite/11/select_messagesSinceOffset.sql | 3 - src/core/core.h | 49 +------ src/core/corebacklogmanager.cpp | 4 +- src/core/corebacklogmanager.h | 4 +- src/core/sql.qrc | 4 - src/core/sqlitestorage.cpp | 127 +----------------- src/core/sqlitestorage.h | 5 +- src/core/storage.h | 35 +---- 19 files changed, 43 insertions(+), 237 deletions(-) delete mode 100644 src/core/SQL/SQLite/11/select_messageRange.sql delete mode 100644 src/core/SQL/SQLite/11/select_messagesOffset.sql delete mode 100644 src/core/SQL/SQLite/11/select_messagesSince.sql delete mode 100644 src/core/SQL/SQLite/11/select_messagesSinceOffset.sql diff --git a/src/client/backlogrequester.cpp b/src/client/backlogrequester.cpp index 920e5647..40f574be 100644 --- a/src/client/backlogrequester.cpp +++ b/src/client/backlogrequester.cpp @@ -53,6 +53,6 @@ void FixedBacklogRequester::requestBacklog() { 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); } } diff --git a/src/client/clientbacklogmanager.cpp b/src/client/clientbacklogmanager.cpp index 8ccaa4b0..8cf2af4e 100644 --- a/src/client/clientbacklogmanager.cpp +++ b/src/client/clientbacklogmanager.cpp @@ -35,9 +35,10 @@ ClientBacklogManager::ClientBacklogManager(QObject *parent) { } -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; diff --git a/src/client/clientbacklogmanager.h b/src/client/clientbacklogmanager.h index 60514979..a3f19aef 100644 --- a/src/client/clientbacklogmanager.h +++ b/src/client/clientbacklogmanager.h @@ -32,15 +32,13 @@ class ClientBacklogManager : public BacklogManager { 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: diff --git a/src/client/messagemodel.cpp b/src/client/messagemodel.cpp index 8dfaf015..1ece82fc 100644 --- a/src/client/messagemodel.cpp +++ b/src/client/messagemodel.cpp @@ -370,7 +370,7 @@ void MessageModel::requestBacklog(BufferId bufferId) { .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; } } diff --git a/src/common/backlogmanager.cpp b/src/common/backlogmanager.cpp index cbe21e94..bf962bfc 100644 --- a/src/common/backlogmanager.cpp +++ b/src/common/backlogmanager.cpp @@ -20,7 +20,7 @@ #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(); } diff --git a/src/common/backlogmanager.h b/src/common/backlogmanager.h index bb562e5e..de42741c 100644 --- a/src/common/backlogmanager.h +++ b/src/common/backlogmanager.h @@ -29,13 +29,14 @@ class BacklogManager : public SyncableObject { 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); }; diff --git a/src/core/SQL/SQLite/11/select_messageRange.sql b/src/core/SQL/SQLite/11/select_messageRange.sql deleted file mode 100644 index 8951c137..00000000 --- a/src/core/SQL/SQLite/11/select_messageRange.sql +++ /dev/null @@ -1,6 +0,0 @@ -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 diff --git a/src/core/SQL/SQLite/11/select_messages.sql b/src/core/SQL/SQLite/11/select_messages.sql index 34346670..dcadad95 100644 --- a/src/core/SQL/SQLite/11/select_messages.sql +++ b/src/core/SQL/SQLite/11/select_messages.sql @@ -1,6 +1,9 @@ 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 diff --git a/src/core/SQL/SQLite/11/select_messagesNew.sql b/src/core/SQL/SQLite/11/select_messagesNew.sql index dbe9f06d..e549252a 100644 --- a/src/core/SQL/SQLite/11/select_messagesNew.sql +++ b/src/core/SQL/SQLite/11/select_messagesNew.sql @@ -2,6 +2,7 @@ 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 +WHERE buffer.bufferid = :bufferid + AND backlog.messageid >= :firstmsg ORDER BY messageid DESC LIMIT :limit diff --git a/src/core/SQL/SQLite/11/select_messagesOffset.sql b/src/core/SQL/SQLite/11/select_messagesOffset.sql deleted file mode 100644 index 22d39986..00000000 --- a/src/core/SQL/SQLite/11/select_messagesOffset.sql +++ /dev/null @@ -1,3 +0,0 @@ -SELECT count(*) -FROM backlog -WHERE bufferid = :bufferid AND messageid >= :messageid diff --git a/src/core/SQL/SQLite/11/select_messagesSince.sql b/src/core/SQL/SQLite/11/select_messagesSince.sql deleted file mode 100644 index b0545b49..00000000 --- a/src/core/SQL/SQLite/11/select_messagesSince.sql +++ /dev/null @@ -1,6 +0,0 @@ -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 diff --git a/src/core/SQL/SQLite/11/select_messagesSinceOffset.sql b/src/core/SQL/SQLite/11/select_messagesSinceOffset.sql deleted file mode 100644 index 65f2cc21..00000000 --- a/src/core/SQL/SQLite/11/select_messagesSinceOffset.sql +++ /dev/null @@ -1,3 +0,0 @@ -SELECT count(*) -FROM backlog -WHERE bufferid = :bufferid AND time >= :since diff --git a/src/core/core.h b/src/core/core.h index 03957914..e991da30 100644 --- a/src/core/core.h +++ b/src/core/core.h @@ -221,54 +221,19 @@ class Core : public QObject { 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 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 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 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 requestNewMsgs(UserId user, BufferId bufferId, int first, int limit = -1) { - return instance()->storage->requestNewMsgs(user, bufferId, first, limit); + static inline QList 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 */ diff --git a/src/core/corebacklogmanager.cpp b/src/core/corebacklogmanager.cpp index c7bc8e72..bd1bc4f4 100644 --- a/src/core/corebacklogmanager.cpp +++ b/src/core/corebacklogmanager.cpp @@ -30,10 +30,10 @@ CoreBacklogManager::CoreBacklogManager(CoreSession *coreSession) { } -QVariantList CoreBacklogManager::requestBacklog(BufferId bufferId, int limit, int offset) { +QVariantList CoreBacklogManager::requestBacklog(BufferId bufferId, MsgId first, MsgId last, int limit) { QVariantList backlog; QList msgList; - msgList = Core::requestMsgs(coreSession()->user(), bufferId, limit, offset); + msgList = Core::requestMsgs(coreSession()->user(), bufferId, first, last, limit); QList::const_iterator msgIter = msgList.constBegin(); QList::const_iterator msgListEnd = msgList.constEnd(); diff --git a/src/core/corebacklogmanager.h b/src/core/corebacklogmanager.h index 260f99f8..54d9f06e 100644 --- a/src/core/corebacklogmanager.h +++ b/src/core/corebacklogmanager.h @@ -31,12 +31,10 @@ class CoreBacklogManager : public BacklogManager { 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; diff --git a/src/core/sql.qrc b/src/core/sql.qrc index f22a5354..e8ce75e1 100644 --- a/src/core/sql.qrc +++ b/src/core/sql.qrc @@ -35,13 +35,9 @@ ./SQL/SQLite/11/select_buffers_for_network.sql ./SQL/SQLite/11/select_connected_networks.sql ./SQL/SQLite/11/select_internaluser.sql - ./SQL/SQLite/11/select_messageRange.sql ./SQL/SQLite/11/select_messages.sql ./SQL/SQLite/11/select_messagesAllNew.sql ./SQL/SQLite/11/select_messagesNew.sql - ./SQL/SQLite/11/select_messagesOffset.sql - ./SQL/SQLite/11/select_messagesSince.sql - ./SQL/SQLite/11/select_messagesSinceOffset.sql ./SQL/SQLite/11/select_networkExists.sql ./SQL/SQLite/11/select_networks_for_user.sql ./SQL/SQLite/11/select_persistent_channels.sql diff --git a/src/core/sqlitestorage.cpp b/src/core/sqlitestorage.cpp index 71d0ea84..0d870a6a 100644 --- a/src/core/sqlitestorage.cpp +++ b/src/core/sqlitestorage.cpp @@ -693,135 +693,23 @@ 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(); - } - - // 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 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(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 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); - - 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 SqliteStorage::requestNewMsgs(UserId user, BufferId bufferId, int first, int limit) { - QList 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); @@ -837,7 +725,6 @@ QList SqliteStorage::requestNewMsgs(UserId user, BufferId bufferId, int msg.setMsgId(query.value(0).toInt()); messagelist << msg; } - return messagelist; } diff --git a/src/core/sqlitestorage.h b/src/core/sqlitestorage.h index 95a4e71d..f1ccf7ac 100644 --- a/src/core/sqlitestorage.h +++ b/src/core/sqlitestorage.h @@ -81,10 +81,7 @@ public slots: /* Message handling */ virtual MsgId logMessage(Message msg); - virtual QList requestMsgs(UserId user, BufferId bufferId, int limit = -1, int offset = -1); - virtual QList requestMsgs(UserId user, BufferId bufferId, QDateTime since, int offset = -1); - virtual QList requestMsgRange(UserId user, BufferId bufferId, int first, int last); - virtual QList requestNewMsgs(UserId user, BufferId bufferId, int first, int limit = -1); + virtual QList requestMsgs(UserId user, BufferId bufferId, MsgId first = -1, MsgId last = -1, int limit = -1); virtual QList requestAllNewMsgs(UserId user, int first, int limit = -1); protected: diff --git a/src/core/storage.h b/src/core/storage.h index 4252059c..e52a79f1 100644 --- a/src/core/storage.h +++ b/src/core/storage.h @@ -290,40 +290,17 @@ public slots: */ 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 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 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 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 requestNewMsgs(UserId user, BufferId bufferId, int first, int limit = -1) = 0; + virtual QList 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 */ -- 2.20.1