author | zautrix <zautrix> | 2004-09-19 20:27:44 (UTC) |
---|---|---|
committer | zautrix <zautrix> | 2004-09-19 20:27:44 (UTC) |
commit | 3da2cfeab2edbe64a17251662e56668fe143f7a3 (patch) (unidiff) | |
tree | 37e8d4445fca84bd4e93af38c96c5c489f9cbca8 | |
parent | afa28a62314117555d6b32291188eedd1a576284 (diff) | |
download | kdepimpi-3da2cfeab2edbe64a17251662e56668fe143f7a3.zip kdepimpi-3da2cfeab2edbe64a17251662e56668fe143f7a3.tar.gz kdepimpi-3da2cfeab2edbe64a17251662e56668fe143f7a3.tar.bz2 |
more AB sync
-rw-r--r-- | kabc/addressbook.cpp | 32 | ||||
-rw-r--r-- | kabc/addressbook.h | 3 | ||||
-rw-r--r-- | kaddressbook/kabcore.cpp | 25 |
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 | |||
@@ -589,32 +589,64 @@ AddressBook::Iterator AddressBook::find( const Addressee &a ) | |||
589 | return it; | 589 | return it; |
590 | } | 590 | } |
591 | } | 591 | } |
592 | return end(); | 592 | return end(); |
593 | } | 593 | } |
594 | 594 | ||
595 | Addressee AddressBook::findByUid( const QString &uid ) | 595 | Addressee 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 | } |
605 | void 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 | } | ||
615 | void 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 | |||
605 | Addressee AddressBook::findByExternUid( const QString& uid , const QString& profile ) | 637 | Addressee 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 | } |
614 | void AddressBook::mergeAB( AddressBook *aBook, const QString& profile ) | 646 | void 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() ) { |
diff --git a/kabc/addressbook.h b/kabc/addressbook.h index f40e015..157dc56 100644 --- a/kabc/addressbook.h +++ b/kabc/addressbook.h | |||
@@ -282,32 +282,35 @@ class AddressBook : public QObject | |||
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 | ||
diff --git a/kaddressbook/kabcore.cpp b/kaddressbook/kabcore.cpp index b3d88de..8f3ca9b 100644 --- a/kaddressbook/kabcore.cpp +++ b/kaddressbook/kabcore.cpp | |||
@@ -2915,39 +2915,33 @@ bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBo | |||
2915 | } | 2915 | } |
2916 | 2916 | ||
2917 | bool KABCore::syncAB(QString filename, int mode) | 2917 | bool 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; |
@@ -2965,48 +2959,33 @@ bool KABCore::syncAB(QString filename, int mode) | |||
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 ) { |