aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOlivier Goffart <ogoffart@woboq.com>2012-07-06 18:50:46 +0200
committerJeremy Lainé <jeremy.laine@m4x.org>2012-07-16 16:15:27 +0200
commit99bd8884bc87fbdbbe3a053f3afda9155b914c0f (patch)
treed8aa44f27897dbb6057b3b87cf5bc3167890425e
parent1b445c310f9a3978c850c75f4070ba0ad7cb0523 (diff)
downloadqxmpp-99bd8884bc87fbdbbe3a053f3afda9155b914c0f.tar.gz
Ability to use more complex result set management while getting the archive list
-rw-r--r--src/base/QXmppArchiveIq.cpp36
-rw-r--r--src/base/QXmppArchiveIq.h8
-rw-r--r--src/client/QXmppArchiveManager.cpp26
-rw-r--r--src/client/QXmppArchiveManager.h7
-rw-r--r--tests/tests.cpp2
5 files changed, 52 insertions, 27 deletions
diff --git a/src/base/QXmppArchiveIq.cpp b/src/base/QXmppArchiveIq.cpp
index ca489cff..8bc6b12d 100644
--- a/src/base/QXmppArchiveIq.cpp
+++ b/src/base/QXmppArchiveIq.cpp
@@ -265,23 +265,6 @@ void QXmppArchiveListIq::setChats(const QList<QXmppArchiveChat> &chats)
m_chats = chats;
}
-/// Returns the maximum number of results.
-///
-
-int QXmppArchiveListIq::max() const
-{
- return m_rsmQuery.max();
-}
-
-/// Sets the maximum number of results.
-///
-/// \param max
-
-void QXmppArchiveListIq::setMax(int max)
-{
- m_rsmQuery.setMax(max);
-}
-
/// Returns the JID which archived conversations must match.
///
@@ -333,6 +316,25 @@ void QXmppArchiveListIq::setEnd(const QDateTime &end)
m_end = end;
}
+QXmppResultSetQuery QXmppArchiveListIq::resultSetQuery() const
+{
+ return m_rsmQuery;
+}
+void QXmppArchiveListIq::setResultSetQuery(const QXmppResultSetQuery& rsm)
+{
+ m_rsmQuery = rsm;
+}
+
+QXmppResultSetReply QXmppArchiveListIq::resultSetReply() const
+{
+ return m_rsmReply;
+}
+void QXmppArchiveListIq::setResultSetReply(const QXmppResultSetReply& rsm)
+{
+ m_rsmReply = rsm;
+}
+
+
bool QXmppArchiveListIq::isArchiveListIq(const QDomElement &element)
{
QDomElement listElement = element.firstChildElement("list");
diff --git a/src/base/QXmppArchiveIq.h b/src/base/QXmppArchiveIq.h
index 8c3bccf2..e9618616 100644
--- a/src/base/QXmppArchiveIq.h
+++ b/src/base/QXmppArchiveIq.h
@@ -133,9 +133,6 @@ public:
QList<QXmppArchiveChat> chats() const;
void setChats(const QList<QXmppArchiveChat> &chats);
- int max() const;
- void setMax(int max);
-
QString with() const;
void setWith( const QString &with );
@@ -145,6 +142,11 @@ public:
QDateTime end() const;
void setEnd(const QDateTime &end );
+ QXmppResultSetQuery resultSetQuery() const;
+ void setResultSetQuery(const QXmppResultSetQuery &rsm);
+ QXmppResultSetReply resultSetReply() const;
+ void setResultSetReply(const QXmppResultSetReply &rsm);
+
/// \cond
static bool isArchiveListIq(const QDomElement &element);
/// \endcond
diff --git a/src/client/QXmppArchiveManager.cpp b/src/client/QXmppArchiveManager.cpp
index 75d3fbc7..92b2de1f 100644
--- a/src/client/QXmppArchiveManager.cpp
+++ b/src/client/QXmppArchiveManager.cpp
@@ -44,7 +44,7 @@ bool QXmppArchiveManager::handleStanza(const QDomElement &element)
{
QXmppArchiveListIq archiveIq;
archiveIq.parse(element);
- emit archiveListReceived(archiveIq.chats());
+ emit archiveListReceived(archiveIq.chats(), archiveIq.resultSetReply());
return true;
}
else if(QXmppArchivePrefIq::isArchivePrefIq(element))
@@ -64,18 +64,36 @@ bool QXmppArchiveManager::handleStanza(const QDomElement &element)
/// \param jid Optional JID if you only want conversations with a specific JID.
/// \param start Optional start time.
/// \param end Optional end time.
-/// \param max Optional maximum number of collections to list.
+/// \param rsm Result Set Management query
///
-void QXmppArchiveManager::listCollections(const QString &jid, const QDateTime &start, const QDateTime &end, int max)
+void QXmppArchiveManager::listCollections(const QString& jid, const QDateTime& start,
+ const QDateTime& end, const QXmppResultSetQuery &rsm)
{
QXmppArchiveListIq packet;
- packet.setMax(max);
+ packet.setResultSetQuery(rsm);
packet.setWith(jid);
packet.setStart(start);
packet.setEnd(end);
client()->sendPacket(packet);
}
+/// \overload
+/// Retrieves the list of available collections. Once the results are
+/// received, the archiveListReceived() signal will be emitted.
+///
+/// \param jid Optional JID if you only want conversations with a specific JID.
+/// \param start Optional start time.
+/// \param end Optional end time.
+/// \param max Optional maximum number of collections to list.
+///
+void QXmppArchiveManager::listCollections(const QString &jid, const QDateTime &start, const QDateTime &end, int max)
+{
+ QXmppResultSetQuery rsm;
+ rsm.setMax(max);
+ listCollections(jid, start, end, rsm);
+}
+
+
/// Removes the specified collection(s).
///
/// \param jid The JID of the collection
diff --git a/src/client/QXmppArchiveManager.h b/src/client/QXmppArchiveManager.h
index 01d9f357..fc7b27a9 100644
--- a/src/client/QXmppArchiveManager.h
+++ b/src/client/QXmppArchiveManager.h
@@ -27,6 +27,7 @@
#include <QDateTime>
#include "QXmppClientExtension.h"
+#include "QXmppResultSet.h"
class QXmppArchiveChat;
class QXmppArchiveChatIq;
@@ -54,7 +55,9 @@ class QXMPP_EXPORT QXmppArchiveManager : public QXmppClientExtension
Q_OBJECT
public:
- void listCollections(const QString &jid, const QDateTime &start = QDateTime(), const QDateTime &end = QDateTime(), int max = 0);
+ void listCollections(const QString &jid, const QDateTime &start = QDateTime(), const QDateTime &end = QDateTime(),
+ const QXmppResultSetQuery &rsm = QXmppResultSetQuery());
+ void listCollections(const QString &jid, const QDateTime &start, const QDateTime &end, int max);
void removeCollections(const QString &jid, const QDateTime &start = QDateTime(), const QDateTime &end = QDateTime());
void retrieveCollection(const QString &jid, const QDateTime &start, int max = 0);
@@ -65,7 +68,7 @@ public:
signals:
/// This signal is emitted when archive list is received
/// after calling listCollections()
- void archiveListReceived(const QList<QXmppArchiveChat>&);
+ void archiveListReceived(const QList<QXmppArchiveChat>&, const QXmppResultSetReply &rsm = QXmppResultSetReply());
/// This signal is emitted when archive chat is received
/// after calling retrieveCollection()
diff --git a/tests/tests.cpp b/tests/tests.cpp
index a97a7255..f67fbc4f 100644
--- a/tests/tests.cpp
+++ b/tests/tests.cpp
@@ -208,7 +208,7 @@ void TestPackets::testArchiveList()
QCOMPARE(iq.with(), QLatin1String("juliet@capulet.com"));
QCOMPARE(iq.start(), QDateTime(QDate(1469, 7, 21), QTime(2, 0, 0), Qt::UTC));
QCOMPARE(iq.end(), QDateTime(QDate(1479, 7, 21), QTime(4, 0, 0), Qt::UTC));
- QCOMPARE(iq.max(), 30);
+ QCOMPARE(iq.resultSetQuery().max(), 30);
serializePacket(iq, xml);
}