[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