--- old-psi/iris/include/xmpp_message.h 2007-07-15 13:09:50.000000000 +0200 +++ new-psi/iris/include/xmpp_message.h 2007-07-15 13:09:50.000000000 +0200 @@ -33,6 +33,7 @@ namespace XMPP { class Jid; class PubSubItem; + class PubSubRetraction; class HTMLElement; class HttpAuthRequest; class XData; @@ -71,6 +72,7 @@ // JEP-0060 const QString& pubsubNode() const; const QList& pubsubItems() const; + const QList& pubsubRetractions() const; // JEP-0091 QDateTime timeStamp() const; diff: old-psi/iris/include/xmpp_message.h~: No such file or directory diff: new-psi/iris/include/xmpp_message.h~: No such file or directory --- old-psi/iris/include/xmpp_pubsubitem.h 2007-07-15 13:09:50.000000000 +0200 +++ new-psi/iris/include/xmpp_pubsubitem.h 2007-07-15 13:09:50.000000000 +0200 @@ -37,6 +37,17 @@ QString id_; QDomElement payload_; }; + + class PubSubRetraction + { + public: + PubSubRetraction(); + PubSubRetraction(const QString& id); + const QString& id() const; + + private: + QString id_; + }; } #endif diff: old-psi/iris/include/xmpp_pubsubitem.h~: No such file or directory diff: new-psi/iris/include/xmpp_pubsubitem.h~: No such file or directory --- old-psi/iris/xmpp-im/types.cpp 2007-07-15 13:09:50.000000000 +0200 +++ new-psi/iris/xmpp-im/types.cpp 2007-07-15 13:09:50.000000000 +0200 @@ -1065,6 +1065,7 @@ QList eventList; QString pubsubNode; QList pubsubItems; + QList pubsubRetractions; QString eventId; QString xencrypted, invite; ChatState chatState; @@ -1299,6 +1300,11 @@ return d->pubsubItems; } +const QList& Message::pubsubRetractions() const +{ + return d->pubsubRetractions; +} + QDateTime Message::timeStamp() const { return d->timeStamp; @@ -1783,6 +1789,9 @@ } } } + if (o.tagName() == "retract") { + d->pubsubRetractions += PubSubRetraction(o.attribute("id")); + } } } } @@ -3054,4 +3063,18 @@ } +PubSubRetraction::PubSubRetraction() +{ +} + +PubSubRetraction::PubSubRetraction(const QString& id) : id_(id) +{ +} + +const QString& PubSubRetraction::id() const +{ + return id_; +} + + } --- old-psi/src/psiaccount.cpp 2007-07-15 13:09:50.000000000 +0200 +++ new-psi/src/psiaccount.cpp 2007-07-15 13:09:50.000000000 +0200 @@ -615,6 +617,7 @@ // Initialize PubSub stuff d->pepManager = new PEPManager(d->client, d->serverInfoManager); connect(d->pepManager,SIGNAL(itemPublished(const Jid&, const QString&, const PubSubItem&)),SLOT(itemPublished(const Jid&, const QString&, const PubSubItem&))); + connect(d->pepManager,SIGNAL(itemRetracted(const Jid&, const QString&, const PubSubRetraction&)),SLOT(itemRetracted(const Jid&, const QString&, const PubSubRetraction&))); d->pepAvailable = false; #ifdef WHITEBOARDING @@ -2602,6 +2607,46 @@ notifyOnlineOk = true; } + +void PsiAccount::itemRetracted(const Jid& j, const QString& n, const PubSubRetraction& item) +{ + // User Tune + if (n == "http://jabber.org/protocol/tune") { + // Parse tune + foreach(UserListItem* u, findRelevant(j)) { + // FIXME: try to find the right resource using JEP-33 'replyto' + //UserResourceList::Iterator rit = u->userResourceList().find(); + //bool found = (rit == u->userResourceList().end()) ? false: true; + //if(found) + // (*rit).setTune(tune); + u->setTune(QString()); + cpUpdate(*u); + } + } + else if (n == "http://jabber.org/protocol/mood") { + foreach(UserListItem* u, findRelevant(j)) { + u->setMood(Mood()); + cpUpdate(*u); + } + } + else if (n == "http://jabber.org/protocol/geoloc") { + // FIXME: try to find the right resource using JEP-33 'replyto' + // see tune case above + foreach(UserListItem* u, findRelevant(j)) { + u->setGeoLocation(GeoLocation()); + cpUpdate(*u); + } + } + else if (n == "http://jabber.org/protocol/physloc") { + // FIXME: try to find the right resource using JEP-33 'replyto' + // see tune case above + foreach(UserListItem* u, findRelevant(j)) { + u->setPhysicalLocation(PhysicalLocation()); + cpUpdate(*u); + } + } +} + void PsiAccount::itemPublished(const Jid& j, const QString& n, const PubSubItem& item) { // User Tune diff: old-psi/src/psiaccount.cpp~: No such file or directory diff: new-psi/src/psiaccount.cpp~: No such file or directory --- old-psi/src/psiaccount.h 2007-07-15 13:09:50.000000000 +0200 +++ new-psi/src/psiaccount.h 2007-07-15 13:09:50.000000000 +0200 @@ -39,6 +39,7 @@ class Stream; class QCATLSHandler; class PubSubItem; + class PubSubRetraction; class RosterItem; class Client; //class StreamError; @@ -327,6 +328,7 @@ void enableNotifyOnline(); void itemPublished(const Jid&, const QString&, const PubSubItem&); + void itemRetracted(const Jid&, const QString&, const PubSubRetraction&); void chatMessagesRead(const Jid &); diff: old-psi/src/psiaccount.h~: No such file or directory diff: new-psi/src/psiaccount.h~: No such file or directory --- old-psi/src/pepmanager.cpp 2007-07-15 13:09:50.000000000 +0200 +++ new-psi/src/pepmanager.cpp 2007-07-15 13:09:50.000000000 +0200 @@ -60,6 +60,7 @@ if(x.attribute("type") == "result") { bool found; + // FIXME Check namespace... QDomElement e = findSubTag(x, "pubsub", &found); if (found) { QDomElement i = findSubTag(e, "items", &found); @@ -594,9 +595,13 @@ void PEPManager::messageReceived(const Message& m) { + foreach(PubSubRetraction i, m.pubsubRetractions()) { + emit itemRetracted(m.from(),m.pubsubNode(), i); + } foreach(PubSubItem i, m.pubsubItems()) { emit itemPublished(m.from(),m.pubsubNode(),i); } + } /*void PEPManager::serverFeaturesChanged() diff: old-psi/src/pepmanager.cpp~: No such file or directory diff: new-psi/src/pepmanager.cpp~: No such file or directory --- old-psi/src/pepmanager.h 2007-07-15 13:09:50.000000000 +0200 +++ new-psi/src/pepmanager.h 2007-07-15 13:09:50.000000000 +0200 @@ -28,6 +28,7 @@ class Jid; class Message; class PubSubItem; + class PubSubRetraction; } class PubSubSubscription; class QString; @@ -66,6 +67,7 @@ void publish_success(const QString&, const PubSubItem&); void publish_error(const QString&, const PubSubItem&); void itemPublished(const Jid& jid, const QString& node, const PubSubItem&); + void itemRetracted(const Jid& jid, const QString& node, const PubSubRetraction&); //void ready(const QString& node); //void getSubscriptions_success(const Jid& jid, const QList& subscriptions); //void getSubscriptions_error(const Jid&, int, const QString&); diff: old-psi/src/pepmanager.h~: No such file or directory diff: new-psi/src/pepmanager.h~: No such file or directory