From b60771a212eb6bafa13f80cd78b56e792c2ea2fa Mon Sep 17 00:00:00 2001 From: Zack Rusin Date: Wed, 8 Jan 2003 07:47:32 +0000 Subject: [PATCH] First portion of the new address picker changes. (I'll cleanup this class sometime this week) svn path=/trunk/kdenetwork/kmail/; revision=198168 --- kmrecentaddr.cpp | 54 +++++++++++++++++++++++++++++++++++++++++------- kmrecentaddr.h | 8 ++++--- 2 files changed, 51 insertions(+), 11 deletions(-) diff --git a/kmrecentaddr.cpp b/kmrecentaddr.cpp index 4041913f2..08e4bfe4e 100644 --- a/kmrecentaddr.cpp +++ b/kmrecentaddr.cpp @@ -1,6 +1,7 @@ #include #include +#include #include "kmrecentaddr.h" KMRecentAddresses * KMRecentAddresses::s_self = 0; @@ -25,10 +26,23 @@ KMRecentAddresses::~KMRecentAddresses() void KMRecentAddresses::load( KConfig *config ) { - m_addresses.clear(); + QStringList addresses; + QString name; + QString email; + + m_addresseeList.clear(); KConfigGroupSaver cs( config, "General" ); m_maxCount = config->readNumEntry( "Maximum Recent Addresses", 40 ); - m_addresses = config->readListEntry( "Recent Addresses" ); + addresses = config->readListEntry( "Recent Addresses" ); + for ( QStringList::Iterator it = addresses.begin(); it != addresses.end(); ++it ) { + KABC::Addressee::parseEmailAddress( *it, name, email ); + if ( !email.isEmpty() ) { + KABC::Addressee addr; + addr.setNameFromString( name ); + addr.insertEmail( email, true ); + m_addresseeList.append( addr ); + } + } adjustSize(); } @@ -36,14 +50,27 @@ void KMRecentAddresses::load( KConfig *config ) void KMRecentAddresses::save( KConfig *config ) { KConfigGroupSaver cs( config, "General" ); - config->writeEntry( "Recent Addresses", m_addresses ); + config->writeEntry( "Recent Addresses", addresses() ); } void KMRecentAddresses::add( const QString& entry ) { - if ( !entry.isEmpty() && m_maxCount > 0 && m_addresses.first() != entry ) { - m_addresses.remove( entry ); // removes all existing "entry" items - m_addresses.prepend( entry ); + if ( !entry.isEmpty() && m_maxCount > 0 ) { + QString email; + QString fullName; + KABC::Addressee addr; + + KABC::Addressee::parseEmailAddress( entry, fullName, email ); + + for ( KABC::Addressee::List::Iterator it = m_addresseeList.begin(); + it != m_addresseeList.end(); ++it ) + { + if ( email == (*it).preferredEmail() ) + return;//already inside + } + addr.setNameFromString( fullName ); + addr.insertEmail( email, true ); + m_addresseeList.prepend( addr ); adjustSize(); } } @@ -56,6 +83,17 @@ void KMRecentAddresses::setMaxCount( int count ) void KMRecentAddresses::adjustSize() { - while ( m_addresses.count() > m_maxCount ) - m_addresses.remove( m_addresses.fromLast() ); + while ( m_addresseeList.count() > m_maxCount ) + m_addresseeList.remove( m_addresseeList.fromLast() ); +} + +QStringList KMRecentAddresses::addresses() const +{ + QStringList addresses; + for ( KABC::Addressee::List::ConstIterator it = m_addresseeList.begin(); + it != m_addresseeList.end(); ++it ) + { + addresses.append( (*it).fullEmail() ); + } + return addresses; } diff --git a/kmrecentaddr.h b/kmrecentaddr.h index 5ac6a815d..3825132b9 100644 --- a/kmrecentaddr.h +++ b/kmrecentaddr.h @@ -2,6 +2,7 @@ #define KMRECENTADDR_H #include +#include class KConfig; @@ -27,7 +28,8 @@ public: * Note: an entry doesn't have to be one email address, it can be multiple, * like "Foo , Bar Baz ". */ - QStringList addresses() const { return m_addresses; } + QStringList addresses() const; + const KABC::Addressee::List& kabcAddresses() const { return m_addresseeList; } /** * Adds an entry to the list. @@ -63,13 +65,13 @@ private: KMRecentAddresses(); ~KMRecentAddresses(); + KABC::Addressee::List m_addresseeList; + void adjustSize(); uint m_maxCount; - QStringList m_addresses; static KMRecentAddresses *s_self; - }; #endif // KMRECENTADDR_H