aboutsummaryrefslogtreecommitdiff
path: root/examples/example_7_archiveHandling/xmppClient.cpp
diff options
context:
space:
mode:
authorJeremy Lainé <jeremy.laine@m4x.org>2012-07-22 12:07:27 +0200
committerJeremy Lainé <jeremy.laine@m4x.org>2012-07-22 12:07:27 +0200
commite44e943c6605ad7dc612ef4622845e37fe585709 (patch)
tree8e48a9ee984d168d0f972721f1e7ed97f390686b /examples/example_7_archiveHandling/xmppClient.cpp
parent10a3962269971b60a21b50e6615c61d890b4f5f3 (diff)
downloadqxmpp-e44e943c6605ad7dc612ef4622845e37fe585709.tar.gz
archives: demonstrate result set pagination
Diffstat (limited to 'examples/example_7_archiveHandling/xmppClient.cpp')
-rw-r--r--examples/example_7_archiveHandling/xmppClient.cpp94
1 files changed, 77 insertions, 17 deletions
diff --git a/examples/example_7_archiveHandling/xmppClient.cpp b/examples/example_7_archiveHandling/xmppClient.cpp
index 7cfc3e43..bc54b990 100644
--- a/examples/example_7_archiveHandling/xmppClient.cpp
+++ b/examples/example_7_archiveHandling/xmppClient.cpp
@@ -23,15 +23,27 @@
#include <QDateTime>
-#include <iostream>
#include "QXmppArchiveIq.h"
#include "QXmppArchiveManager.h"
#include "xmppClient.h"
+static void logStart(const QString &msg)
+{
+ qDebug("example_7_archiveHandling : %s", qPrintable(msg));
+}
+
+static void logEnd(const QString &msg)
+{
+ qDebug(" => %s", qPrintable(msg));
+}
+
xmppClient::xmppClient(QObject *parent)
: QXmppClient(parent)
+ , m_collectionCount(-1)
+ , m_pageDirection(PageForwards)
+ , m_pageSize(10)
{
bool check;
Q_UNUSED(check);
@@ -45,13 +57,17 @@ xmppClient::xmppClient(QObject *parent)
this, SLOT(clientConnected()));
Q_ASSERT(check);
- check = connect(archiveManager, SIGNAL(archiveChatReceived(QXmppArchiveChat)),
- SLOT(archiveChatReceived(QXmppArchiveChat)));
+ check = connect(archiveManager, SIGNAL(archiveChatReceived(QXmppArchiveChat, QXmppResultSetReply)),
+ SLOT(archiveChatReceived(QXmppArchiveChat, QXmppResultSetReply)));
Q_ASSERT(check);
- check = connect(archiveManager, SIGNAL(archiveListReceived(QList<QXmppArchiveChat>)),
- SLOT(archiveListReceived(QList<QXmppArchiveChat>)));
+ check = connect(archiveManager, SIGNAL(archiveListReceived(QList<QXmppArchiveChat>, QXmppResultSetReply)),
+ SLOT(archiveListReceived(QList<QXmppArchiveChat>, QXmppResultSetReply)));
Q_ASSERT(check);
+
+ // set limits
+ m_startDate = QDateTime::currentDateTime().addDays(-21);
+ m_endDate = QDateTime::currentDateTime();
}
xmppClient::~xmppClient()
@@ -59,26 +75,70 @@ xmppClient::~xmppClient()
}
+void xmppClient::setPageDirection(PageDirection direction)
+{
+ m_pageDirection = direction;
+}
+
+void xmppClient::setPageSize(int size)
+{
+ m_pageSize = size;
+}
+
void xmppClient::clientConnected()
{
- std::cout << "example_7_archiveHandling:: CONNECTED" << std::endl;
- archiveManager->listCollections("",
- QDateTime::currentDateTime().addDays(-7));
+ logEnd("connected");
+
+ // we want 0 results, i.e. only result-set management information (count)
+ logStart("fetching collection count");
+ QXmppResultSetQuery rsmQuery;
+ rsmQuery.setMax(0);
+ archiveManager->listCollections("", m_startDate, m_endDate, rsmQuery);
}
-void xmppClient::archiveListReceived(const QList<QXmppArchiveChat> &chats)
+void xmppClient::archiveListReceived(const QList<QXmppArchiveChat> &chats, const QXmppResultSetReply &rsmReply)
{
- std::cout << "example_7_archiveHandling:: LIST RECEIVED" << std::endl;
- foreach (const QXmppArchiveChat &chat, chats)
- archiveManager->retrieveCollection(chat.with(), chat.start());
+ if (m_collectionCount < 0) {
+ logEnd(QString::number(rsmReply.count()) + " items");
+ m_collectionCount = rsmReply.count();
+
+ // fetch first page
+ logStart("fetching collection first page");
+ QXmppResultSetQuery rsmQuery;
+ rsmQuery.setMax(m_pageSize);
+ if (m_pageDirection == PageBackwards)
+ rsmQuery.setBefore("");
+ archiveManager->listCollections("", m_startDate, m_endDate, rsmQuery);
+ } else if (!chats.size()) {
+ logEnd("no items");
+ } else {
+ logEnd(QString("items %1 to %2 of %3").arg(QString::number(rsmReply.index()), QString::number(rsmReply.index() + chats.size() - 1), QString::number(rsmReply.count())));
+ foreach (const QXmppArchiveChat &chat, chats) {
+ qDebug("chat start %s", qPrintable(chat.start().toString()));
+ // NOTE: to actually retrieve conversations, uncomment this
+ //archiveManager->retrieveCollection(chat.with(), chat.start());
+ }
+ if (!rsmReply.isNull()) {
+ // fetch next page
+ QXmppResultSetQuery rsmQuery;
+ rsmQuery.setMax(m_pageSize);
+ if (m_pageDirection == PageBackwards) {
+ logStart("fetching collection previous page");
+ rsmQuery.setBefore(rsmReply.first());
+ } else {
+ logStart("fetching collection next page");
+ rsmQuery.setAfter(rsmReply.last());
+ }
+ archiveManager->listCollections("", m_startDate, m_endDate, rsmQuery);
+ }
+ }
}
-void xmppClient::archiveChatReceived(const QXmppArchiveChat &chat)
+void xmppClient::archiveChatReceived(const QXmppArchiveChat &chat, const QXmppResultSetReply &rsmReply)
{
- std::cout << "example_7_archiveHandling:: CHAT RECEIVED" << std::endl;
- foreach (const QXmppArchiveMessage &msg, chat.messages())
- {
- std::cout << "example_7_archiveHandling::" << msg.body().toStdString() << std::endl;
+ logEnd(QString("chat received, RSM count %1").arg(QString::number(rsmReply.count())));
+ foreach (const QXmppArchiveMessage &msg, chat.messages()) {
+ qDebug("example_7_archiveHandling : %s", qPrintable(msg.body()));
}
}