-rw-r--r-- | kabc/addressbook.cpp | 8 | ||||
-rw-r--r-- | kabc/addressbook.h | 4 | ||||
-rw-r--r-- | kabc/addressee.cpp | 82 | ||||
-rw-r--r-- | kabc/addressee.h | 2 | ||||
-rw-r--r-- | kaddressbook/kabcore.cpp | 6 |
5 files changed, 68 insertions, 34 deletions
diff --git a/kabc/addressbook.cpp b/kabc/addressbook.cpp index 19c26eb..8882259 100644 --- a/kabc/addressbook.cpp +++ b/kabc/addressbook.cpp @@ -864,5 +864,5 @@ Addressee AddressBook::findByUid( const QString &uid ) return Addressee(); } -void AddressBook::preExternSync( AddressBook* aBook, const QString& csd ) +void AddressBook::preExternSync( AddressBook* aBook, const QString& csd , bool isSubset ) { //qDebug("AddressBook::preExternSync "); @@ -872,5 +872,5 @@ void AddressBook::preExternSync( AddressBook* aBook, const QString& csd ) (*it).computeCsum( csd ); } - mergeAB( aBook ,csd ); + mergeAB( aBook ,csd, isSubset ); } void AddressBook::postExternSync( AddressBook* aBook , const QString& csd) @@ -914,5 +914,5 @@ Addressee AddressBook::findByExternUid( const QString& uid , const QString& pr return Addressee(); } -void AddressBook::mergeAB( AddressBook *aBook, const QString& profile ) +void AddressBook::mergeAB( AddressBook *aBook, const QString& profile , bool isSubset ) { Iterator it; @@ -921,5 +921,5 @@ void AddressBook::mergeAB( AddressBook *aBook, const QString& profile ) ad = aBook->findByExternUid( (*it).externalUID(), profile ); if ( !ad.isEmpty() ) { - (*it).mergeContact( ad ); + (*it).mergeContact( ad ,isSubset); } } diff --git a/kabc/addressbook.h b/kabc/addressbook.h index df9048b..a6bf451 100644 --- a/kabc/addressbook.h +++ b/kabc/addressbook.h @@ -302,9 +302,9 @@ class AddressBook : public QObject QStringList uidList(); void removeSyncAddressees( bool removeDeleted = false ); - void mergeAB( AddressBook *aBook, const QString& profile ); + void mergeAB( AddressBook *aBook, const QString& profile, bool isSubset ); Addressee findByExternUid( const QString& uid , const QString& profile ); bool containsExternalUid( const QString& uid ); - void preExternSync( AddressBook* aBook, const QString& csd ); + void preExternSync( AddressBook* aBook, const QString& csd, bool isSubset ); void postExternSync( AddressBook* aBook, const QString& csd ); signals: diff --git a/kabc/addressee.cpp b/kabc/addressee.cpp index 2aca559..295ee4f 100644 --- a/kabc/addressee.cpp +++ b/kabc/addressee.cpp @@ -300,21 +300,22 @@ void Addressee::mergeContact( const Addressee& ad , bool isSubSet) // = false) QStringList tAD; uint iii; - if ( isSubSet ) { - // ********** phone numbers - PhoneNumber::List phoneAD = ad.phoneNumbers(); - PhoneNumber::List::Iterator phoneItAD; - for ( phoneItAD = phoneAD.begin(); phoneItAD != phoneAD.end(); ++phoneItAD ) { - bool found = false; - PhoneNumber::List::Iterator it; - for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) { - if ( ( *phoneItAD ).contains( (*it) ) ) { - found = true; - (*it).setType( ( *phoneItAD ).type() ); - break; - } + + // ********** phone numbers + PhoneNumber::List phoneAD = ad.phoneNumbers(); + PhoneNumber::List::Iterator phoneItAD; + for ( phoneItAD = phoneAD.begin(); phoneItAD != phoneAD.end(); ++phoneItAD ) { + bool found = false; + PhoneNumber::List::Iterator it; + for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) { + if ( ( *phoneItAD ).contains( (*it) ) ) { + found = true; + (*it).setType( ( *phoneItAD ).type() ); + break; } - if ( ! found ) - mData->phoneNumbers.append( *phoneItAD ); } + if ( isSubSet && ! found ) + mData->phoneNumbers.append( *phoneItAD ); + } + if ( isSubSet ) { // ************* emails; t = mData->emails; @@ -323,14 +324,12 @@ void Addressee::mergeContact( const Addressee& ad , bool isSubSet) // = false) if ( !t.contains(tAD[iii] ) ) mData->emails.append( tAD[iii] ); - // ************* categories; - t = mData->categories; - tAD = ad.mData->categories; - for ( iii = 0; iii < tAD.count(); ++iii) - if ( !t.contains(tAD[iii] ) ) - mData->categories.append( tAD[iii] ); - - } + // ************* categories; + t = mData->categories; + tAD = ad.mData->categories; + for ( iii = 0; iii < tAD.count(); ++iii) + if ( !t.contains(tAD[iii] ) ) + mData->categories.append( tAD[iii] ); QStringList::ConstIterator it; for( it = ad.mData->custom.begin(); it != ad.mData->custom.end(); ++it ) { @@ -390,5 +389,5 @@ void Addressee::mergeContact( const Addressee& ad , bool isSubSet) // = false) } - if ( ! found ) { + if ( isSubSet && ! found ) { mData->addresses.append( *addressIterA ); } @@ -479,6 +478,41 @@ void Addressee::simplifyEmails() void Addressee::simplifyPhoneNumbers() { + int max = 4; + int inList = mData->phoneNumbers.count(); KABC::PhoneNumber::List removeNumbers; KABC::PhoneNumber::List::Iterator phoneIter; + if ( inList > max ) { + // delete non-preferred numbers + for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end(); + ++phoneIter ) { + if ( inList > max ) { + if ( ! (( *phoneIter ).type() & PhoneNumber::Pref )) { + removeNumbers.append( ( *phoneIter ) ); + --inList; + } + } else + break; + } + for ( phoneIter = removeNumbers.begin(); phoneIter != removeNumbers.end(); + ++phoneIter ) { + removePhoneNumber(( *phoneIter )); + } + // delete preferred numbers + if ( inList > max ) { + for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end(); + ++phoneIter ) { + if ( inList > max ) { + removeNumbers.append( ( *phoneIter ) ); + --inList; + } else + break; + } + for ( phoneIter = removeNumbers.begin(); phoneIter != removeNumbers.end(); + ++phoneIter ) { + removePhoneNumber(( *phoneIter )); + } + } + } + // remove non-numeric characters for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end(); ++phoneIter ) { diff --git a/kabc/addressee.h b/kabc/addressee.h index e7900c6..2c81c1a 100644 --- a/kabc/addressee.h +++ b/kabc/addressee.h @@ -117,5 +117,5 @@ class Addressee void setOriginalExternalUID( const QString &id ); QString originalExternalUID() const; - void mergeContact( const Addressee& ad, bool isSubSet = false ); + void mergeContact( const Addressee& ad, bool isSubSet ); void simplifyEmails(); void simplifyAddresses(); diff --git a/kaddressbook/kabcore.cpp b/kaddressbook/kabcore.cpp index 205dbc8..ea34be2 100644 --- a/kaddressbook/kabcore.cpp +++ b/kaddressbook/kabcore.cpp @@ -2733,5 +2733,5 @@ bool KABCore::sync(KSyncManager* manager, QString filename, int mode) mGlobalSyncMode = SYNC_MODE_EXTERNAL; isXML = true; - abLocal.preExternSync( mAddressBook ,mCurrentSyncDevice ); + abLocal.preExternSync( mAddressBook ,mCurrentSyncDevice, true ); } else { external = !manager->mIsKapiFile; @@ -2788,5 +2788,5 @@ bool KABCore::syncExternal(KSyncManager* manager, QString resource) qDebug("AB sharp loaded ,sync device %s",mCurrentSyncDevice.latin1()); mGlobalSyncMode = SYNC_MODE_EXTERNAL; - abLocal.preExternSync( mAddressBook ,mCurrentSyncDevice ); + abLocal.preExternSync( mAddressBook ,mCurrentSyncDevice, false ); syncOK = synchronizeAddressbooks( mAddressBook, &abLocal, syncManager->mSyncAlgoPrefs ); if ( syncOK ) { @@ -2830,5 +2830,5 @@ bool KABCore::syncPhone() mGlobalSyncMode = SYNC_MODE_EXTERNAL; abLocal.preparePhoneSync( mCurrentSyncDevice, true ); - abLocal.preExternSync( mAddressBook ,mCurrentSyncDevice ); + abLocal.preExternSync( mAddressBook ,mCurrentSyncDevice, true ); syncOK = synchronizeAddressbooks( mAddressBook, &abLocal, syncManager->mSyncAlgoPrefs ); if ( syncOK ) { |