summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--kabc/addressbook.cpp32
-rw-r--r--kabc/addressbook.h3
-rw-r--r--kaddressbook/kabcore.cpp25
3 files changed, 37 insertions, 23 deletions
diff --git a/kabc/addressbook.cpp b/kabc/addressbook.cpp
index 64832f1..86dc7c2 100644
--- a/kabc/addressbook.cpp
+++ b/kabc/addressbook.cpp
@@ -593,24 +593,56 @@ AddressBook::Iterator AddressBook::find( const Addressee &a )
593} 593}
594 594
595Addressee AddressBook::findByUid( const QString &uid ) 595Addressee AddressBook::findByUid( const QString &uid )
596{ 596{
597 Iterator it; 597 Iterator it;
598 for ( it = begin(); it != end(); ++it ) { 598 for ( it = begin(); it != end(); ++it ) {
599 if ( uid == (*it).uid() ) { 599 if ( uid == (*it).uid() ) {
600 return *it; 600 return *it;
601 } 601 }
602 } 602 }
603 return Addressee(); 603 return Addressee();
604} 604}
605void AddressBook::preExternSync( AddressBook* aBook, const QString& csd )
606{
607 qDebug("AddressBook::preExternSync ");
608 AddressBook::Iterator it;
609 for ( it = begin(); it != end(); ++it ) {
610 (*it).setID( csd, (*it).externalUID() );
611 (*it).computeCsum( csd );
612 }
613 mergeAB( aBook ,csd );
614}
615void AddressBook::postExternSync( AddressBook* aBook , const QString& csd)
616{
617 qDebug("AddressBook::postExternSync ");
618 AddressBook::Iterator it;
619 for ( it = begin(); it != end(); ++it ) {
620 if ( (*it).tempSyncStat() == SYNC_TEMPSTATE_NEW_ID ||
621 (*it).tempSyncStat() == SYNC_TEMPSTATE_NEW_CSUM ) {
622 Addressee ad = aBook->findByUid( ( (*it).uid() ));
623 if ( ad.isEmpty() ) {
624 qDebug("ERROR ad empty ");
625 } else {
626 (*it).computeCsum( csd );
627 if ( (*it).tempSyncStat() == SYNC_TEMPSTATE_NEW_ID )
628 ad.setID( csd, (*it).externalUID() );
629 ad.setCsum( csd, (*it).getCsum( csd ) );
630 aBook->insertAddressee( ad );
631 }
632 }
633 }
634}
635
636
605Addressee AddressBook::findByExternUid( const QString& uid , const QString& profile ) 637Addressee AddressBook::findByExternUid( const QString& uid , const QString& profile )
606{ 638{
607 Iterator it; 639 Iterator it;
608 for ( it = begin(); it != end(); ++it ) { 640 for ( it = begin(); it != end(); ++it ) {
609 if ( uid == (*it).getID( profile ) ) 641 if ( uid == (*it).getID( profile ) )
610 return (*it); 642 return (*it);
611 } 643 }
612 return Addressee(); 644 return Addressee();
613} 645}
614void AddressBook::mergeAB( AddressBook *aBook, const QString& profile ) 646void AddressBook::mergeAB( AddressBook *aBook, const QString& profile )
615{ 647{
616 Iterator it; 648 Iterator it;
diff --git a/kabc/addressbook.h b/kabc/addressbook.h
index f40e015..157dc56 100644
--- a/kabc/addressbook.h
+++ b/kabc/addressbook.h
@@ -286,24 +286,27 @@ class AddressBook : public QObject
286 /** 286 /**
287 Query all resources to clean up their lock files 287 Query all resources to clean up their lock files
288 */ 288 */
289 void cleanUp(); 289 void cleanUp();
290 290
291 // sync stuff 291 // sync stuff
292 //Addressee::List getExternLastSyncAddressees(); 292 //Addressee::List getExternLastSyncAddressees();
293 void resetTempSyncStat(); 293 void resetTempSyncStat();
294 QStringList uidList(); 294 QStringList uidList();
295 void removeDeletedAddressees(); 295 void removeDeletedAddressees();
296 void mergeAB( AddressBook *aBook, const QString& profile ); 296 void mergeAB( AddressBook *aBook, const QString& profile );
297 Addressee findByExternUid( const QString& uid , const QString& profile ); 297 Addressee findByExternUid( const QString& uid , const QString& profile );
298
299 void preExternSync( AddressBook* aBook, const QString& csd );
300 void postExternSync( AddressBook* aBook, const QString& csd );
298 signals: 301 signals:
299 /** 302 /**
300 Emitted, when the address book has changed on disk. 303 Emitted, when the address book has changed on disk.
301 */ 304 */
302 void addressBookChanged( AddressBook * ); 305 void addressBookChanged( AddressBook * );
303 306
304 /** 307 /**
305 Emitted, when the address book has been locked for writing. 308 Emitted, when the address book has been locked for writing.
306 */ 309 */
307 void addressBookLocked( AddressBook * ); 310 void addressBookLocked( AddressBook * );
308 311
309 /** 312 /**
diff --git a/kaddressbook/kabcore.cpp b/kaddressbook/kabcore.cpp
index b3d88de..8f3ca9b 100644
--- a/kaddressbook/kabcore.cpp
+++ b/kaddressbook/kabcore.cpp
@@ -2919,31 +2919,25 @@ bool KABCore::syncAB(QString filename, int mode)
2919 2919
2920 //pending prepare addresseeview for output 2920 //pending prepare addresseeview for output
2921 //pending detect, if remote file has REV field. if not switch to external sync 2921 //pending detect, if remote file has REV field. if not switch to external sync
2922 mGlobalSyncMode = SYNC_MODE_NORMAL; 2922 mGlobalSyncMode = SYNC_MODE_NORMAL;
2923 AddressBook abLocal(filename,"syncContact"); 2923 AddressBook abLocal(filename,"syncContact");
2924 bool syncOK = false; 2924 bool syncOK = false;
2925 if ( abLocal.load() ) { 2925 if ( abLocal.load() ) {
2926 qDebug("AB loaded %s,sync mode %d",filename.latin1(), mode ); 2926 qDebug("AB loaded %s,sync mode %d",filename.latin1(), mode );
2927 bool external = false; 2927 bool external = false;
2928 2928
2929 if ( filename.right(4) == ".xml") { 2929 if ( filename.right(4) == ".xml") {
2930 mGlobalSyncMode = SYNC_MODE_EXTERNAL; 2930 mGlobalSyncMode = SYNC_MODE_EXTERNAL;
2931 AddressBook::Iterator it; 2931 abLocal.preExternSync( mAddressBook ,mCurrentSyncDevice );
2932 for ( it = abLocal.begin(); it != abLocal.end(); ++it ) {
2933 (*it).setID( mCurrentSyncDevice, (*it).externalUID() );
2934 (*it).computeCsum( mCurrentSyncDevice );
2935 }
2936 abLocal.mergeAB( mAddressBook ,mCurrentSyncDevice );
2937
2938 } else { 2932 } else {
2939 Addressee lse = mAddressBook->findByUid( "last-syncAddressee-"+mCurrentSyncDevice ); 2933 Addressee lse = mAddressBook->findByUid( "last-syncAddressee-"+mCurrentSyncDevice );
2940 if ( ! lse.isEmpty() ) { 2934 if ( ! lse.isEmpty() ) {
2941 if ( lse.familyName().left(4) == "!E: " ) 2935 if ( lse.familyName().left(4) == "!E: " )
2942 external = true; 2936 external = true;
2943 } else { 2937 } else {
2944 bool found = false; 2938 bool found = false;
2945 QDateTime dt( QDate( 2004,1,1)); 2939 QDateTime dt( QDate( 2004,1,1));
2946 AddressBook::Iterator it; 2940 AddressBook::Iterator it;
2947 for ( it = abLocal.begin(); it != abLocal.end(); ++it ) { 2941 for ( it = abLocal.begin(); it != abLocal.end(); ++it ) {
2948 if ( (*it).revision() != dt ) { 2942 if ( (*it).revision() != dt ) {
2949 found = true; 2943 found = true;
@@ -2969,40 +2963,25 @@ bool KABCore::syncAB(QString filename, int mode)
2969 // qDebug("Name %s ", (*it).familyName().latin1()); 2963 // qDebug("Name %s ", (*it).familyName().latin1());
2970 //} 2964 //}
2971 syncOK = synchronizeAddressbooks( mAddressBook, &abLocal, mode ); 2965 syncOK = synchronizeAddressbooks( mAddressBook, &abLocal, mode );
2972 if ( syncOK ) { 2966 if ( syncOK ) {
2973 if ( KABPrefs::instance()->mWriteBackFile ) 2967 if ( KABPrefs::instance()->mWriteBackFile )
2974 { 2968 {
2975 if ( external && filename.right(4) != ".xml") 2969 if ( external && filename.right(4) != ".xml")
2976 abLocal.removeDeletedAddressees(); 2970 abLocal.removeDeletedAddressees();
2977 qDebug("Saving remote AB "); 2971 qDebug("Saving remote AB ");
2978 abLocal.saveAB(); 2972 abLocal.saveAB();
2979 if ( external && filename.right(4) == ".xml") { 2973 if ( external && filename.right(4) == ".xml") {
2980 // afterwrite processing 2974 // afterwrite processing
2981 AddressBook::Iterator it; 2975 abLocal.postExternSync( mAddressBook,mCurrentSyncDevice );
2982 for ( it = abLocal.begin(); it != abLocal.end(); ++it ) {
2983 if ( (*it).tempSyncStat() == SYNC_TEMPSTATE_NEW_ID ||
2984 (*it).tempSyncStat() == SYNC_TEMPSTATE_NEW_CSUM ) {
2985 Addressee ad = mAddressBook->findByUid( ( (*it).uid() ));
2986 if ( ad.isEmpty() ) {
2987 qDebug("ERROR ad empty ");
2988 } else {
2989 (*it).computeCsum( mCurrentSyncDevice );
2990 if ( (*it).tempSyncStat() == SYNC_TEMPSTATE_NEW_ID )
2991 ad.setID( mCurrentSyncDevice, (*it).externalUID() );
2992 ad.setCsum( mCurrentSyncDevice, (*it).getCsum( mCurrentSyncDevice ) );
2993 mAddressBook->insertAddressee( ad );
2994 }
2995 }
2996 }
2997 } 2976 }
2998 } 2977 }
2999 } 2978 }
3000 setModified(); 2979 setModified();
3001 2980
3002 } 2981 }
3003 if ( syncOK ) 2982 if ( syncOK )
3004 mViewManager->refreshView(); 2983 mViewManager->refreshView();
3005 return syncOK; 2984 return syncOK;
3006#if 0 2985#if 0
3007 2986
3008 if ( storage->load(KOPrefs::instance()->mUseQuicksave) ) { 2987 if ( storage->load(KOPrefs::instance()->mUseQuicksave) ) {