-rw-r--r-- | kabc/addressee.cpp | 67 | ||||
-rw-r--r-- | kabc/phonenumber.cpp | 22 | ||||
-rw-r--r-- | kabc/phonenumber.h | 1 |
3 files changed, 53 insertions, 37 deletions
diff --git a/kabc/addressee.cpp b/kabc/addressee.cpp index cb10160..2aca559 100644 --- a/kabc/addressee.cpp +++ b/kabc/addressee.cpp @@ -306,10 +306,11 @@ void Addressee::mergeContact( const Addressee& ad , bool isSubSet) // = false) 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 ( (*it) == ( *phoneItAD ) ) { + if ( ( *phoneItAD ).contains( (*it) ) ) { found = true; + (*it).setType( ( *phoneItAD ).type() ); break; } } if ( ! found ) @@ -357,50 +358,42 @@ void Addressee::mergeContact( const Addressee& ad , bool isSubSet) // = false) if ( mData->agent.url().isEmpty() ) { mData->agent = ad.mData->agent; } } + { + Key::List::Iterator itA; + for( itA = ad.mData->keys.begin(); itA != ad.mData->keys.end(); ++itA ) { + bool found = false; + Key::List::Iterator it; + for( it = mData->keys.begin(); it != mData->keys.end(); ++it ) { + if ( (*it) == (*itA)) { + found = true; + break; -#if 0 - - if ( mData->url.isValid() ) - if ( ! mData->url.path().isEmpty()) l.append( mData->url.path() ); - KABC::PhoneNumber::List phoneNumbers; - KABC::PhoneNumber::List::Iterator phoneIter; - - QStringList t; - for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end(); - ++phoneIter ) - t.append( ( *phoneIter ).number()+QString::number( ( *phoneIter ).type() ) ); - t.sort(); - uint iii; - for ( iii = 0; iii < t.count(); ++iii) - l.append( t[iii] ); - t = mData->emails; - t.sort(); - for ( iii = 0; iii < t.count(); ++iii) - l.append( t[iii] ); - t = mData->categories; - t.sort(); - for ( iii = 0; iii < t.count(); ++iii) - l.append( t[iii] ); - t = mData->custom; - t.sort(); - for ( iii = 0; iii < t.count(); ++iii) - l.append( t[iii] ); + } + } + if ( ! found ) { + mData->keys.append( *itA ); + } + } + } + KABC::Address::List::Iterator addressIterA; + for ( addressIterA = ad.mData->addresses.begin(); addressIterA != ad.mData->addresses.end(); ++addressIterA ) { + bool found = false; KABC::Address::List::Iterator addressIter; for ( addressIter = mData->addresses.begin(); addressIter != mData->addresses.end(); ++addressIter ) { - t = (*addressIter).asList(); - t.sort(); - for ( iii = 0; iii < t.count(); ++iii) - l.append( t[iii] ); + if ( (*addressIter) == (*addressIterA)) { + found = true; + (*addressIter).setType( (*addressIterA).type() ); + break; } -#endif - - // pending: - // merging addresses - // merging keys + } + if ( ! found ) { + mData->addresses.append( *addressIterA ); + } + } //qDebug("merge contact %s ", ad.uid().latin1()); setUid( ad.uid() ); setRevision( ad.revision() ); } diff --git a/kabc/phonenumber.cpp b/kabc/phonenumber.cpp index d7e3925..3d82553 100644 --- a/kabc/phonenumber.cpp +++ b/kabc/phonenumber.cpp @@ -86,8 +86,30 @@ void PhoneNumber::simplifyType() else if ( mType & Work ) mType = Work ; else if ( mType & Home ) mType = Home; else mType = Pref; } +bool PhoneNumber::contains( const PhoneNumber &p ) +{ + QString Number; + QString Num; + uint i; + Number = mNumber.stripWhiteSpace (); + Num = ""; + for ( i = 0; i < Number.length(); ++i) { + if ( Number.at(i).isDigit() || Number.at(i) == '+'|| Number.at(i) == '*'|| Number.at(i) == '#' ) + Num += Number.at(i); + } + QString NumberR; + QString NumR; + NumberR = p.mNumber.stripWhiteSpace (); + NumR = ""; + for ( i = 0; i < NumberR.length(); ++i) { + if ( NumberR.at(i).isDigit() || NumberR.at(i) == '+'|| NumberR.at(i) == '*'|| NumberR.at(i) == '#' ) + NumR += NumberR.at(i); + } + return (Num == NumR); +} + void PhoneNumber::setId( const QString &id ) { mId = id; } diff --git a/kabc/phonenumber.h b/kabc/phonenumber.h index 410a52f..2d4d3e0 100644 --- a/kabc/phonenumber.h +++ b/kabc/phonenumber.h @@ -91,8 +91,9 @@ class PhoneNumber bool operator==( const PhoneNumber & ) const; bool operator!=( const PhoneNumber & ) const; + bool contains( const PhoneNumber &p ); /** Sets the unique identifier. */ void setId( const QString &id ); |