All pastes #620274 Raw Edit

Mine

public text v1 · immutable
·published 2007-07-15 11:12 UTC
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