00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include "addressbooksyncee.h"
00024
00025 #include "syncee.h"
00026
00027 #include <libkdepim/addresseediffalgo.h>
00028 #include <libkdepim/kabcresourcenull.h>
00029
00030 #include <kapplication.h>
00031 #include <kdebug.h>
00032 #include <kstaticdeleter.h>
00033
00034 using namespace KSync;
00035
00036 AddressBookSyncEntry::AddressBookSyncEntry( const KABC::Addressee &a,
00037 Syncee *parent )
00038 : SyncEntry( parent )
00039 {
00040 mAddressee = a;
00041 }
00042
00043 AddressBookSyncEntry::AddressBookSyncEntry( const AddressBookSyncEntry& entry )
00044 : SyncEntry( entry )
00045 {
00046 mAddressee = entry.mAddressee;
00047 m_res = entry.m_res;
00048 }
00049
00050 QString AddressBookSyncEntry::name()
00051 {
00052 return mAddressee.realName();
00053 }
00054
00055 QString AddressBookSyncEntry::id()
00056 {
00057 return mAddressee.uid();
00058 }
00059
00060 void AddressBookSyncEntry::setId(const QString& id)
00061 {
00062 mAddressee.setUid( id );
00063 }
00064
00065 AddressBookSyncEntry *AddressBookSyncEntry::clone()
00066 {
00067 return new AddressBookSyncEntry( *this );
00068 }
00069
00070 QString AddressBookSyncEntry::timestamp()
00071 {
00072 QDateTime r = mAddressee.revision();
00073 if ( r.isValid() ) return r.toString();
00074 else return "norevision";
00075 }
00076
00077 QString AddressBookSyncEntry::type() const
00078 {
00079 return QString::fromLatin1("AddressBookSyncEntry");
00080 }
00081
00082 bool AddressBookSyncEntry::equals( SyncEntry *entry )
00083 {
00084 AddressBookSyncEntry *abEntry = dynamic_cast<AddressBookSyncEntry *>(entry);
00085 if ( !abEntry ) {
00086 kdDebug(5228) << "AddressBookSyncee::equals(): Wrong type." << endl;
00087 return false;
00088 }
00089
00090 if ( mAddressee == abEntry->addressee() ) {
00091 kdDebug(5228) << "AddressBookSyncEntry::equals(): '" << entry->name() << "':"
00092 << "equal" << endl;
00093 return true;
00094 } else {
00095 kdDebug(5228) << "AddressBookSyncEntry::equals(): '" << entry->name() << "':"
00096 << "not equal" << endl;
00097 return false;
00098 }
00099 }
00100
00101 QString AddressBookSyncEntry::resource() const
00102 {
00103 return m_res;
00104 }
00105
00106 void AddressBookSyncEntry::setResource( const QString &str )
00107 {
00108 m_res = str;
00109 }
00110
00111 KPIM::DiffAlgo* AddressBookSyncEntry::diffAlgo( SyncEntry *syncEntry, SyncEntry *targetEntry )
00112 {
00113 AddressBookSyncEntry *abSyncEntry = dynamic_cast<AddressBookSyncEntry*>( syncEntry );
00114 AddressBookSyncEntry *abTargetEntry = dynamic_cast<AddressBookSyncEntry*>( targetEntry );
00115
00116 if ( !abSyncEntry || !abTargetEntry )
00117 return 0;
00118
00119 return new KPIM::AddresseeDiffAlgo( abSyncEntry->addressee(), abTargetEntry->addressee() );
00120 }
00121
00122
00123
00124
00125
00126
00127
00128 typedef void (*merge)(KABC::Addressee&, const KABC::Addressee& );
00129 typedef QMap<int, merge> MergeMap;
00130
00131 static MergeMap* mergeMap= 0;
00132 static KStaticDeleter<MergeMap> mergeMapDeleter;
00133
00134
00135 static void mergeFamily ( KABC::Addressee&, const KABC::Addressee& );
00136 static void mergeGiven ( KABC::Addressee&, const KABC::Addressee& );
00137 static void mergeAdditional( KABC::Addressee&, const KABC::Addressee& );
00138 static void mergePrefix ( KABC::Addressee&, const KABC::Addressee& );
00139 static void mergeSuffix ( KABC::Addressee&, const KABC::Addressee& );
00140 static void mergeNick ( KABC::Addressee&, const KABC::Addressee& );
00141 static void mergeBirth ( KABC::Addressee&, const KABC::Addressee& );
00142 static void mergeHome ( KABC::Addressee&, const KABC::Addressee& );
00143 static void mergeBus ( KABC::Addressee&, const KABC::Addressee& );
00144 static void mergeTime ( KABC::Addressee&, const KABC::Addressee& );
00145 static void mergeGeo ( KABC::Addressee&, const KABC::Addressee& );
00146 static void mergeTitle ( KABC::Addressee&, const KABC::Addressee& );
00147 static void mergeRole ( KABC::Addressee&, const KABC::Addressee& );
00148 static void mergeOrg ( KABC::Addressee&, const KABC::Addressee& );
00149 static void mergeNote ( KABC::Addressee&, const KABC::Addressee& );
00150 static void mergeUrl ( KABC::Addressee&, const KABC::Addressee& );
00151 static void mergeSecrecy ( KABC::Addressee&, const KABC::Addressee& );
00152 static void mergePicture ( KABC::Addressee&, const KABC::Addressee& );
00153 static void mergeSound ( KABC::Addressee&, const KABC::Addressee& );
00154 static void mergeAgent ( KABC::Addressee&, const KABC::Addressee& );
00155 static void mergeHomeTel ( KABC::Addressee&, const KABC::Addressee& );
00156 static void mergeOffTel ( KABC::Addressee&, const KABC::Addressee& );
00157 static void mergeMessenger ( KABC::Addressee&, const KABC::Addressee& );
00158 static void mergePreferredNumber( KABC::Addressee&, const KABC::Addressee& );
00159 static void mergeVoice ( KABC::Addressee&, const KABC::Addressee& );
00160 static void mergeFax ( KABC::Addressee&, const KABC::Addressee& );
00161 static void mergeCell ( KABC::Addressee&, const KABC::Addressee& );
00162 static void mergeVideo ( KABC::Addressee&, const KABC::Addressee& );
00163 static void mergeMailbox ( KABC::Addressee&, const KABC::Addressee& );
00164 static void mergeModem ( KABC::Addressee&, const KABC::Addressee& );
00165 static void mergeCarPhone ( KABC::Addressee&, const KABC::Addressee& );
00166 static void mergeISDN ( KABC::Addressee&, const KABC::Addressee& );
00167 static void mergePCS ( KABC::Addressee&, const KABC::Addressee& );
00168 static void mergePager ( KABC::Addressee&, const KABC::Addressee& );
00169 static void mergeHomeFax ( KABC::Addressee&, const KABC::Addressee& );
00170 static void mergeWorkFax ( KABC::Addressee&, const KABC::Addressee& );
00171 static void mergeOtherTel ( KABC::Addressee&, const KABC::Addressee& );
00172 static void mergeCat ( KABC::Addressee&, const KABC::Addressee& );
00173 static void mergeKeys ( KABC::Addressee&, const KABC::Addressee& );
00174 static void mergeCustom ( KABC::Addressee&, const KABC::Addressee& );
00175 static void mergeLogo ( KABC::Addressee&, const KABC::Addressee& );
00176 static void mergeEmail ( KABC::Addressee&, const KABC::Addressee& );
00177 static void mergeEmails ( KABC::Addressee&, const KABC::Addressee& );
00178
00179
00180 MergeMap* mergeMappi() {
00181 if (!mergeMap ) {
00182 mergeMapDeleter.setObject( mergeMap, new MergeMap );
00183 mergeMap->insert(AddressBookSyncee::FamilyName, mergeFamily );
00184 mergeMap->insert(AddressBookSyncee::GivenName, mergeGiven );
00185 mergeMap->insert(AddressBookSyncee::AdditionalName, mergeAdditional );
00186 mergeMap->insert(AddressBookSyncee::Prefix, mergePrefix );
00187 mergeMap->insert(AddressBookSyncee::Suffix, mergeSuffix );
00188 mergeMap->insert(AddressBookSyncee::NickName, mergeNick );
00189 mergeMap->insert(AddressBookSyncee::Birthday, mergeBirth );
00190 mergeMap->insert(AddressBookSyncee::HomeAddress, mergeHome );
00191 mergeMap->insert(AddressBookSyncee::BusinessAddress, mergeBus );
00192 mergeMap->insert(AddressBookSyncee::TimeZone, mergeTime );
00193 mergeMap->insert(AddressBookSyncee::Geo, mergeGeo );
00194 mergeMap->insert(AddressBookSyncee::Title, mergeTitle );
00195 mergeMap->insert(AddressBookSyncee::Role, mergeRole );
00196 mergeMap->insert(AddressBookSyncee::Organization, mergeOrg );
00197 mergeMap->insert(AddressBookSyncee::Note, mergeNote );
00198 mergeMap->insert(AddressBookSyncee::Url, mergeUrl );
00199 mergeMap->insert(AddressBookSyncee::Secrecy, mergeSecrecy );
00200 mergeMap->insert(AddressBookSyncee::Picture, mergePicture );
00201 mergeMap->insert(AddressBookSyncee::Sound, mergeSound );
00202 mergeMap->insert(AddressBookSyncee::Agent, mergeAgent );
00203 mergeMap->insert(AddressBookSyncee::HomeNumbers, mergeHomeTel );
00204 mergeMap->insert(AddressBookSyncee::OfficeNumbers, mergeOffTel );
00205 mergeMap->insert(AddressBookSyncee::Messenger, mergeMessenger );
00206 mergeMap->insert(AddressBookSyncee::PreferredNumber, mergePreferredNumber );
00207 mergeMap->insert(AddressBookSyncee::Voice, mergeVoice );
00208 mergeMap->insert(AddressBookSyncee::Fax, mergeFax );
00209 mergeMap->insert(AddressBookSyncee::Cell, mergeCell );
00210 mergeMap->insert(AddressBookSyncee::Video, mergeVideo );
00211 mergeMap->insert(AddressBookSyncee::Mailbox, mergeMailbox );
00212 mergeMap->insert(AddressBookSyncee::Modem, mergeModem );
00213 mergeMap->insert(AddressBookSyncee::CarPhone, mergeCarPhone );
00214 mergeMap->insert(AddressBookSyncee::ISDN, mergeISDN );
00215 mergeMap->insert(AddressBookSyncee::PCS, mergePCS );
00216 mergeMap->insert(AddressBookSyncee::Pager, mergePager );
00217 mergeMap->insert(AddressBookSyncee::HomeFax, mergeHomeFax );
00218 mergeMap->insert(AddressBookSyncee::WorkFax, mergeWorkFax );
00219 mergeMap->insert(AddressBookSyncee::OtherTel, mergeOtherTel );
00220 mergeMap->insert(AddressBookSyncee::Category, mergeCat );
00221 mergeMap->insert(AddressBookSyncee::Custom, mergeCustom );
00222 mergeMap->insert(AddressBookSyncee::Keys, mergeKeys );
00223 mergeMap->insert(AddressBookSyncee::Logo, mergeLogo );
00224 mergeMap->insert(AddressBookSyncee::Email, mergeEmails );
00225
00226 }
00227 return mergeMap;
00228 }
00229
00230 bool AddressBookSyncEntry::mergeWith( SyncEntry* ent)
00231 {
00232 kdDebug(5228) << "mergeWith was called " << endl;
00233 if ( ent->name() != name() || !ent->syncee() || !syncee() )
00234 return false;
00235 kdDebug(5228) << "Passed the test " << endl;
00236
00237 AddressBookSyncEntry* entry = static_cast<AddressBookSyncEntry*> (ent);
00238 QBitArray hier = syncee()->bitArray();
00239 QBitArray da = entry->syncee()->bitArray();
00240 kdDebug(5228) << "Hier count " << hier.size() << " Da count "<< da.size() << endl;
00241 MergeMap::Iterator it;
00242 MergeMap* ma = mergeMappi();
00243 for (uint i = 0; i < da.size() && i < hier.size(); i++ ) {
00244
00245
00246
00247
00248 if ( da[i] && !hier[i] ) {
00249 kdDebug(5228) << " da supports and hier not " << i << endl;
00250 it = ma->find( i );
00251 if (it!= ma->end() )
00252 (*it.data())(mAddressee,entry->mAddressee);
00253 }
00254 }
00255 mergeCustom( mAddressee, entry->mAddressee );
00256
00257 return true;
00258 }
00259
00260 AddressBookSyncee::AddressBookSyncee()
00261 : Syncee( AddressBookSyncee::Emails + 1 )
00262 {
00263 mAddressBook = new KABC::AddressBook;
00264 mAddressBook->addResource( new KABC::ResourceNull() );
00265 mOwnAddressBook = true;
00266
00267 mEntries.setAutoDelete( true );
00268 }
00269
00270 AddressBookSyncee::AddressBookSyncee( KABC::AddressBook *ab )
00271 : Syncee( AddressBookSyncee::Emails + 1 )
00272 {
00273 mAddressBook = ab;
00274 mOwnAddressBook = false;
00275
00276 mEntries.setAutoDelete( true );
00277
00278 KABC::AddressBook::Iterator it;
00279 for ( it = ab->begin(); it != ab->end(); ++it ) {
00280 createEntry( *it );
00281 }
00282 }
00283
00284 AddressBookSyncee::~AddressBookSyncee()
00285 {
00286 if ( mOwnAddressBook ) delete mAddressBook;
00287 }
00288
00289 void AddressBookSyncee::reset()
00290 {
00291 mEntries.clear();
00292 }
00293
00294 AddressBookSyncEntry *AddressBookSyncee::firstEntry()
00295 {
00296 return mEntries.first();
00297 }
00298
00299 AddressBookSyncEntry *AddressBookSyncee::nextEntry()
00300 {
00301 return mEntries.next();
00302 }
00303
00304 #if 0 // fix me later - zecke
00305 AddressBookSyncEntry *AddressBookSyncee::findEntry(const QString &id)
00306 {
00307 Event *event = mEntries.find(id);
00308 return createEntry(event);
00309 }
00310 #endif
00311
00312 void AddressBookSyncee::addEntry( SyncEntry *entry )
00313 {
00314
00315
00316 AddressBookSyncEntry *abEntry = dynamic_cast<AddressBookSyncEntry *>( entry );
00317 abEntry = abEntry->clone();
00318 if ( !abEntry ) {
00319 kdDebug(5228) << "AddressBookSyncee::addEntry(): SyncEntry has wrong type."
00320 << endl;
00321 } else {
00322 abEntry->setSyncee( this );
00323 if( abEntry->state() == SyncEntry::Undefined ) {
00324 if( hasChanged( abEntry ) ) {
00325 abEntry->setState( SyncEntry::Modified );
00326 }
00327 }
00328 mEntries.append( abEntry );
00329
00330 KABC::Addressee a = abEntry->addressee();
00331 a.setResource( 0 );
00332 mAddressBook->insertAddressee( a );
00333 }
00334 }
00335
00336 void AddressBookSyncee::removeEntry( SyncEntry *entry )
00337 {
00338 AddressBookSyncEntry *abEntry = dynamic_cast<AddressBookSyncEntry *>(entry);
00339 if ( !abEntry ) {
00340 kdDebug(5228) << "AddressBookSyncee::removeEntry(): SyncEntry has wrong type."
00341 << endl;
00342 } else {
00343 mAddressBook->removeAddressee( abEntry->addressee() );
00344 mEntries.remove( abEntry );
00345 }
00346 }
00347
00348 AddressBookSyncEntry *AddressBookSyncee::createEntry( const KABC::Addressee &a )
00349 {
00350 if ( !a.isEmpty() ) {
00351 AddressBookSyncEntry *entry = new AddressBookSyncEntry( a, this );
00352 entry->setSyncee( this );
00353 mEntries.append( entry );
00354 return entry;
00355 } else {
00356 return 0;
00357 }
00358 }
00359
00360 #if 0
00361
00366 Syncee* AddressBookSyncee::clone()
00367 {
00368 AddressBookSyncEntry* entry;
00369 SyncEntry* cloneE;
00370 AddressBookSyncee* clone = new AddressBookSyncee();
00371 clone->setSyncMode( syncMode() );
00372 clone->setFirstSync( firstSync() );
00373 clone->setSupports( bitArray() );
00374 clone->setSource( source() );
00375 for ( entry = mEntries.first(); entry != 0; entry = mEntries.next() ) {
00376 cloneE = entry->clone();
00377 clone->addEntry( cloneE );
00378 }
00379 return clone;
00380 }
00381 #endif
00382
00383 SyncEntry::PtrList AddressBookSyncee::added()
00384 {
00385 return find( SyncEntry::Added );
00386 }
00387
00388 SyncEntry::PtrList AddressBookSyncee::modified()
00389 {
00390 return find( SyncEntry::Modified );
00391 }
00392
00393 SyncEntry::PtrList AddressBookSyncee::removed()
00394 {
00395 return find( SyncEntry::Removed );
00396 }
00397
00398 SyncEntry::PtrList AddressBookSyncee::find( int state )
00399 {
00400 QPtrList<SyncEntry> found;
00401 AddressBookSyncEntry* entry;
00402 for ( entry = mEntries.first(); entry != 0; entry = mEntries.next() ) {
00403 if ( entry->state() == state )
00404 found.append( entry );
00405 }
00406
00407 return found;
00408 }
00409
00410 QString AddressBookSyncee::type() const
00411 {
00412 return QString::fromLatin1("AddressBookSyncee");
00413 }
00414
00415 QString AddressBookSyncee::newId() const
00416 {
00417 return KApplication::randomString( 10 );
00418 }
00419
00420 static QStringList mergeList( const QStringList& entry, const QStringList& other ) {
00421 QStringList list = entry;
00422
00423 QStringList::ConstIterator it;
00424 for (it = other.begin(); it != other.end(); ++it ) {
00425 if (!list.contains( (*it) ) )
00426 list << (*it);
00427 }
00428
00429 return list;
00430 }
00431
00432 static void mergeFamily ( KABC::Addressee& entry, const KABC::Addressee& other) {
00433 entry.setFamilyName( other.familyName() );
00434 }
00435 static void mergeGiven ( KABC::Addressee& entry, const KABC::Addressee& other) {
00436 entry.setGivenName( other.givenName() );
00437 }
00438 static void mergeAdditional( KABC::Addressee& entry, const KABC::Addressee& other) {
00439 entry.setAdditionalName( other.additionalName() );
00440 }
00441 static void mergePrefix ( KABC::Addressee& entry, const KABC::Addressee& other) {
00442 entry.setPrefix( other.prefix() );
00443 }
00444 static void mergeSuffix ( KABC::Addressee& entry, const KABC::Addressee& other) {
00445 entry.setSuffix( other.suffix() );
00446 }
00447 static void mergeNick ( KABC::Addressee& entry, const KABC::Addressee& other) {
00448 entry.setNickName( other.nickName() );
00449 }
00450 static void mergeBirth ( KABC::Addressee& entry, const KABC::Addressee& other) {
00451 entry.setBirthday( other.birthday() );
00452 }
00453 static void mergeHome ( KABC::Addressee& entry, const KABC::Addressee& other) {
00454 entry.insertAddress( other.address( KABC::Address::Home ) );
00455 }
00456 static void mergeBus ( KABC::Addressee& entry, const KABC::Addressee& other) {
00457 entry.insertAddress( other.address( KABC::Address::Work ) );
00458 }
00459 static void mergeTime ( KABC::Addressee& entry, const KABC::Addressee& other) {
00460 entry.setTimeZone( other.timeZone() );
00461 }
00462 static void mergeGeo ( KABC::Addressee& entry, const KABC::Addressee& other) {
00463 entry.setGeo( other.geo() );
00464 }
00465 static void mergeTitle ( KABC::Addressee& entry, const KABC::Addressee& other) {
00466 entry.setTitle( other.title() );
00467 }
00468 static void mergeRole ( KABC::Addressee& entry, const KABC::Addressee& other) {
00469 entry.setRole( other.role() );
00470 }
00471 static void mergeOrg ( KABC::Addressee& entry, const KABC::Addressee& other) {
00472 entry.setOrganization( other.organization() );
00473 }
00474 static void mergeNote ( KABC::Addressee& entry, const KABC::Addressee& other) {
00475 entry.setNote( other.note() );
00476 }
00477 static void mergeUrl ( KABC::Addressee& entry, const KABC::Addressee& other) {
00478 entry.setUrl( other.url() );
00479 }
00480 static void mergeSecrecy ( KABC::Addressee& entry, const KABC::Addressee& other) {
00481 entry.setSecrecy( other.secrecy() );
00482 }
00483 static void mergePicture ( KABC::Addressee& entry, const KABC::Addressee& other) {
00484 entry.setPhoto( other.photo() );
00485 }
00486 static void mergeSound ( KABC::Addressee& entry, const KABC::Addressee& other) {
00487 entry.setSound( other.sound() );
00488 }
00489 static void mergeAgent ( KABC::Addressee& entry, const KABC::Addressee& other) {
00490 entry.setAgent( other.agent() );
00491 }
00492 static void mergeHomeTel ( KABC::Addressee& entry, const KABC::Addressee& other) {
00493 entry.insertPhoneNumber( other.phoneNumber( KABC::PhoneNumber::Home ) );
00494 }
00495 static void mergeOffTel ( KABC::Addressee& entry, const KABC::Addressee& other) {
00496 entry.insertPhoneNumber( other.phoneNumber( KABC::PhoneNumber::Work ) );
00497 }
00498 static void mergeMessenger ( KABC::Addressee& entry, const KABC::Addressee& other) {
00499 entry.insertPhoneNumber( other.phoneNumber( KABC::PhoneNumber::Msg ) );
00500 }
00501 static void mergePreferredNumber( KABC::Addressee& entry, const KABC::Addressee& other) {
00502 entry.insertPhoneNumber( other.phoneNumber( KABC::PhoneNumber::Pref ) );
00503 }
00504 static void mergeVoice ( KABC::Addressee& entry, const KABC::Addressee& other) {
00505 entry.insertPhoneNumber( other.phoneNumber( KABC::PhoneNumber::Voice ) );
00506 }
00507 static void mergeFax ( KABC::Addressee& entry, const KABC::Addressee& other) {
00508 entry.insertPhoneNumber( other.phoneNumber( KABC::PhoneNumber::Fax ) );
00509 }
00510 static void mergeCell ( KABC::Addressee& entry, const KABC::Addressee& other) {
00511 entry.insertPhoneNumber( other.phoneNumber( KABC::PhoneNumber::Cell ) );
00512 }
00513 static void mergeVideo ( KABC::Addressee& entry, const KABC::Addressee& other) {
00514 entry.insertPhoneNumber( other.phoneNumber( KABC::PhoneNumber::Video ) );
00515 }
00516 static void mergeMailbox ( KABC::Addressee& entry, const KABC::Addressee& other) {
00517 entry.insertPhoneNumber( other.phoneNumber( KABC::PhoneNumber::Bbs ) );
00518 }
00519 static void mergeModem ( KABC::Addressee& entry, const KABC::Addressee& other) {
00520 entry.insertPhoneNumber( other.phoneNumber( KABC::PhoneNumber::Modem ) );
00521 }
00522 static void mergeCarPhone ( KABC::Addressee& entry, const KABC::Addressee& other) {
00523 entry.insertPhoneNumber( other.phoneNumber( KABC::PhoneNumber::Car ) );
00524 }
00525 static void mergeISDN ( KABC::Addressee& entry, const KABC::Addressee& other) {
00526 entry.insertPhoneNumber( other.phoneNumber( KABC::PhoneNumber::Isdn ) );
00527 }
00528 static void mergePCS ( KABC::Addressee& entry, const KABC::Addressee& other) {
00529 entry.insertPhoneNumber( other.phoneNumber( KABC::PhoneNumber::Pcs ) );
00530 }
00531 static void mergePager ( KABC::Addressee& entry, const KABC::Addressee& other) {
00532 entry.insertPhoneNumber( other.phoneNumber( KABC::PhoneNumber::Pager ) );
00533 }
00534 static void mergeHomeFax ( KABC::Addressee& entry, const KABC::Addressee& other) {
00535 entry.insertPhoneNumber( other.phoneNumber( KABC::PhoneNumber::Home | KABC::PhoneNumber::Fax ) );
00536 }
00537 static void mergeWorkFax ( KABC::Addressee& entry, const KABC::Addressee& other) {
00538 entry.insertPhoneNumber( other.phoneNumber( KABC::PhoneNumber::Work | KABC::PhoneNumber::Fax ) );
00539 }
00540 static void mergeOtherTel ( KABC::Addressee&, const KABC::Addressee& ) {
00541
00542 }
00543 static void mergeCat ( KABC::Addressee& entry, const KABC::Addressee& other) {
00544 entry.setCategories( other.categories() );
00545 }
00546 static void mergeKeys ( KABC::Addressee& entry, const KABC::Addressee& other) {
00547 entry.setKeys( other.keys() );
00548 }
00549 static void mergeCustom ( KABC::Addressee& entry, const KABC::Addressee& other) {
00550 entry.setCustoms( mergeList( entry.customs(), other.customs() ) );
00551 }
00552 static void mergeLogo ( KABC::Addressee& entry, const KABC::Addressee& other) {
00553 entry.setLogo( other.logo() );
00554 }
00555 static void mergeEmail ( KABC::Addressee& entry, const KABC::Addressee& other) {
00556 entry.insertEmail( other.preferredEmail(), true );
00557 }
00558 static void mergeEmails ( KABC::Addressee& entry, const KABC::Addressee& other) {
00559 QString pref = entry.preferredEmail();
00560 entry.setEmails( other.emails() );
00561 entry.insertEmail( pref, true );
00562 }