[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdenetwork/kopete/protocols/jabber
From:       Pali Rohár <pali.rohar () gmail ! com>
Date:       2013-05-21 23:18:14
Message-ID: 20130521231814.6C33BAC85D () svn ! kde ! org
[Download RAW message or body]

SVN commit 1355991 by pali:

Implement XEP-0184: Message Delivery Receipts in Kopete Jabber protocol

XEP-0184 is used for informing user about delivery status of sent text messages

FEATURE


 M  +1 -1      CMakeLists.txt  
 M  +1 -0      jabberbasecontact.h  
 M  +43 -3     jabberchatsession.cpp  
 M  +22 -0     jabbercontact.cpp  
 M  +2 -0      jabbercontact.h  
 M  +22 -0     jabbergroupmembercontact.cpp  
 M  +3 -0      jabbergroupmembercontact.h  


--- trunk/KDE/kdenetwork/kopete/protocols/jabber/CMakeLists.txt #1355990:1355991
@@ -1,7 +1,7 @@
 add_definitions(-DQT3_SUPPORT -DQT3_SUPPORT_WARNINGS -DIRIS_XMPP_JID_DEPRECATED)
 
 # if using patched libiris version, enable kopete features
-add_definitions(-DIRIS_FILE_TRANSFER_PREVIEW -DIRIS_SOCKET_ACCESS \
-DIRIS_HASH_ATTRIBUTE) +add_definitions(-DIRIS_FILE_TRANSFER_PREVIEW \
-DIRIS_SOCKET_ACCESS -DIRIS_HASH_ATTRIBUTE -DIRIS_XEP_0184_ID_ATTRIBUTE)  
 add_subdirectory( icons ) 
 add_subdirectory( libiris ) 
--- trunk/KDE/kdenetwork/kopete/protocols/jabber/jabberbasecontact.h #1355990:1355991
@@ -153,6 +153,7 @@
 	bool sendsDeliveredEvent() const { return mSendsDeliveredEvent; }
 
 	virtual bool isContactRequestingEvent( XMPP::MsgEvent /*event*/ ) { return false; }
+	virtual bool isContactRequestingReceiptDelivery() { return false; }
 	
 	virtual QString lastReceivedMessageId () const { return QString(); }
 
--- trunk/KDE/kdenetwork/kopete/protocols/jabber/jabberchatsession.cpp \
#1355990:1355991 @@ -220,12 +220,14 @@
 	XMPP::MsgEvent msg_event;
 	XMPP::ChatState new_state;
 	bool send_msg_event=false;
+	bool send_msg_delivery=false;
 	bool send_state=false;
 
 	switch(event)
 	{
 		case Delivered:
 			send_msg_event=true;
+			send_msg_delivery=true;
 			msg_event=DeliveredEvent;
 			break;
 		case Displayed:
@@ -270,6 +272,19 @@
 			}
 		}
 	}
+	if(send_msg_delivery)
+	{
+		send_msg_delivery=false;
+		foreach(Kopete::Contact *c, members())
+		{
+			JabberBaseContact *contact = static_cast<JabberBaseContact*>(c);
+			if(contact->isContactRequestingReceiptDelivery())
+			{
+				send_msg_delivery=true;
+				break;
+			}
+		}
+	}
 /*	if(send_state)
 	{
 		send_state=false;
@@ -284,22 +299,26 @@
 		}
 	}*/
 
-	if( !members().isEmpty() && (send_state || send_msg_event) )
+	if( !members().isEmpty() && (send_state || send_msg_event || send_msg_delivery) )
 	{
 		// create JID for the recipient
 		JabberBaseContact *recipient = static_cast<JabberBaseContact*>(members().first());
 		XMPP::Jid toJid = recipient->rosterItem().jid();
+		const QString &lastReceivedMessageId = recipient->lastReceivedMessageId ();
 
 		// set resource properly if it has been selected already
 		if ( !resource().isEmpty () )
 			toJid = toJid.withResource ( resource () );
 
+		if (send_state || send_msg_delivery)
+		{
+
 		XMPP::Message message;
 
 		message.setTo ( toJid );
 		if(send_msg_event)
 		{
-			message.setEventId ( recipient->lastReceivedMessageId () );
+				message.setEventId ( lastReceivedMessageId );
 			// store composing event depending on state
 			message.addEvent ( msg_event );
 		}
@@ -317,11 +336,24 @@
 			message.setType ( "chat" );
 		}
 
-
 		// send message
 		account()->client()->sendMessage ( message );
+
 	}
+
+#ifdef IRIS_XEP_0184_ID_ATTRIBUTE
+		// XEP-0184: Message Delivery Receipts (same as DeliveredEvent)
+		if (send_msg_delivery)
+		{
+			XMPP::Message message;
+			message.setTo ( toJid );
+			message.setMessageReceipt ( ReceiptReceived );
+			message.setMessageReceiptId ( lastReceivedMessageId );
+			account()->client()->sendMessage ( message );
 }
+#endif
+	}
+}
 
 void JabberChatSession::slotSendTypingNotification ( bool typing )
 {
@@ -437,6 +469,14 @@
 		jabberMessage.addEvent( DisplayedEvent );
 		jabberMessage.setChatState( XMPP::StateActive );
 
+#ifdef IRIS_XEP_0184_ID_ATTRIBUTE
+		// XEP-0184: Message Delivery Receipts
+		JabberResource *jresource = account()->resourcePool()->getJabberResource(toJid, \
resource()); +		if( jresource && \
jresource->features().test(QStringList("urn:xmpp:receipts")) ) +		{
+			jabberMessage.setMessageReceipt( ReceiptRequest );
+		}
+#endif
 
 		// send the message
 		account()->client()->sendMessage ( jabberMessage );
--- trunk/KDE/kdenetwork/kopete/protocols/jabber/jabbercontact.cpp #1355990:1355991
@@ -126,6 +126,8 @@
 	mRequestDisplayedEvent = false;
 	mRequestDeliveredEvent = false;
 	mRequestComposingEvent = false;
+
+	mRequestReceiptDelivery = false;
 }
 
 JabberContact::~JabberContact()
@@ -364,7 +366,17 @@
 					mManager->appendMessage ( m, message.from().resource () );
 				}
 			}
+
+#ifdef IRIS_XEP_0184_ID_ATTRIBUTE
+			// XEP-0184: Message Delivery Receipts
+			if ( message.messageReceipt() == ReceiptReceived )
+			{
+				mManager->receivedEventNotification ( i18n("Message has been delivered") );
+				mManager->receivedMessageState( message.messageReceiptId().toUInt(), \
Kopete::Message::StateSent ); +				mSendsDeliveredEvent = true;
 		}
+#endif
+		}
 		else
 		// Then here could be event notification requests
 		{
@@ -372,6 +384,11 @@
 			mRequestOfflineEvent = message.containsEvent ( XMPP::OfflineEvent );
 			mRequestDeliveredEvent = message.containsEvent ( XMPP::DeliveredEvent );
 			mRequestDisplayedEvent = message.containsEvent ( XMPP::DisplayedEvent);
+
+#ifdef IRIS_XEP_0184_ID_ATTRIBUTE
+			// XEP-0184: Message Delivery Receipts
+			mRequestReceiptDelivery = ( message.messageReceipt() == ReceiptRequest );
+#endif
 		}
 	}
 
@@ -1281,6 +1298,11 @@
 		return false;
 }
 
+bool JabberContact::isContactRequestingReceiptDelivery()
+{
+	return mRequestReceiptDelivery;
+}
+
 QString JabberContact::lastReceivedMessageId () const
 {
 	return mLastReceivedMessageId;
--- trunk/KDE/kdenetwork/kopete/protocols/jabber/jabbercontact.h #1355990:1355991
@@ -67,6 +67,7 @@
 	
 
 	virtual bool isContactRequestingEvent( XMPP::MsgEvent event );
+	virtual bool isContactRequestingReceiptDelivery();
 
 	virtual QString lastReceivedMessageId () const;
 
@@ -273,6 +274,7 @@
 	 */
 	bool mDiscoDone :1;
 
+	bool mRequestReceiptDelivery :1;
 	QString mLastReceivedMessageId;
 	QTimer *m_syncTimer;
 
--- trunk/KDE/kdenetwork/kopete/protocols/jabber/jabbergroupmembercontact.cpp \
#1355990:1355991 @@ -47,6 +47,8 @@
 	mRequestDisplayedEvent = false;
 	mRequestDeliveredEvent = false;
 	mRequestComposingEvent = false;
+
+	mRequestReceiptDelivery = false;
 }
 
 /**
@@ -166,7 +168,17 @@
 					mManager->appendMessage ( m, message.from().resource () );
 				}*/
 			}
+
+#ifdef IRIS_XEP_0184_ID_ATTRIBUTE
+			// XEP-0184: Message Delivery Receipts
+			if ( message.messageReceipt() == ReceiptReceived )
+			{
+				//mManager->receivedEventNotification ( i18n("Message has been delivered") );
+				mManager->receivedMessageState( message.messageReceiptId().toUInt(), \
Kopete::Message::StateSent ); +				mSendsDeliveredEvent = true;
 		}
+#endif
+		}
 		else
 		// Then here could be event notification requests
 		{
@@ -174,6 +186,11 @@
 			mRequestOfflineEvent = message.containsEvent ( XMPP::OfflineEvent );
 			mRequestDeliveredEvent = message.containsEvent ( XMPP::DeliveredEvent );
 			mRequestDisplayedEvent = message.containsEvent ( XMPP::DisplayedEvent);
+
+#ifdef IRIS_XEP_0184_ID_ATTRIBUTE
+			// XEP-0184: Message Delivery Receipts
+			mRequestReceiptDelivery = ( message.messageReceipt() == ReceiptRequest );
+#endif
 		}
 	}
 
@@ -242,6 +259,11 @@
 		return false;
 }
 
+bool JabberGroupMemberContact::isContactRequestingReceiptDelivery()
+{
+	return mRequestReceiptDelivery;
+}
+
 QString JabberGroupMemberContact::lastReceivedMessageId () const
 {
 	return mLastReceivedMessageId;
--- trunk/KDE/kdenetwork/kopete/protocols/jabber/jabbergroupmembercontact.h \
#1355990:1355991 @@ -53,6 +53,7 @@
 	void handleIncomingMessage ( const XMPP::Message &message );
 
 	virtual bool isContactRequestingEvent( XMPP::MsgEvent event );
+	virtual bool isContactRequestingReceiptDelivery();
 	
 	virtual QString lastReceivedMessageId () const;
 
@@ -85,6 +86,8 @@
 	bool mRequestDisplayedEvent :1;
 	bool mRequestDeliveredEvent :1;
 
+	bool mRequestReceiptDelivery :1;
+
 };
 
 #endif


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic