rendered paste body--- 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<PubSubItem>& pubsubItems() const;
+ const QList<PubSubRetraction>& 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<MsgEvent> eventList;
QString pubsubNode;
QList<PubSubItem> pubsubItems;
+ QList<PubSubRetraction> pubsubRetractions;
QString eventId;
QString xencrypted, invite;
ChatState chatState;
@@ -1299,6 +1300,11 @@
return d->pubsubItems;
}
+const QList<PubSubRetraction>& 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(<resource>);
+ //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<PubSubSubscription>& 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