From: <da...@us...> - 2009-09-27 14:00:26
|
Revision: 5498 http://kmess.svn.sourceforge.net/kmess/?rev=5498&view=rev Author: dazjorz Date: 2009-09-27 14:00:17 +0000 (Sun, 27 Sep 2009) Log Message: ----------- emoved the addInvitedContact call from MsnSession. Instead, implemented getMsnContact(), and changed Contact, ContactBase and InvitedContact to take an MsnContact pointer in their constructor. Modified Paths: -------------- trunk/kmess/src/chat/chat.cpp trunk/kmess/src/chat/chatwindow.cpp trunk/kmess/src/contact/contact.cpp trunk/kmess/src/contact/contact.h trunk/kmess/src/contact/contactbase.cpp trunk/kmess/src/contact/contactbase.h trunk/kmess/src/contact/invitedcontact.cpp trunk/kmess/src/contact/invitedcontact.h trunk/kmess/src/model/contactlist.cpp trunk/kmess/src/network/msncontact.h trunk/kmess/src/network/msnsession.cpp trunk/kmess/src/network/msnsession.h trunk/kmess/src/notification/chatnotification.cpp Modified: trunk/kmess/src/chat/chat.cpp =================================================================== --- trunk/kmess/src/chat/chat.cpp 2009-09-25 17:45:00 UTC (rev 5497) +++ trunk/kmess/src/chat/chat.cpp 2009-09-27 14:00:17 UTC (rev 5498) @@ -1607,7 +1607,8 @@ ContactBase *contact = globalSession->getContact( handle ); if( contact == 0 ) { - contact = globalSession->addInvitedContact( handle ); +#warning todo + contact = new InvitedContact( globalSession->getMsnContact( handle ) ); } contactsWidget_->contactJoined( contact ); } Modified: trunk/kmess/src/chat/chatwindow.cpp =================================================================== --- trunk/kmess/src/chat/chatwindow.cpp 2009-09-25 17:45:00 UTC (rev 5497) +++ trunk/kmess/src/chat/chatwindow.cpp 2009-09-27 14:00:17 UTC (rev 5498) @@ -2629,7 +2629,8 @@ const ContactBase *contact = globalSession->getContact( handle ); if( contact == 0 ) { - contact = globalSession->addInvitedContact( handle ); +#warning todo + contact = new InvitedContact( globalSession->getMsnContact( handle ) ); } participants += QString( "%1 (%2)<br /><i>%3</i>" ) Modified: trunk/kmess/src/contact/contact.cpp =================================================================== --- trunk/kmess/src/contact/contact.cpp 2009-09-25 17:45:00 UTC (rev 5497) +++ trunk/kmess/src/contact/contact.cpp 2009-09-27 14:00:17 UTC (rev 5498) @@ -31,9 +31,9 @@ // The constructor -Contact::Contact( const QString& handle, const QString& friendlyName, int lists, +Contact::Contact( KMess::MsnContact *msnContact, const QString& friendlyName, int lists, const QStringList& groupIds, const QString& guid ) - : ContactBase(handle, friendlyName), + : ContactBase(msnContact, friendlyName), groupIds_(groupIds), guid_(guid), lastStatus_(KMess::STATUS_OFFLINE), @@ -41,7 +41,7 @@ status_(KMess::STATUS_OFFLINE) { #ifdef KMESSTEST - KMESS_ASSERT( ! handle_.isEmpty() ); + KMESS_ASSERT( ! getHandle().isEmpty() ); KMESS_ASSERT( ! friendlyName_.getOriginal().isEmpty() ); KMESS_ASSERT( lists != 0 ); #endif @@ -79,7 +79,7 @@ } #ifdef KMESSDEBUG_CONTACT - kDebug() << "DESTROYED. [handle=" << handle_ << "]"; + kDebug() << "DESTROYED. [handle=" << getHandle() << "]"; #endif } @@ -91,14 +91,14 @@ // Protect against invalid use, causes problems in KMessView. if( groupId.isEmpty() ) { - kWarning() << "Group-ID is empty (contact=" << handle_ << ")!"; + kWarning() << "Group-ID is empty (contact=" << getHandle() << ")!"; return; } // Check whether contact is already added to the group. if( groupIds_.contains( groupId ) ) { - kWarning() << handle_ << " is already a member of group " << groupId << "."; + kWarning() << getHandle() << " is already a member of group " << groupId << "."; return; } @@ -106,7 +106,7 @@ groupIds_.append( groupId ); #ifdef KMESSDEBUG_CONTACT - kDebug() << "groups of " << handle_ << " are '" << groupIds_.join(",") << "'"; + kDebug() << "groups of " << getHandle() << " are '" << groupIds_.join(",") << "'"; #endif emit changedGroup(this); @@ -345,7 +345,7 @@ void Contact::readProperties( const KConfigGroup &config ) { // Get the configuration group where this contact's data is stored - KConfigGroup contactConfig = config.group( handle_ ); + KConfigGroup contactConfig = config.group( getHandle() ); // Restore cached state of this class capabilities_ = contactConfig.readEntry( "capabilities", 0 ); @@ -367,12 +367,12 @@ { if( groupIds_.removeAll( groupId ) == 0) { - kWarning() << handle_ << " was not registered to group " << groupId << "."; + kWarning() << getHandle() << " was not registered to group " << groupId << "."; return; } #ifdef KMESSDEBUG_CONTACT - kDebug() << "groups of " << handle_ << " are '" << groupIds_.join(",") << "'"; + kDebug() << "groups of " << getHandle() << " are '" << groupIds_.join(",") << "'"; #endif emit changedGroup( this ); @@ -384,7 +384,7 @@ void Contact::saveProperties( KConfigGroup &config ) { // Get the configuration group where this contact's data is stored - KConfigGroup contactConfig = config.group( handle_ ); + KConfigGroup contactConfig = config.group( getHandle() ); // Save state of this class contactConfig.writeEntry( "capabilities", getCapabilities() ); @@ -450,7 +450,7 @@ { if( newName.isEmpty() ) { - kWarning() << "Not setting the friendly name of " << handle_ << " to an empty value (previously: " << friendlyName_.getCleaned() << ")"; + kWarning() << "Not setting the friendly name of " << getHandle() << " to an empty value (previously: " << friendlyName_.getCleaned() << ")"; return; } @@ -529,7 +529,7 @@ status_ = newStatus; #ifdef KMESSDEBUG_CONTACT - kDebug() << "Contact" << handle_ << "changed status from" << MsnStatus::getCode( lastStatus_ ) + kDebug() << "Contact" << getHandle() << "changed status from" << MsnStatus::getCode( lastStatus_ ) << "to" << MsnStatus::getCode( status_ ); #endif Modified: trunk/kmess/src/contact/contact.h =================================================================== --- trunk/kmess/src/contact/contact.h 2009-09-25 17:45:00 UTC (rev 5497) +++ trunk/kmess/src/contact/contact.h 2009-09-27 14:00:17 UTC (rev 5498) @@ -29,6 +29,10 @@ class KConfigGroup; +namespace KMess +{ + class MsnContact; +} /** * @brief Data class for contact information. @@ -67,7 +71,7 @@ public: // Public methods // The constructor - Contact( const QString& handle, const QString& friendlyName, int lists, + Contact( KMess::MsnContact *msnContact, const QString& friendlyName, int lists, const QStringList& groupIds, const QString& guid ); // The destructor virtual ~Contact(); Modified: trunk/kmess/src/contact/contactbase.cpp =================================================================== --- trunk/kmess/src/contact/contactbase.cpp 2009-09-25 17:45:00 UTC (rev 5497) +++ trunk/kmess/src/contact/contactbase.cpp 2009-09-27 14:00:17 UTC (rev 5498) @@ -31,14 +31,14 @@ // The constructor -ContactBase::ContactBase( const QString& handle, const QString& friendlyName, uint capabilities) +ContactBase::ContactBase( KMess::MsnContact *msnContact, const QString& friendlyName, uint capabilities) : capabilities_(capabilities) - , handle_(handle) + , msnContact_(msnContact) { // Use the handle in the rare cases where a friendly name is not available if( friendlyName.isEmpty() ) { - friendlyName_ = handle; + friendlyName_ = getHandle(); } else { @@ -209,7 +209,7 @@ case KMess::MSN_CAP_MSN90beta: msnVersion = 9.0f; suffix = " beta"; break; // default caps 0x963CC03C: case KMess::MSN_CAP_MSN2009: msnVersion = 2009.0f; break; default: - kWarning() << "Unable to parse the WLM version of for the contact" << handle_ << ", msncversion=" << ( clientVersion >> 28 ) << " capabilities=" << capabilities; + kWarning() << "Unable to parse the WLM version of for the contact" << getHandle() << ", msncversion=" << ( clientVersion >> 28 ) << " capabilities=" << capabilities; msnVersion = 9999999; } @@ -468,7 +468,7 @@ // Return the contact's handle const QString& ContactBase::getHandle() const { - return handle_; + return msnContact_->id(); } @@ -592,7 +592,7 @@ if( chatSessions_.isEmpty() ) { #ifdef KMESSDEBUG_CONTACTBASE - kDebug() << handle_ << " is no longer in any other chat conversation, cleaning up."; + kDebug() << getHandle() << " is no longer in any other chat conversation, cleaning up."; #endif // This will be used by MsnSession to clean up temporary InvitedContact objects. @@ -614,7 +614,7 @@ if( clientChanged && capabilities > 0 ) { #ifdef KMESSDEBUG_CONTACTBASE - kDebug() << "capabilities of" << handle_ << "changed from" << capabilities_ << "to" << capabilities << ", resetting detected app name."; + kDebug() << "capabilities of" << getHandle() << "changed from" << capabilities_ << "to" << capabilities << ", resetting detected app name."; #endif clientName_.clear(); Modified: trunk/kmess/src/contact/contactbase.h =================================================================== --- trunk/kmess/src/contact/contactbase.h 2009-09-25 17:45:00 UTC (rev 5497) +++ trunk/kmess/src/contact/contactbase.h 2009-09-27 14:00:17 UTC (rev 5498) @@ -19,6 +19,7 @@ #define CONTACTBASE_H #include "../network/networkglobals.h" +#include "../network/msncontact.h" #include "../utils/richtextparser.h" #include "msnstatus.h" @@ -45,7 +46,15 @@ * The ApplicationList contains all application invitations started with the contact. * These classes are controlled from the ChatMaster class. * + * On network library migration: + * For now, every ContactBase will carry with it an MsnContact object. + * MsnContact will slowly start to replace ContactBase (the polymorphism isn't + * needed anymore now that MsnContact does InvitedContact too). Once ContactBase + * has no use anymore, it will be removed and Contact will be the one that + * carries a MsnContact object. + * * @author Mike K. Bennett + * @author Sjors Gielen * @ingroup Contact */ class ContactBase : public QObject @@ -110,7 +119,7 @@ protected: // Protected methods // The constructor - ContactBase( const QString& handle, const QString& friendlyName, uint capabilities = 0); + ContactBase( KMess::MsnContact *msnContact, const QString& friendlyName, uint capabilities = 0); // Set the full name of the client used by the contact const QString & getClientFullName() const; // Save the simple name of the client used by the contact @@ -119,6 +128,11 @@ protected: // Protected attributes + /** + * MsnContact instance. Until this class is obsolete, more and more + * information will be read from this object. + */ + KMess::MsnContact *msnContact_; // The capabilities of the client uint capabilities_; // The name of the client application @@ -135,8 +149,6 @@ QRegExp emoticonRegExp_; // The contact's friendly name FormattedString friendlyName_; - // The contact's handle - QString handle_; // The pending custom emoticons for the contact. QHash<QString,QString> pendingEmoticons_; // The regexp for pending custom emoticons Modified: trunk/kmess/src/contact/invitedcontact.cpp =================================================================== --- trunk/kmess/src/contact/invitedcontact.cpp 2009-09-25 17:45:00 UTC (rev 5497) +++ trunk/kmess/src/contact/invitedcontact.cpp 2009-09-27 14:00:17 UTC (rev 5498) @@ -22,8 +22,8 @@ // The constructor -InvitedContact::InvitedContact( const QString &handle, const QString &friendlyName, uint capabilities) - : ContactBase(handle, friendlyName, capabilities) +InvitedContact::InvitedContact( KMess::MsnContact *msnContact, const QString &friendlyName, uint capabilities) + : ContactBase(msnContact, friendlyName, capabilities) { detectClientName( capabilities, 0 ); } Modified: trunk/kmess/src/contact/invitedcontact.h =================================================================== --- trunk/kmess/src/contact/invitedcontact.h 2009-09-25 17:45:00 UTC (rev 5497) +++ trunk/kmess/src/contact/invitedcontact.h 2009-09-27 14:00:17 UTC (rev 5498) @@ -20,8 +20,11 @@ #include "../contact/contactbase.h" +namespace KMess +{ + class MsnContact; +} - /** * @brief Data class for contacts that are not in your MSN ContactList. * @@ -29,6 +32,10 @@ * This occurs when someone invites one of their contacts in the chat. * If your privacy settings allow this, contacts can always start a chat with you (even if they're not on your AL/BL/FL/RL lists). * + * This class is scheduled to be removed after MsnContact gained all + * functionality of ContactBase. Invited / unknown contacts will then simply be + * MsnContacts, maybe with a simple flag set. + * * @author Mike K. Bennett * @ingroup Contact */ @@ -38,7 +45,7 @@ public: // The constructor - InvitedContact( const QString &handle, const QString &friendlyName = QString(), uint capabilities = 0 ); + InvitedContact( KMess::MsnContact *contact, const QString &friendlyName = QString(), uint capabilities = 0 ); // The destructor virtual ~InvitedContact(); // Return the path to the contact's picture Modified: trunk/kmess/src/model/contactlist.cpp =================================================================== --- trunk/kmess/src/model/contactlist.cpp 2009-09-25 17:45:00 UTC (rev 5497) +++ trunk/kmess/src/model/contactlist.cpp 2009-09-27 14:00:17 UTC (rev 5498) @@ -93,7 +93,7 @@ #endif // Create the new contact - contact = new Contact( handle, friendlyName, lists, groupIds, guid ); + contact = new Contact( globalSession->getMsnContact( handle ), friendlyName, lists, groupIds, guid ); contacts_.insert( handle, contact ); // Add the contact to the special groups Modified: trunk/kmess/src/network/msncontact.h =================================================================== --- trunk/kmess/src/network/msncontact.h 2009-09-25 17:45:00 UTC (rev 5497) +++ trunk/kmess/src/network/msncontact.h 2009-09-27 14:00:17 UTC (rev 5498) @@ -25,6 +25,7 @@ class KMessTest; namespace KMess { + class MsnSession; @@ -46,6 +47,7 @@ #warning TODO remove: friend class ::KMessTest; + friend class MsnSession; public: // Public methods const QString& email() const; Modified: trunk/kmess/src/network/msnsession.cpp =================================================================== --- trunk/kmess/src/network/msnsession.cpp 2009-09-25 17:45:00 UTC (rev 5497) +++ trunk/kmess/src/network/msnsession.cpp 2009-09-27 14:00:17 UTC (rev 5498) @@ -22,13 +22,13 @@ #warning todo remove: #include "../contact/contact.h" -#include "../contact/invitedcontact.h" #include "../contact/msnobject.h" #include "../model/contactlist.h" #include "connections/msnnotificationconnection.h" #include "utils/msnalgorithms.h" #include "chatfactory.h" +#include "msncontact.h" #include "networkglobals.h" #include "libkmessdebug.h" @@ -197,9 +197,10 @@ // Delete the chatfactory. delete chatFactory_; - // Delete all remaining invited contacts - qDeleteAll( invitedContacts_ ); - invitedContacts_.clear(); + // Delete all remaining contacts +#warning todo + //qDeleteAll( msnContacts_.values() ); + msnContacts_.clear(); delete msnObject_; delete msnNotificationConnection_; @@ -212,39 +213,6 @@ -// Add an unknown contact to the invited contact list -InvitedContact * MsnSession::addInvitedContact( const QString &handle, const QString &friendlyName, const uint capabilities ) -{ - if( handle.isEmpty() ) - { - kWarning() << "Attempted to add invited contact with empty handle"; - return 0; - } - -#ifdef KMESSDEBUG_MSNSESSION - kDebug() << "Adding invited contact: " << handle; -#endif - - if( hasContactInList( handle ) ) - { - kWarning() << "attempted to add contact " << handle << " twice."; - return 0; - } - - // Create the contact - InvitedContact *contact = new InvitedContact( handle, friendlyName, capabilities ); - invitedContacts_.append( contact ); - - // Connect signals - // Remove the contact when it left all chats - connect( contact, SIGNAL( leftAllChats(ContactBase*) ), - this, SLOT ( slotInvitedContactLeftAllChats(ContactBase*) )); - - return contact; -} - - - /** * Return the application master. This is a function for internal use. */ @@ -619,6 +587,7 @@ // Return a contact by handle +#warning TODO remove getContact() ContactBase * MsnSession::getContact( const QString &handle ) const { // Return value can't be const, some objects (like ContactFrame) @@ -637,6 +606,7 @@ // Next, see if the contact was invited to a chat if( contact == 0 ) { +#if 0 foreach( InvitedContact *invitedContact, invitedContacts_ ) { if( invitedContact->getHandle() == handle ) @@ -644,6 +614,7 @@ return invitedContact; } } +#endif } return contact; @@ -722,12 +693,25 @@ /** - * Retrieve a MsnContact object through this session + * @brief Retrieve a MsnContact object through this session. + * + * The list of MsnContacts is checked. If this handle does not exist + * in the list yet, a new MsnContact is created and stored. + * + * @param handle The handle of the new contact. */ KMess::MsnContact *MsnSession::getMsnContact( const QString &handle ) const { -#warning TODO write! - return 0; + if( msnContacts_.contains( handle.toLower() ) ) + { + return msnContacts_[ handle.toLower() ]; + } + + KMess::MsnContact *contact = new KMess::MsnContact( handle ); +#warning todo + //msnContacts_[ handle.toLower() ] = contact; + + return contact; } @@ -1102,31 +1086,6 @@ -// An invited contact left all chats -void MsnSession::slotInvitedContactLeftAllChats( ContactBase *contact ) -{ - if( KMESS_NULL(contact) ) - { - kWarning() << "Contact pointer is null"; - return; - } -#ifdef KMESSDEBUG_MSNSESSION - kDebug() << "invited contact " << contact->getHandle() << " left all chats, delete contact."; -#endif - - // Remove from list - bool removed = invitedContacts_.removeAll( static_cast<InvitedContact*>( contact ) ) > 0; - if( ! removed ) - { - kWarning() << "could not remove invited contact '" << contact->getHandle() << "' from the list!"; - } - - // Delete after all slots are processed - contact->deleteLater(); -} - - - /** * Update the MsnObject with the current display picture. * Modified: trunk/kmess/src/network/msnsession.h =================================================================== --- trunk/kmess/src/network/msnsession.h 2009-09-25 17:45:00 UTC (rev 5497) +++ trunk/kmess/src/network/msnsession.h 2009-09-27 14:00:17 UTC (rev 5498) @@ -51,7 +51,6 @@ class Chat; class ChatMessage; class ContactBase; -class InvitedContact; class KMessTest; class ContactList; class MsnObject; @@ -97,8 +96,6 @@ MsnSession(); // The destructor virtual ~MsnSession(); - // Add an unknown contact to the invited contact list - InvitedContact * addInvitedContact( const QString &handle, const QString &friendlyName = QString(), const uint capabilities = 0 ); // Generate a token to log in to Hotmail const QString createHotmailToken( const QString &folder ) const; // Return a contact by handle @@ -208,8 +205,6 @@ void updateMsnObject( ); private slots: // Private slots - // An invited contact left all chats - void slotInvitedContactLeftAllChats( ContactBase *contactBase ); private: // Private attributes // The account's contact list @@ -219,7 +214,7 @@ // The library ApplicationMaster ApplicationMaster *applicationMaster_; // The list of invited contacts, not part of the MSN ContactList of the user - QList<InvitedContact*> invitedContacts_; + QHash<QString,KMess::MsnContact*> msnContacts_; // The connection to the msn notification server MsnNotificationConnection *msnNotificationConnection_; // MsnObject representing our display picture if we have one Modified: trunk/kmess/src/notification/chatnotification.cpp =================================================================== --- trunk/kmess/src/notification/chatnotification.cpp 2009-09-25 17:45:00 UTC (rev 5497) +++ trunk/kmess/src/notification/chatnotification.cpp 2009-09-27 14:00:17 UTC (rev 5498) @@ -143,7 +143,8 @@ // When the contact doesn't exist, only use the handle if( contact == 0 ) { - contact = globalSession->addInvitedContact( handle ); +#warning todo + contact = new InvitedContact( globalSession->getMsnContact( handle ) ); } const QString& friendlyName( contact->getFriendlyName( STRING_LIST_SETTING_ESCAPED ) ); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |