From: <da...@us...> - 2009-11-30 16:59:12
|
Revision: 5704 http://kmess.svn.sourceforge.net/kmess/?rev=5704&view=rev Author: dazjorz Date: 2009-11-30 16:59:03 +0000 (Mon, 30 Nov 2009) Log Message: ----------- * Fixed a bug introduced by the last commit, causing KMess to initially log in with the handle as friendlyname instead of the correct friendlyname at first login to a new account. Now, when we're ready to go online, we schedule a call; when receiving SOAP data we immediately go online; when it takes too long we just go online without that data. Modified Paths: -------------- branches/kmess/kmess-2.0.x/ChangeLog branches/kmess/kmess-2.0.x/src/network/msnnotificationconnection.cpp branches/kmess/kmess-2.0.x/src/network/msnnotificationconnection.h Modified: branches/kmess/kmess-2.0.x/ChangeLog =================================================================== --- branches/kmess/kmess-2.0.x/ChangeLog 2009-11-30 03:08:28 UTC (rev 5703) +++ branches/kmess/kmess-2.0.x/ChangeLog 2009-11-30 16:59:03 UTC (rev 5704) @@ -1,4 +1,9 @@ +2009-11-30 (Sjors) + * Fixed a bug introduced by the last commit, causing KMess to initially log in + with the handle as friendlyname instead of the correct friendlyname at first + login to a new account. + 2009-11-29 (Valerio) * Fixed missed publishing of the user's friendly name on login. * Fixed notifying the NS server of a friendly name change when a new name is received Modified: branches/kmess/kmess-2.0.x/src/network/msnnotificationconnection.cpp =================================================================== --- branches/kmess/kmess-2.0.x/src/network/msnnotificationconnection.cpp 2009-11-30 03:08:28 UTC (rev 5703) +++ branches/kmess/kmess-2.0.x/src/network/msnnotificationconnection.cpp 2009-11-30 16:59:03 UTC (rev 5704) @@ -80,7 +80,8 @@ lastStatus_(-1), offlineImService_(0), passportLoginService_(0), - roamingService_(0) + roamingService_(0), + initialStatusSent_( false ) { setObjectName( "MsnNotificationConnection" ); @@ -357,6 +358,9 @@ * In MSNP15 the command PRP must be send with SOAP request to avoid nickname will disappear * the next time we sign in. * + * If the initial status change isn't sent yet, this signal comes from the RoamingService and + * means we now have enough information to goOnline(). + * * @param newName The new friendly name. */ void MsnNotificationConnection::changeFriendlyName( QString newName ) @@ -381,6 +385,14 @@ RoamingService *roaming = createRoamingService(); roaming->updateProfile(); + + if( !initialStatusSent_ ) + { +#ifdef KMESSDEBUG_NOTIFICATION_GENERAL + kDebug() << "Got Roaming friendly name, going online..."; +#endif + goOnline(); + } } @@ -893,6 +905,17 @@ * - ses the initial personal message. * - requests other server data, like Hotmail email URL's. * Finally, the connected() signal is fired. + * + * Because we ignore the NS name because it's incorrect nowadays, KMess + * can load its friendlyname from the local storage or from SOAP. At the + * first login, there is no friendlyname, so KMess falls back to starting out + * with the handle. Just after initial login, the SOAP request finishes and + * correctly changes the friendlyname. Because we want this to happen *before* + * the initial login, the signal from the RoamingService is connected to this + * method and there's a timer that will call it after five seconds. This ensures + * that this method is always called, and usually after the real friendlyname + * is known. The variable initialStatusSent_ is used to protect this function + * against being called twice. */ void MsnNotificationConnection::goOnline() { @@ -900,6 +923,19 @@ if(KMESS_NULL(currentAccount_)) return; + if( initialStatusSent_ ) + { +#ifdef KMESSDEBUG_NOTIFICATION_GENERAL + kDebug() << "Initial status already sent, skipping call."; +#endif + return; + } + initialStatusSent_ = true; + +#ifdef KMESSDEBUG_NOTIFICATION_GENERAL + kDebug() << "Going online!"; +#endif + // Stop the authentication timer, we're done with that part loginTimer_.stop(); @@ -982,7 +1018,12 @@ if( ! connected_ ) { // Go online (goOnline() emits the connected() signal) - goOnline(); + // We want to wait for the SOAP friendlyname response before we goOnline. + // See the docs for goOnline() for more information. +#ifdef KMESSDEBUG_NOTIFICATION_GENERAL + kDebug() << "Scheduling goOnline()...."; +#endif + QTimer::singleShot( 5000, this, SLOT( goOnline() ) ); connected_ = true; } @@ -2854,7 +2895,7 @@ loginTimer_.start( NOTIFICATION_COMMAND_INTERVAL_TIMEOUT ); } - AddressBookService *addressBook = createAddressBookService();; + AddressBookService *addressBook = createAddressBookService(); addressBook->retrieveAddressBook(); } Modified: branches/kmess/kmess-2.0.x/src/network/msnnotificationconnection.h =================================================================== --- branches/kmess/kmess-2.0.x/src/network/msnnotificationconnection.h 2009-11-30 03:08:28 UTC (rev 5703) +++ branches/kmess/kmess-2.0.x/src/network/msnnotificationconnection.h 2009-11-30 16:59:03 UTC (rev 5704) @@ -199,8 +199,9 @@ void slotError( QString error, MsnSocketBase::ErrorType type ); // Displays additional info about network errors void slotErrorEventActivated( NotificationManager::EventSettings settings, NotificationManager::Buttons button ); + // Go online + void goOnline(); - private: // Private methods // Create and return one pointer to address book service AddressBookService *createAddressBookService(); @@ -211,8 +212,6 @@ // Create triple des encryption QByteArray createTripleDes ( const QByteArray key, const QByteArray secret, const QCA::InitializationVector& iv ); - // Go online - void goOnline(); // Received response to adl command void gotAdl( const QStringList& command, const QString &payload = "" ); // Received confirmation of the user's status change @@ -369,6 +368,8 @@ RoamingService *roamingService_; // The pending offline-im messages QStringList pendingOfflineImMessages_; + // Whether the initial status was already sent. See goOnline() + bool initialStatusSent_; signals: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |