aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJeremy Lainé <jeremy.laine@m4x.org>2011-09-29 09:12:47 +0000
committerJeremy Lainé <jeremy.laine@m4x.org>2011-09-29 09:12:47 +0000
commitbe06c3bcb0748ee719ca6e50dd768b5685c541ca (patch)
tree2c232af8b2e22d578ecc03955433302fde150539 /src
parentf1c671f6f6ef0ecf0b96dab21f03d423037fb636 (diff)
downloadqxmpp-be06c3bcb0748ee719ca6e50dd768b5685c541ca.tar.gz
Improve XEP-0136 support to enable archive deletion.
Diffstat (limited to 'src')
-rw-r--r--src/QXmppArchiveIq.cpp78
-rw-r--r--src/QXmppArchiveIq.h32
-rw-r--r--src/QXmppArchiveManager.cpp39
-rw-r--r--src/QXmppArchiveManager.h6
4 files changed, 131 insertions, 24 deletions
diff --git a/src/QXmppArchiveIq.cpp b/src/QXmppArchiveIq.cpp
index 706fe2e6..e8bef8fc 100644
--- a/src/QXmppArchiveIq.cpp
+++ b/src/QXmppArchiveIq.cpp
@@ -405,6 +405,84 @@ void QXmppArchivePrefIq::toXmlElementFromChild(QXmlStreamWriter *writer) const
writer->writeEndElement();
}
+/// Returns the JID which archived conversations must match.
+///
+
+QString QXmppArchiveRemoveIq::with() const
+{
+ return m_with;
+}
+
+/// Sets the JID which archived conversations must match.
+///
+/// \param with
+
+void QXmppArchiveRemoveIq::setWith(const QString &with)
+{
+ m_with = with;
+}
+
+/// Returns the start date/time for the archived conversations.
+///
+
+QDateTime QXmppArchiveRemoveIq::start() const
+{
+ return m_start;
+}
+
+/// Sets the start date/time for the archived conversations.
+///
+/// \param start
+
+void QXmppArchiveRemoveIq::setStart(const QDateTime &start)
+{
+ m_start = start;
+}
+
+/// Returns the end date/time for the archived conversations.
+///
+
+QDateTime QXmppArchiveRemoveIq::end() const
+{
+ return m_end;
+}
+
+/// Sets the end date/time for the archived conversations.
+///
+/// \param end
+
+void QXmppArchiveRemoveIq::setEnd(const QDateTime &end)
+{
+ m_end = end;
+}
+
+bool QXmppArchiveRemoveIq::isArchiveRemoveIq(const QDomElement &element)
+{
+ QDomElement retrieveElement = element.firstChildElement("remove");
+ return (retrieveElement.namespaceURI() == ns_archive);
+}
+
+void QXmppArchiveRemoveIq::parseElementFromChild(const QDomElement &element)
+{
+ QDomElement listElement = element.firstChildElement("remove");
+ m_with = listElement.attribute("with");
+ m_start = datetimeFromString(listElement.attribute("start"));
+ m_end = datetimeFromString(listElement.attribute("end"));
+}
+
+void QXmppArchiveRemoveIq::toXmlElementFromChild(QXmlStreamWriter *writer) const
+{
+ writer->writeStartElement("remove");
+ writer->writeAttribute("xmlns", ns_archive);
+ if (!m_with.isEmpty())
+ helperToXmlAddAttribute(writer, "with", m_with);
+ if (m_start.isValid())
+ helperToXmlAddAttribute(writer, "start", datetimeToString(m_start));
+ if (m_end.isValid())
+ helperToXmlAddAttribute(writer, "end", datetimeToString(m_end));
+ writer->writeEndElement();
+}
+
QXmppArchiveRetrieveIq::QXmppArchiveRetrieveIq()
: QXmppIq(QXmppIq::Get), m_max(0)
{
diff --git a/src/QXmppArchiveIq.h b/src/QXmppArchiveIq.h
index 426beca3..c0784891 100644
--- a/src/QXmppArchiveIq.h
+++ b/src/QXmppArchiveIq.h
@@ -162,6 +162,38 @@ private:
QList<QXmppArchiveChat> m_chats;
};
+/// \brief Represents an archive remove IQ as defined by XEP-0136: Message Archiving.
+///
+/// \ingroup Stanzas
+
+class QXmppArchiveRemoveIq : public QXmppIq
+{
+public:
+ QString with() const;
+ void setWith( const QString &with );
+
+ QDateTime start() const;
+ void setStart(const QDateTime &start );
+
+ QDateTime end() const;
+ void setEnd(const QDateTime &end );
+
+ /// \cond
+ static bool isArchiveRemoveIq(const QDomElement &element);
+ /// \endcond
+
+protected:
+ /// \cond
+ void parseElementFromChild(const QDomElement &element);
+ void toXmlElementFromChild(QXmlStreamWriter *writer) const;
+ /// \endcond
+
+private:
+ QString m_with;
+ QDateTime m_start;
+ QDateTime m_end;
+};
+
/// \brief Represents an archive retrieve IQ as defined by XEP-0136: Message Archiving.
///
/// \ingroup Stanzas
diff --git a/src/QXmppArchiveManager.cpp b/src/QXmppArchiveManager.cpp
index 06585fa4..75d3fbc7 100644
--- a/src/QXmppArchiveManager.cpp
+++ b/src/QXmppArchiveManager.cpp
@@ -27,21 +27,6 @@
#include "QXmppArchiveManager.h"
#include "QXmppClient.h"
-void QXmppArchiveManager::archiveChatIqReceived(const QXmppArchiveChatIq &chatIq)
-{
- emit archiveChatReceived(chatIq.chat());
-}
-
-void QXmppArchiveManager::archiveListIqReceived(const QXmppArchiveListIq &listIq)
-{
- emit archiveListReceived(listIq.chats());
-}
-
-void QXmppArchiveManager::archivePrefIqReceived(const QXmppArchivePrefIq &prefIq)
-{
- Q_UNUSED(prefIq);
-}
-
bool QXmppArchiveManager::handleStanza(const QDomElement &element)
{
if (element.tagName() != "iq")
@@ -52,21 +37,21 @@ bool QXmppArchiveManager::handleStanza(const QDomElement &element)
{
QXmppArchiveChatIq archiveIq;
archiveIq.parse(element);
- archiveChatIqReceived(archiveIq);
+ emit archiveChatReceived(archiveIq.chat());
return true;
}
else if(QXmppArchiveListIq::isArchiveListIq(element))
{
QXmppArchiveListIq archiveIq;
archiveIq.parse(element);
- archiveListIqReceived(archiveIq);
+ emit archiveListReceived(archiveIq.chats());
return true;
}
else if(QXmppArchivePrefIq::isArchivePrefIq(element))
{
+ // TODO: handle preference iq
QXmppArchivePrefIq archiveIq;
archiveIq.parse(element);
- archivePrefIqReceived(archiveIq);
return true;
}
@@ -79,7 +64,7 @@ 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.
+/// \param max Optional maximum number of collections to list.
///
void QXmppArchiveManager::listCollections(const QString &jid, const QDateTime &start, const QDateTime &end, int max)
{
@@ -91,6 +76,22 @@ void QXmppArchiveManager::listCollections(const QString &jid, const QDateTime &s
client()->sendPacket(packet);
}
+/// Removes the specified collection(s).
+///
+/// \param jid The JID of the collection
+/// \param start Optional start time.
+/// \param end Optional end time.
+///
+void QXmppArchiveManager::removeCollections(const QString &jid, const QDateTime &start, const QDateTime &end)
+{
+ QXmppArchiveRemoveIq packet;
+ packet.setType(QXmppIq::Set);
+ packet.setWith(jid);
+ packet.setStart(start);
+ packet.setEnd(end);
+ client()->sendPacket(packet);
+}
+
/// Retrieves the specified collection. Once the results are received,
/// the archiveChatReceived() will be emitted.
///
diff --git a/src/QXmppArchiveManager.h b/src/QXmppArchiveManager.h
index 586d3713..aa1444df 100644
--- a/src/QXmppArchiveManager.h
+++ b/src/QXmppArchiveManager.h
@@ -55,6 +55,7 @@ class QXmppArchiveManager : public QXmppClientExtension
public:
void listCollections(const QString &jid, const QDateTime &start = QDateTime(), const QDateTime &end = QDateTime(), int max = 0);
+ void removeCollections(const QString &jid, const QDateTime &start = QDateTime(), const QDateTime &end = QDateTime());
void retrieveCollection(const QString &jid, const QDateTime &start, int max = 0);
/// \cond
@@ -69,11 +70,6 @@ signals:
/// This signal is emitted when archive chat is received
/// after calling retrieveCollection()
void archiveChatReceived(const QXmppArchiveChat&);
-
-private:
- void archiveChatIqReceived(const QXmppArchiveChatIq&);
- void archiveListIqReceived(const QXmppArchiveListIq&);
- void archivePrefIqReceived(const QXmppArchivePrefIq&);
};
#endif