summaryrefslogtreecommitdiffabout
Side-by-side diff
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--kabc/addressee.cpp67
-rw-r--r--kabc/phonenumber.cpp22
-rw-r--r--kabc/phonenumber.h1
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 );