diff options
| author | Jeremy Lainé <jeremy.laine@m4x.org> | 2011-09-29 09:12:47 +0000 |
|---|---|---|
| committer | Jeremy Lainé <jeremy.laine@m4x.org> | 2011-09-29 09:12:47 +0000 |
| commit | be06c3bcb0748ee719ca6e50dd768b5685c541ca (patch) | |
| tree | 2c232af8b2e22d578ecc03955433302fde150539 /src | |
| parent | f1c671f6f6ef0ecf0b96dab21f03d423037fb636 (diff) | |
| download | qxmpp-be06c3bcb0748ee719ca6e50dd768b5685c541ca.tar.gz | |
Improve XEP-0136 support to enable archive deletion.
Diffstat (limited to 'src')
| -rw-r--r-- | src/QXmppArchiveIq.cpp | 78 | ||||
| -rw-r--r-- | src/QXmppArchiveIq.h | 32 | ||||
| -rw-r--r-- | src/QXmppArchiveManager.cpp | 39 | ||||
| -rw-r--r-- | src/QXmppArchiveManager.h | 6 |
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 |
