summaryrefslogtreecommitdiffabout
authorzautrix <zautrix>2004-09-19 20:27:44 (UTC)
committer zautrix <zautrix>2004-09-19 20:27:44 (UTC)
commit3da2cfeab2edbe64a17251662e56668fe143f7a3 (patch) (unidiff)
tree37e8d4445fca84bd4e93af38c96c5c489f9cbca8
parentafa28a62314117555d6b32291188eedd1a576284 (diff)
downloadkdepimpi-3da2cfeab2edbe64a17251662e56668fe143f7a3.zip
kdepimpi-3da2cfeab2edbe64a17251662e56668fe143f7a3.tar.gz
kdepimpi-3da2cfeab2edbe64a17251662e56668fe143f7a3.tar.bz2
more AB sync
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
@@ -573,64 +573,96 @@ void AddressBook::removeDeletedAddressees()
573 } 573 }
574 } 574 }
575 deleteRemovedAddressees(); 575 deleteRemovedAddressees();
576} 576}
577 577
578void AddressBook::removeAddressee( const Iterator &it ) 578void AddressBook::removeAddressee( const Iterator &it )
579{ 579{
580 d->mRemovedAddressees.append( (*it) ); 580 d->mRemovedAddressees.append( (*it) );
581 d->mAddressees.remove( it.d->mIt ); 581 d->mAddressees.remove( it.d->mIt );
582} 582}
583 583
584AddressBook::Iterator AddressBook::find( const Addressee &a ) 584AddressBook::Iterator AddressBook::find( const Addressee &a )
585{ 585{
586 Iterator it; 586 Iterator it;
587 for ( it = begin(); it != end(); ++it ) { 587 for ( it = begin(); it != end(); ++it ) {
588 if ( a.uid() == (*it).uid() ) { 588 if ( a.uid() == (*it).uid() ) {
589 return it; 589 return it;
590 } 590 }
591 } 591 }
592 return end(); 592 return end();
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;
617 Addressee ad; 649 Addressee ad;
618 for ( it = begin(); it != end(); ++it ) { 650 for ( it = begin(); it != end(); ++it ) {
619 ad = aBook->findByExternUid( (*it).externalUID(), profile ); 651 ad = aBook->findByExternUid( (*it).externalUID(), profile );
620 if ( !ad.isEmpty() ) { 652 if ( !ad.isEmpty() ) {
621 (*it).mergeContact( ad ); 653 (*it).mergeContact( ad );
622 } 654 }
623 } 655 }
624} 656}
625 657
626#if 0 658#if 0
627Addressee::List AddressBook::getExternLastSyncAddressees() 659Addressee::List AddressBook::getExternLastSyncAddressees()
628{ 660{
629 Addressee::List results; 661 Addressee::List results;
630 662
631 Iterator it; 663 Iterator it;
632 for ( it = begin(); it != end(); ++it ) { 664 for ( it = begin(); it != end(); ++it ) {
633 if ( (*it).uid().left( 19 ) == "last-syncAddressee-" ) { 665 if ( (*it).uid().left( 19 ) == "last-syncAddressee-" ) {
634 if ( (*it).familyName().left(4) == "!E: " ) 666 if ( (*it).familyName().left(4) == "!E: " )
635 results.append( *it ); 667 results.append( *it );
636 } 668 }
diff --git a/kabc/addressbook.h b/kabc/addressbook.h
index f40e015..157dc56 100644
--- a/kabc/addressbook.h
+++ b/kabc/addressbook.h
@@ -266,64 +266,67 @@ class AddressBook : public QObject
266 Remove address book resource. 266 Remove address book resource.
267 */ 267 */
268 bool removeResource( Resource * ); 268 bool removeResource( Resource * );
269 269
270 /** 270 /**
271 Return pointer list of all resources. 271 Return pointer list of all resources.
272 */ 272 */
273 QPtrList<Resource> resources(); 273 QPtrList<Resource> resources();
274 274
275 /** 275 /**
276 Set the @p ErrorHandler, that is used by @ref error() to 276 Set the @p ErrorHandler, that is used by @ref error() to
277 provide gui-independend error messages. 277 provide gui-independend error messages.
278 */ 278 */
279 void setErrorHandler( ErrorHandler * ); 279 void setErrorHandler( ErrorHandler * );
280 280
281 /** 281 /**
282 Shows gui independend error messages. 282 Shows gui independend error messages.
283 */ 283 */
284 void error( const QString& ); 284 void error( const QString& );
285 285
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 /**
310 Emitted, when the address book has been unlocked. 313 Emitted, when the address book has been unlocked.
311 */ 314 */
312 void addressBookUnlocked( AddressBook * ); 315 void addressBookUnlocked( AddressBook * );
313 316
314 protected: 317 protected:
315 void deleteRemovedAddressees(); 318 void deleteRemovedAddressees();
316 void setStandardResource( Resource * ); 319 void setStandardResource( Resource * );
317 Resource *standardResource(); 320 Resource *standardResource();
318 KRES::Manager<Resource> *resourceManager(); 321 KRES::Manager<Resource> *resourceManager();
319 322
320 void init(const QString &config, const QString &family); 323 void init(const QString &config, const QString &family);
321 324
322 private: 325 private:
323//US QPtrList<Resource> mDummy; // Remove in KDE 4 326//US QPtrList<Resource> mDummy; // Remove in KDE 4
324 327
325 328
326 struct AddressBookData; 329 struct AddressBookData;
327 AddressBookData *d; 330 AddressBookData *d;
328 bool blockLSEchange; 331 bool blockLSEchange;
329}; 332};
diff --git a/kaddressbook/kabcore.cpp b/kaddressbook/kabcore.cpp
index b3d88de..8f3ca9b 100644
--- a/kaddressbook/kabcore.cpp
+++ b/kaddressbook/kabcore.cpp
@@ -2899,130 +2899,109 @@ bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBo
2899 addresseeLSync.setGivenName(i18n("!DO NOT EDIT!") ); 2899 addresseeLSync.setGivenName(i18n("!DO NOT EDIT!") );
2900 addresseeRSync.setOrganization( "!"+mLastAddressbookSync.toString() ) ; 2900 addresseeRSync.setOrganization( "!"+mLastAddressbookSync.toString() ) ;
2901 addresseeLSync.setOrganization("!"+ mLastAddressbookSync.toString() ); 2901 addresseeLSync.setOrganization("!"+ mLastAddressbookSync.toString() );
2902 addresseeRSync.setNote( "" ) ; 2902 addresseeRSync.setNote( "" ) ;
2903 addresseeLSync.setNote( "" ); 2903 addresseeLSync.setNote( "" );
2904 2904
2905 if ( mGlobalSyncMode == SYNC_MODE_NORMAL) 2905 if ( mGlobalSyncMode == SYNC_MODE_NORMAL)
2906 remote->insertAddressee( addresseeRSync, false ); 2906 remote->insertAddressee( addresseeRSync, false );
2907 local->insertAddressee( addresseeLSync, false ); 2907 local->insertAddressee( addresseeLSync, false );
2908 QString mes; 2908 QString mes;
2909 mes .sprintf( i18n("Synchronization summary:\n\n %d items added to local\n %d items added to remote\n %d items updated on local\n %d items updated on remote\n %d items deleted on local\n %d items deleted on remote\n"),addedAddressee, addedAddresseeR, changedLocal, changedRemote, deletedAddresseeL, deletedAddresseeR ); 2909 mes .sprintf( i18n("Synchronization summary:\n\n %d items added to local\n %d items added to remote\n %d items updated on local\n %d items updated on remote\n %d items deleted on local\n %d items deleted on remote\n"),addedAddressee, addedAddresseeR, changedLocal, changedRemote, deletedAddresseeL, deletedAddresseeR );
2910 if ( KABPrefs::instance()->mShowSyncSummary ) { 2910 if ( KABPrefs::instance()->mShowSyncSummary ) {
2911 KMessageBox::information(this, mes, i18n("KA/Pi Synchronization") ); 2911 KMessageBox::information(this, mes, i18n("KA/Pi Synchronization") );
2912 } 2912 }
2913 qDebug( mes ); 2913 qDebug( mes );
2914 return syncOK; 2914 return syncOK;
2915} 2915}
2916 2916
2917bool KABCore::syncAB(QString filename, int mode) 2917bool KABCore::syncAB(QString filename, int mode)
2918{ 2918{
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;
2950 break; 2944 break;
2951 } 2945 }
2952 } 2946 }
2953 external = ! found; 2947 external = ! found;
2954 } 2948 }
2955 2949
2956 if ( external ) { 2950 if ( external ) {
2957 qDebug("Setting vcf mode to external "); 2951 qDebug("Setting vcf mode to external ");
2958 mGlobalSyncMode = SYNC_MODE_EXTERNAL; 2952 mGlobalSyncMode = SYNC_MODE_EXTERNAL;
2959 AddressBook::Iterator it; 2953 AddressBook::Iterator it;
2960 for ( it = abLocal.begin(); it != abLocal.end(); ++it ) { 2954 for ( it = abLocal.begin(); it != abLocal.end(); ++it ) {
2961 (*it).setID( mCurrentSyncDevice, (*it).uid() ); 2955 (*it).setID( mCurrentSyncDevice, (*it).uid() );
2962 (*it).computeCsum( mCurrentSyncDevice ); 2956 (*it).computeCsum( mCurrentSyncDevice );
2963 } 2957 }
2964 } 2958 }
2965 } 2959 }
2966 //AddressBook::Iterator it; 2960 //AddressBook::Iterator it;
2967 //QStringList vcards; 2961 //QStringList vcards;
2968 //for ( it = abLocal.begin(); it != abLocal.end(); ++it ) { 2962 //for ( it = abLocal.begin(); it != abLocal.end(); ++it ) {
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) ) {
3009 getEventViewerDialog()->setSyncMode( true ); 2988 getEventViewerDialog()->setSyncMode( true );
3010 syncOK = synchronizeCalendar( mCalendar, calendar, mode ); 2989 syncOK = synchronizeCalendar( mCalendar, calendar, mode );
3011 getEventViewerDialog()->setSyncMode( false ); 2990 getEventViewerDialog()->setSyncMode( false );
3012 if ( syncOK ) { 2991 if ( syncOK ) {
3013 if ( KOPrefs::instance()->mWriteBackFile ) 2992 if ( KOPrefs::instance()->mWriteBackFile )
3014 { 2993 {
3015 storage->setSaveFormat( new ICalFormat( KOPrefs::instance()->mUseQuicksave) ); 2994 storage->setSaveFormat( new ICalFormat( KOPrefs::instance()->mUseQuicksave) );
3016 storage->save(); 2995 storage->save();
3017 } 2996 }
3018 } 2997 }
3019 setModified(); 2998 setModified();
3020 } 2999 }
3021 3000
3022#endif 3001#endif
3023} 3002}
3024 3003
3025void KABCore::confSync() 3004void KABCore::confSync()
3026{ 3005{
3027 static KSyncPrefsDialog* sp = 0; 3006 static KSyncPrefsDialog* sp = 0;
3028 if ( ! sp ) { 3007 if ( ! sp ) {