From: <it_...@us...> - 2009-02-25 23:25:11
|
Revision: 4190 http://kmess.svn.sourceforge.net/kmess/?rev=4190&view=rev Author: it_amroth Date: 2009-02-25 23:25:09 +0000 (Wed, 25 Feb 2009) Log Message: ----------- Fixed logging in with new, empty, accounts. Modified Paths: -------------- trunk/kmess/ChangeLog trunk/kmess/src/network/msnnotificationconnection.cpp trunk/kmess/src/network/soap/addressbookservice.cpp trunk/kmess/src/network/soap/addressbookservice.h Modified: trunk/kmess/ChangeLog =================================================================== --- trunk/kmess/ChangeLog 2009-02-25 13:38:34 UTC (rev 4189) +++ trunk/kmess/ChangeLog 2009-02-25 23:25:09 UTC (rev 4190) @@ -1,4 +1,7 @@ +2009-02-26 (Valerio) + * Fixed logging in with new, empty, accounts. + 2009-02-25 (Valerio) * Improved and merged a patch by Dario Freddi, continuing the work on the Chat Browser: - Improved the UI. Modified: trunk/kmess/src/network/msnnotificationconnection.cpp =================================================================== --- trunk/kmess/src/network/msnnotificationconnection.cpp 2009-02-25 13:38:34 UTC (rev 4189) +++ trunk/kmess/src/network/msnnotificationconnection.cpp 2009-02-25 23:25:09 UTC (rev 4190) @@ -692,8 +692,6 @@ connect( addressBookService_, SIGNAL( gotPersonalInformation(const QString&,const QString&,int) ), this, SLOT( changePersonalProperties(const QString&,const QString&,int) ) ); - connect( addressBookService_, SIGNAL( parseListCompleted() ), - this, SLOT ( slotParseListCompleted() ) ); connect( addressBookService_, SIGNAL( soapWarning(const QString&,bool) ), this, SLOT ( slotWarning(const QString&,bool) ) ); } @@ -1579,6 +1577,13 @@ bool send = false; int userType = 1; + // If the list is empty, send an empty ADL + if( ! i.hasNext() ) + { + sendPayloadMessage( "ADL", QString(), QByteArray( "<ml l=\"1\"></ml>" ) ); + return; + } + while( i.hasNext() ) { i.next(); Modified: trunk/kmess/src/network/soap/addressbookservice.cpp =================================================================== --- trunk/kmess/src/network/soap/addressbookservice.cpp 2009-02-25 13:38:34 UTC (rev 4189) +++ trunk/kmess/src/network/soap/addressbookservice.cpp 2009-02-25 23:25:09 UTC (rev 4190) @@ -20,13 +20,18 @@ #include "../../contact/contact.h" #include "../../utils/kmessshared.h" #include "../../utils/xmlfunctions.h" +#include "../../currentaccount.h" #include "../../kmessdebug.h" #include "soapmessage.h" #include <KLocale> +#ifdef KMESSDEBUG_HTTPSOAPCONNECTION + #define KMESSDEBUG_ADDRESSBOOKSERVICE +#endif + /** * @brief The constructor */ @@ -174,6 +179,32 @@ /** + * @brief Request creation of a new address book. + * + * Newly created accounts have no address book. This method + * requests the creation of a new one. + */ +void AddressBookService::createAddressBook() +{ + setEndpoint( "https://omega.contacts.msn.com/abservice/abservice.asmx" ); + + QString body( "<ABAdd xmlns=\"http://www.msn.com/webservices/AddressBook\">\n" + " <abInfo>\n" + " <name/>\n" + " <ownerPuid>0</ownerPuid>\n" + " <ownerEmail>" + CurrentAccount::instance()->getHandle() + "</ownerEmail>\n" + " <fDefault>true</fDefault>\n" + " </abInfo>\n" + "</ABAdd>" ); + + sendRequest( new SoapMessage( "http://www.msn.com/webservices/AddressBook/ABAdd", + createCommonHeader(), + body ) ); +} + + + +/** * @brief Create the common header for the soap requests. * * @param token the token for authenticate on the address book services @@ -493,6 +524,22 @@ email ), true /* isImportant */ ); } + // We messed up something in the header. Our bad, sorry! + else if( errorCode == "InvalidApplicationHeader" ) + { + emit soapError( i18nc( "Error message (system-generated description)", + "Invalid web service request (%1)", message->getFaultDescription() ), + MsnSocketBase::ERROR_INTERNAL ); + } + // This is a new account which doesn't have an address book. Create one + else if( errorCode == "ABDoesNotExist" ) + { +#ifdef KMESSDEBUG_ADDRESSBOOKSERVICE + kDebug() << "Address book does not exist: creating new one."; +#endif + createAddressBook(); + return; + } #ifdef KMESSDEBUG_HTTPSOAPCONNECTION else { @@ -585,6 +632,11 @@ } else if( ! body.firstChildElement( "ABFindAllResponse" ).isNull() ) { +#ifdef KMESSDEBUG_ADDRESSBOOKSERVICE + kDebug() << "Parsing address book."; + + int debugGroupCount = 0; +#endif // Parse the adress book lists // First parse the one containing the groups const QDomNodeList& groups( body.elementsByTagName( "Group" ) ); @@ -598,6 +650,9 @@ if( ! groupId.isEmpty() && ! name.isEmpty() ) { +#ifdef KMESSDEBUG_ADDRESSBOOKSERVICE + ++debugGroupCount; +#endif emit gotGroup( groupId, name ); } } @@ -702,6 +757,10 @@ contacts.append( contactInformations ); } +#ifdef KMESSDEBUG_ADDRESSBOOKSERVICE + kDebug() << "Address book successfully parsed: found" << contacts.count() << "contacts and" << debugGroupCount << "groups."; +#endif + // Signal that the of address book has been parsed emit gotAddressBookList( contacts ); return; @@ -716,6 +775,15 @@ // Contact removed from Membership list from selected Role return; } + else if( ! body.firstChildElement( "ABAddResponse" ).isNull() ) + { + // New address book was created: proceed with it +#ifdef KMESSDEBUG_ADDRESSBOOKSERVICE + kDebug() << "Address book successfully created: retrying to obtain membership lists."; +#endif + retrieveMembershipLists(); + return; + } // Get the message's data MessageData data( message->getData() ); Modified: trunk/kmess/src/network/soap/addressbookservice.h =================================================================== --- trunk/kmess/src/network/soap/addressbookservice.h 2009-02-25 13:38:34 UTC (rev 4189) +++ trunk/kmess/src/network/soap/addressbookservice.h 2009-02-25 23:25:09 UTC (rev 4190) @@ -78,6 +78,8 @@ void unblockContact( const QString &handle ); private: // private methods + // Request creation of a new address book (for new accounts) + void createAddressBook(); // Create the common header for the soap requests QString createCommonHeader( const QString partnerScenario = "Initial" ); // Parse a SOAP error message. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |