summaryrefslogtreecommitdiffabout
path: root/kabc
authorzautrix <zautrix>2004-10-13 13:18:51 (UTC)
committer zautrix <zautrix>2004-10-13 13:18:51 (UTC)
commitd41893fb0a49fbb080326a4c1fd98e1a032a182a (patch) (side-by-side diff)
tree9b95603ff93801accaa94de4b73d88ea9c5c9386 /kabc
parentefdd0735bda81dcd82dfb6d6dc0d0c143f249336 (diff)
downloadkdepimpi-d41893fb0a49fbb080326a4c1fd98e1a032a182a.zip
kdepimpi-d41893fb0a49fbb080326a4c1fd98e1a032a182a.tar.gz
kdepimpi-d41893fb0a49fbb080326a4c1fd98e1a032a182a.tar.bz2
merge contact fixes
Diffstat (limited to 'kabc') (more/less context) (show whitespace changes)
-rw-r--r--kabc/addressbook.cpp8
-rw-r--r--kabc/addressbook.h4
-rw-r--r--kabc/addressee.cpp48
-rw-r--r--kabc/addressee.h2
4 files changed, 48 insertions, 14 deletions
diff --git a/kabc/addressbook.cpp b/kabc/addressbook.cpp
index 19c26eb..8882259 100644
--- a/kabc/addressbook.cpp
+++ b/kabc/addressbook.cpp
@@ -862,17 +862,17 @@ 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 ");
AddressBook::Iterator it;
for ( it = begin(); it != end(); ++it ) {
(*it).setID( csd, (*it).externalUID() );
(*it).computeCsum( csd );
}
- mergeAB( aBook ,csd );
+ mergeAB( aBook ,csd, isSubset );
}
void AddressBook::postExternSync( AddressBook* aBook , const QString& csd)
{
//qDebug("AddressBook::postExternSync ");
@@ -912,16 +912,16 @@ Addressee AddressBook::findByExternUid( const QString& uid , const QString& pr
return (*it);
}
return Addressee();
}
-void AddressBook::mergeAB( AddressBook *aBook, const QString& profile )
+void AddressBook::mergeAB( AddressBook *aBook, const QString& profile , bool isSubset )
{
Iterator it;
Addressee ad;
for ( it = begin(); it != end(); ++it ) {
ad = aBook->findByExternUid( (*it).externalUID(), profile );
if ( !ad.isEmpty() ) {
- (*it).mergeContact( ad );
+ (*it).mergeContact( ad ,isSubset);
}
}
#if 0
// test only
diff --git a/kabc/addressbook.h b/kabc/addressbook.h
index df9048b..a6bf451 100644
--- a/kabc/addressbook.h
+++ b/kabc/addressbook.h
@@ -300,13 +300,13 @@ class AddressBook : public QObject
//Addressee::List getExternLastSyncAddressees();
void resetTempSyncStat();
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:
/**
Emitted, when the address book has changed on disk.
diff --git a/kabc/addressee.cpp b/kabc/addressee.cpp
index 2aca559..295ee4f 100644
--- a/kabc/addressee.cpp
+++ b/kabc/addressee.cpp
@@ -298,9 +298,9 @@ void Addressee::mergeContact( const Addressee& ad , bool isSubSet) // = false)
if ( ( !mData->url.isValid() && ad.mData->url.isValid() ) ) mData->url = ad.mData->url ;
QStringList t;
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 ) {
@@ -312,27 +312,26 @@ void Addressee::mergeContact( const Addressee& ad , bool isSubSet) // = false)
(*it).setType( ( *phoneItAD ).type() );
break;
}
}
- if ( ! found )
+ if ( isSubSet && ! found )
mData->phoneNumbers.append( *phoneItAD );
}
+ if ( isSubSet ) {
// ************* emails;
t = mData->emails;
tAD = ad.mData->emails;
for ( iii = 0; iii < tAD.count(); ++iii)
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] );
-
-
- }
-
QStringList::ConstIterator it;
for( it = ad.mData->custom.begin(); it != ad.mData->custom.end(); ++it ) {
QString qualifiedName = (*it).left( (*it).find( ":" ));
bool found = false;
@@ -388,9 +387,9 @@ void Addressee::mergeContact( const Addressee& ad , bool isSubSet) // = false)
break;
}
}
- if ( ! found ) {
+ if ( isSubSet && ! found ) {
mData->addresses.append( *addressIterA );
}
}
//qDebug("merge contact %s ", ad.uid().latin1());
@@ -477,10 +476,45 @@ 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 ) {
if ( ! ( *phoneIter ).simplifyNumber() )
removeNumbers.append( ( *phoneIter ) );
diff --git a/kabc/addressee.h b/kabc/addressee.h
index e7900c6..2c81c1a 100644
--- a/kabc/addressee.h
+++ b/kabc/addressee.h
@@ -115,9 +115,9 @@ class Addressee
void setExternalUID( const QString &id );
QString externalUID() const;
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();
void simplifyPhoneNumbers();
void simplifyPhoneNumberTypes();