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

List:       kde-commits
Subject:    branches/KDE/3.4/kdenetwork/kopete/protocols/oscar
From:       Matt Rogers <mattr () kde ! org>
Date:       2005-07-09 4:25:12
Message-ID: 1120883112.960530.10475.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 432926 by mattr:

Backport the fixes for bugs 103300 and 103249
Should be in KDE 3.4.2 (Kopete 0.10.3)

CCBUGS: 103300, 103249


 M  +4 -0      icq/icqcontact.cpp  
 M  +31 -5     liboscar/messagereceivertask.cpp  
 M  +2 -0      liboscar/oscartypeclasses.h  
 M  +11 -4     oscaraccount.cpp  


--- branches/KDE/3.4/kdenetwork/kopete/protocols/oscar/icq/icqcontact.cpp #432925:432926
@@ -32,6 +32,7 @@
 
 #include "kopetemessagemanagerfactory.h"
 #include "kopeteuiglobal.h"
+#include "kopetemetacontact.h"
 
 #include "icquserinfo.h"
 #include "icqreadaway.h"
@@ -126,6 +127,9 @@
 
 void ICQContact::loggedIn()
 {
+	if ( metaContact()->isTemporary() )
+		return;
+	
 	if ( m_ssiItem.waitingAuth() )
 		setOnlineStatus( mProtocol->statusManager()->waitingForAuth() );
 
--- branches/KDE/3.4/kdenetwork/kopete/protocols/oscar/liboscar/messagereceivertask.cpp #432925:432926
@@ -188,10 +188,36 @@
 	kdDebug(14151) << k_funcinfo << "Received server message. type = " << msgType
 		<< ", flags = " << msgFlags << endl;
 		
-	QCString msgText = tlv5buffer.getLNTS();
+	//handle the special user types
+	Oscar::Message msg;
+	QString msgSender;
+	switch ( msgType )
+	{
+	case 0x0D:
+		msgSender = "ICQ Web Express";
+		msg.addProperty( Oscar::Message::WWP );
+		break;
+	case 0x0E:
+		msgSender = "ICQ Email Express";
+		msg.addProperty( Oscar::Message::EMail );
+		break;
+	default:
+		msgSender = m_fromUser;
+		break;
+	};
 	
-	Oscar::Message msg;
-	msg.addProperty( Oscar::Message::UTF8 );
+	QByteArray msgText = tlv5buffer.getLNTS();
+	int msgLength = msgText.size();
+	if ( msgType == 0x0D || msgType == 0x0E )
+	{
+		for ( int i = 0; i < msgLength; i++ )
+		{
+			if ( msgText[i] == (char)0xFE )
+				msgText[i] = 0x20;
+		}
+	}
+	
+	msg.addProperty( Oscar::Message::Latin );
 	switch ( msgFlags )
 	{
 	case 0x03:
@@ -207,9 +233,9 @@
 	
 	msg.setType( 0x04 );
 	msg.setTimestamp( QDateTime::currentDateTime() );
-	msg.setSender( m_fromUser );
+	msg.setSender( msgSender );
 	msg.setReceiver( client()->userId() );
-	msg.setText( QString::fromUtf8( msgText, msgText.length() ) );
+	msg.setText( QString(msgText) );
 	emit receivedMessage( msg );
 }
 
--- branches/KDE/3.4/kdenetwork/kopete/protocols/oscar/liboscar/oscartypeclasses.h #432925:432926
@@ -61,6 +61,8 @@
 	enum {
 		Normal = 0x0000,
 		AutoResponse = 0x0001,
+		WWP = 0x0002,
+		EMail = 0x0004,
 		UCS2 = 0x0010,
 		Latin = 0x0020,
 		UTF8 = 0x0040
--- branches/KDE/3.4/kdenetwork/kopete/protocols/oscar/oscaraccount.cpp #432925:432926
@@ -289,10 +289,10 @@
 	 * Append to the chat window
 	 */
 	QString sender = Oscar::normalize( message.sender() );
-	if ( !contacts()[ sender ] )
+	if ( !contacts()[sender] )
 	{
-		kdDebug(OSCAR_RAW_DEBUG) << "Adding '" << message.sender() << "' as temporary contact" << endl;
-		addContact( message.sender(), QString::null, 0,  Kopete::Account::Temporary );
+		kdDebug(OSCAR_RAW_DEBUG) << "Adding '" << sender << "' as temporary contact" << endl;
+		addContact( sender, QString::null, 0,  Kopete::Account::Temporary );
 	}
 	
 	OscarContact* ocSender = static_cast<OscarContact *> ( contacts()[sender] ); //should exist now
@@ -300,9 +300,16 @@
 	if ( !ocSender )
 	{
 		kdWarning(OSCAR_RAW_DEBUG) << "Temporary contact creation failed for '" 
-			<< message.sender() << "'! Discarding message: " << message.text() << endl;
+			<< sender << "'! Discarding message: " << message.text() << endl;
 		return;
 	}
+	else
+	{
+		if ( message.properties() & Oscar::Message::WWP == Oscar::Message::WWP )
+			ocSender->setNickName( i18n("ICQ Web Express") );
+		if ( message.properties() & Oscar::Message::EMail == Oscar::Message::EMail )
+			ocSender->setNickName( i18n("ICQ Email Express") );
+	}
 	
 	Kopete::ChatSession* chatSession = ocSender->manager( Kopete::Contact::CanCreate );
 	chatSession->receivedTypingMsg( ocSender, false ); //person is done typing
[prev in list] [next in list] [prev in thread] [next in thread] 

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