summaryrefslogtreecommitdiffabout
path: root/kaddressbook
authorzautrix <zautrix>2004-10-13 14:23:28 (UTC)
committer zautrix <zautrix>2004-10-13 14:23:28 (UTC)
commit2cfda2af7cba3c9aff2d7722421b5d33b7f56cb6 (patch) (unidiff)
treef1e664ddf31aae347b1a119c9111cbd1c931bf89 /kaddressbook
parentd41893fb0a49fbb080326a4c1fd98e1a032a182a (diff)
downloadkdepimpi-2cfda2af7cba3c9aff2d7722421b5d33b7f56cb6.zip
kdepimpi-2cfda2af7cba3c9aff2d7722421b5d33b7f56cb6.tar.gz
kdepimpi-2cfda2af7cba3c9aff2d7722421b5d33b7f56cb6.tar.bz2
more sync fixes
Diffstat (limited to 'kaddressbook') (more/less context) (ignore whitespace changes)
-rw-r--r--kaddressbook/kabcore.cpp146
1 files changed, 75 insertions, 71 deletions
diff --git a/kaddressbook/kabcore.cpp b/kaddressbook/kabcore.cpp
index ea34be2..47ed858 100644
--- a/kaddressbook/kabcore.cpp
+++ b/kaddressbook/kabcore.cpp
@@ -2506,222 +2506,226 @@ bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBo
2506 // qDebug("set fulldate to true %s %s" ,addresseeLSync->dtStart().toString().latin1(), addresseeRSync->dtStart().toString().latin1() ); 2506 // qDebug("set fulldate to true %s %s" ,addresseeLSync->dtStart().toString().latin1(), addresseeRSync->dtStart().toString().latin1() );
2507 //qDebug("%d %d %d %d ", addresseeLSync->dtStart().time().second(), addresseeLSync->dtStart().time().msec() , addresseeRSync->dtStart().time().second(), addresseeRSync->dtStart().time().msec()); 2507 //qDebug("%d %d %d %d ", addresseeLSync->dtStart().time().second(), addresseeLSync->dtStart().time().msec() , addresseeRSync->dtStart().time().second(), addresseeRSync->dtStart().time().msec());
2508 fullDateRange = true; 2508 fullDateRange = true;
2509 qDebug("FULLDATE 3 %s %s", addresseeLSync.revision().toString().latin1() , addresseeRSync.revision().toString().latin1() ); 2509 qDebug("FULLDATE 3 %s %s", addresseeLSync.revision().toString().latin1() , addresseeRSync.revision().toString().latin1() );
2510 } 2510 }
2511 } 2511 }
2512 // fullDateRange = true; // debug only! 2512 // fullDateRange = true; // debug only!
2513 if ( fullDateRange ) 2513 if ( fullDateRange )
2514 mLastAddressbookSync = QDateTime::currentDateTime().addDays( -100*365); 2514 mLastAddressbookSync = QDateTime::currentDateTime().addDays( -100*365);
2515 else 2515 else
2516 mLastAddressbookSync = addresseeLSync.revision(); 2516 mLastAddressbookSync = addresseeLSync.revision();
2517 // for resyncing if own file has changed 2517 // for resyncing if own file has changed
2518 // PENDING fixme later when implemented 2518 // PENDING fixme later when implemented
2519#if 0 2519#if 0
2520 if ( mCurrentSyncDevice == "deleteaftersync" ) { 2520 if ( mCurrentSyncDevice == "deleteaftersync" ) {
2521 mLastAddressbookSync = loadedFileVersion; 2521 mLastAddressbookSync = loadedFileVersion;
2522 qDebug("setting mLastAddressbookSync "); 2522 qDebug("setting mLastAddressbookSync ");
2523 } 2523 }
2524#endif 2524#endif
2525 2525
2526 //qDebug("*************************** "); 2526 //qDebug("*************************** ");
2527 // qDebug("mLastAddressbookSync %s ",mLastAddressbookSync.toString().latin1() ); 2527 // qDebug("mLastAddressbookSync %s ",mLastAddressbookSync.toString().latin1() );
2528 QStringList er = remote->uidList(); 2528 QStringList er = remote->uidList();
2529 Addressee inR ;//= er.first(); 2529 Addressee inR ;//= er.first();
2530 Addressee inL; 2530 Addressee inL;
2531 2531
2532 syncManager->showProgressBar(0, i18n("Syncing - close to abort!"), er.count()); 2532 syncManager->showProgressBar(0, i18n("Syncing - close to abort!"), er.count());
2533 2533
2534 int modulo = (er.count()/10)+1; 2534 int modulo = (er.count()/10)+1;
2535 int incCounter = 0; 2535 int incCounter = 0;
2536 while ( incCounter < er.count()) { 2536 while ( incCounter < er.count()) {
2537 if (syncManager->isProgressBarCanceled()) 2537 if (syncManager->isProgressBarCanceled())
2538 return false; 2538 return false;
2539 if ( incCounter % modulo == 0 ) 2539 if ( incCounter % modulo == 0 )
2540 syncManager->showProgressBar(incCounter); 2540 syncManager->showProgressBar(incCounter);
2541 2541
2542 uid = er[ incCounter ]; 2542 uid = er[ incCounter ];
2543 bool skipIncidence = false; 2543 bool skipIncidence = false;
2544 if ( uid.left(19) == QString("last-syncAddressee-") ) 2544 if ( uid.left(19) == QString("last-syncAddressee-") )
2545 skipIncidence = true; 2545 skipIncidence = true;
2546 QString idS,OidS; 2546 QString idS,OidS;
2547 qApp->processEvents(); 2547 qApp->processEvents();
2548 if ( !skipIncidence ) { 2548 if ( !skipIncidence ) {
2549 inL = local->findByUid( uid ); 2549 inL = local->findByUid( uid );
2550 inR = remote->findByUid( uid ); 2550 inR = remote->findByUid( uid );
2551 //inL.setResource( 0 ); 2551 //inL.setResource( 0 );
2552 //inR.setResource( 0 ); 2552 //inR.setResource( 0 );
2553 if ( !inL.isEmpty() ) { // maybe conflict - same uid in both calendars 2553 if ( !inL.isEmpty() ) { // maybe conflict - same uid in both calendars
2554 if ( take = takeAddressee( &inL, &inR, mode, fullDateRange ) ) { 2554 if ( !inL.resource() || inL.resource()->includeInSync() ) {
2555 //qDebug("take %d %s ", take, inL.summary().latin1()); 2555 if ( take = takeAddressee( &inL, &inR, mode, fullDateRange ) ) {
2556 if ( take == 3 ) 2556 //qDebug("take %d %s ", take, inL.summary().latin1());
2557 return false; 2557 if ( take == 3 )
2558 if ( take == 1 ) {// take local 2558 return false;
2559 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2559 if ( take == 1 ) {// take local
2560 inL.setCsum( mCurrentSyncDevice, inR.getCsum(mCurrentSyncDevice) ); 2560 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2561 inL.setID( mCurrentSyncDevice, inR.getID(mCurrentSyncDevice) ); 2561 inL.setCsum( mCurrentSyncDevice, inR.getCsum(mCurrentSyncDevice) );
2562 local->insertAddressee( inL, false ); 2562 inL.setID( mCurrentSyncDevice, inR.getID(mCurrentSyncDevice) );
2563 idS = inR.externalUID(); 2563 local->insertAddressee( inL, false );
2564 OidS = inR.originalExternalUID(); 2564 idS = inR.externalUID();
2565 } 2565 OidS = inR.originalExternalUID();
2566 else 2566 }
2567 idS = inR.IDStr(); 2567 else
2568 remote->removeAddressee( inR ); 2568 idS = inR.IDStr();
2569 inR = inL; 2569 remote->removeAddressee( inR );
2570 inR.setTempSyncStat( SYNC_TEMPSTATE_INITIAL ); 2570 inR = inL;
2571 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2571 inR.setTempSyncStat( SYNC_TEMPSTATE_INITIAL );
2572 inR.setOriginalExternalUID( OidS ); 2572 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2573 inR.setExternalUID( idS ); 2573 inR.setOriginalExternalUID( OidS );
2574 } else { 2574 inR.setExternalUID( idS );
2575 inR.setIDStr( idS ); 2575 } else {
2576 } 2576 inR.setIDStr( idS );
2577 inR.setResource( 0 ); 2577 }
2578 remote->insertAddressee( inR , false); 2578 inR.setResource( 0 );
2579 ++changedRemote; 2579 remote->insertAddressee( inR , false);
2580 } else { // take == 2 take remote 2580 ++changedRemote;
2581 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2581 } else { // take == 2 take remote
2582 if ( inR.revision().date().year() < 2004 ) 2582 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2583 inR.setRevision( modifiedCalendar ); 2583 if ( inR.revision().date().year() < 2004 )
2584 } 2584 inR.setRevision( modifiedCalendar );
2585 idS = inL.IDStr(); 2585 }
2586 local->removeAddressee( inL ); 2586 idS = inL.IDStr();
2587 inL = inR; 2587 local->removeAddressee( inL );
2588 inL.setIDStr( idS ); 2588 inL = inR;
2589 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2589 inL.setIDStr( idS );
2590 inL.setCsum( mCurrentSyncDevice, inR.getCsum(mCurrentSyncDevice) ); 2590 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2591 inL.setID( mCurrentSyncDevice, inR.getID(mCurrentSyncDevice) ); 2591 inL.setCsum( mCurrentSyncDevice, inR.getCsum(mCurrentSyncDevice) );
2592 inL.setID( mCurrentSyncDevice, inR.getID(mCurrentSyncDevice) );
2593 }
2594 inL.setResource( 0 );
2595 local->insertAddressee( inL , false );
2596 ++changedLocal;
2592 } 2597 }
2593 inL.setResource( 0 );
2594 local->insertAddressee( inL , false );
2595 ++changedLocal;
2596 } 2598 }
2597 } 2599 }
2598 } else { // no conflict 2600 } else { // no conflict
2599 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2601 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2600 QString des = addresseeLSync.note(); 2602 QString des = addresseeLSync.note();
2601 if ( des.find( inR.getID(mCurrentSyncDevice) +"," ) >= 0 && mode != 5) { // delete it 2603 if ( des.find( inR.getID(mCurrentSyncDevice) +"," ) >= 0 && mode != 5) { // delete it
2602 inR.setTempSyncStat( SYNC_TEMPSTATE_DELETE ); 2604 inR.setTempSyncStat( SYNC_TEMPSTATE_DELETE );
2603 remote->insertAddressee( inR, false ); 2605 remote->insertAddressee( inR, false );
2604 ++deletedAddresseeR; 2606 ++deletedAddresseeR;
2605 } else { 2607 } else {
2606 inR.setRevision( modifiedCalendar ); 2608 inR.setRevision( modifiedCalendar );
2607 remote->insertAddressee( inR, false ); 2609 remote->insertAddressee( inR, false );
2608 inL = inR; 2610 inL = inR;
2609 inL.setResource( 0 ); 2611 inL.setResource( 0 );
2610 local->insertAddressee( inL , false); 2612 local->insertAddressee( inL , false);
2611 ++addedAddressee; 2613 ++addedAddressee;
2612 } 2614 }
2613 } else { 2615 } else {
2614 if ( inR.revision() > mLastAddressbookSync || mode == 5 ) { 2616 if ( inR.revision() > mLastAddressbookSync || mode == 5 ) {
2615 inR.setRevision( modifiedCalendar ); 2617 inR.setRevision( modifiedCalendar );
2616 remote->insertAddressee( inR, false ); 2618 remote->insertAddressee( inR, false );
2617 inR.setResource( 0 ); 2619 inR.setResource( 0 );
2618 local->insertAddressee( inR, false ); 2620 local->insertAddressee( inR, false );
2619 ++addedAddressee; 2621 ++addedAddressee;
2620 } else { 2622 } else {
2621 // pending checkExternSyncAddressee(addresseeRSyncSharp, inR); 2623 // pending checkExternSyncAddressee(addresseeRSyncSharp, inR);
2622 remote->removeAddressee( inR ); 2624 remote->removeAddressee( inR );
2623 ++deletedAddresseeR; 2625 ++deletedAddresseeR;
2624 } 2626 }
2625 } 2627 }
2626 } 2628 }
2627 } 2629 }
2628 ++incCounter; 2630 ++incCounter;
2629 } 2631 }
2630 er.clear(); 2632 er.clear();
2631 QStringList el = local->uidList(); 2633 QStringList el = local->uidList();
2632 modulo = (el.count()/10)+1; 2634 modulo = (el.count()/10)+1;
2633 2635
2634 syncManager->showProgressBar(0, i18n("Add / remove addressees"), el.count()); 2636 syncManager->showProgressBar(0, i18n("Add / remove addressees"), el.count());
2635 incCounter = 0; 2637 incCounter = 0;
2636 while ( incCounter < el.count()) { 2638 while ( incCounter < el.count()) {
2637 qApp->processEvents(); 2639 qApp->processEvents();
2638 if (syncManager->isProgressBarCanceled()) 2640 if (syncManager->isProgressBarCanceled())
2639 return false; 2641 return false;
2640 if ( incCounter % modulo == 0 ) 2642 if ( incCounter % modulo == 0 )
2641 syncManager->showProgressBar(incCounter); 2643 syncManager->showProgressBar(incCounter);
2642 uid = el[ incCounter ]; 2644 uid = el[ incCounter ];
2643 bool skipIncidence = false; 2645 bool skipIncidence = false;
2644 if ( uid.left(19) == QString("last-syncAddressee-") ) 2646 if ( uid.left(19) == QString("last-syncAddressee-") )
2645 skipIncidence = true; 2647 skipIncidence = true;
2646 if ( !skipIncidence ) { 2648 if ( !skipIncidence ) {
2647 inL = local->findByUid( uid ); 2649 inL = local->findByUid( uid );
2648 inR = remote->findByUid( uid ); 2650 if ( !inL.resource() || inL.resource()->includeInSync() ) {
2649 if ( inR.isEmpty() ) { 2651 inR = remote->findByUid( uid );
2650 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2652 if ( inR.isEmpty() ) {
2651 if ( !inL.getID(mCurrentSyncDevice).isEmpty() && mode != 4 ) { 2653 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2652 // pending checkExternSyncAddressee(addresseeLSyncSharp, inL); 2654 if ( !inL.getID(mCurrentSyncDevice).isEmpty() && mode != 4 ) {
2653 local->removeAddressee( inL ); 2655 // pending checkExternSyncAddressee(addresseeLSyncSharp, inL);
2654 ++deletedAddresseeL; 2656 local->removeAddressee( inL );
2655 } else { 2657 ++deletedAddresseeL;
2656 if ( ! syncManager->mWriteBackExistingOnly ) { 2658 } else {
2657 inL.removeID(mCurrentSyncDevice ); 2659 if ( ! syncManager->mWriteBackExistingOnly ) {
2658 ++addedAddresseeR; 2660 inL.removeID(mCurrentSyncDevice );
2659 inL.setRevision( modifiedCalendar ); 2661 ++addedAddresseeR;
2660 local->insertAddressee( inL, false ); 2662 inL.setRevision( modifiedCalendar );
2661 inR = inL; 2663 local->insertAddressee( inL, false );
2662 inR.setTempSyncStat( SYNC_TEMPSTATE_ADDED_EXTERNAL ); 2664 inR = inL;
2663 inR.setResource( 0 ); 2665 inR.setTempSyncStat( SYNC_TEMPSTATE_ADDED_EXTERNAL );
2664 remote->insertAddressee( inR, false ); 2666 inR.setResource( 0 );
2667 remote->insertAddressee( inR, false );
2668 }
2665 } 2669 }
2666 }
2667 } else {
2668 if ( inL.revision() < mLastAddressbookSync && mode != 4 ) {
2669 // pending checkExternSyncAddressee(addresseeLSyncSharp, inL);
2670 local->removeAddressee( inL );
2671 ++deletedAddresseeL;
2672 } else { 2670 } else {
2673 if ( ! syncManager->mWriteBackExistingOnly ) { 2671 if ( inL.revision() < mLastAddressbookSync && mode != 4 ) {
2674 ++addedAddresseeR; 2672 // pending checkExternSyncAddressee(addresseeLSyncSharp, inL);
2675 inL.setRevision( modifiedCalendar ); 2673 local->removeAddressee( inL );
2676 local->insertAddressee( inL, false ); 2674 ++deletedAddresseeL;
2677 inR = inL; 2675 } else {
2678 inR.setResource( 0 ); 2676 if ( ! syncManager->mWriteBackExistingOnly ) {
2679 remote->insertAddressee( inR, false ); 2677 ++addedAddresseeR;
2678 inL.setRevision( modifiedCalendar );
2679 local->insertAddressee( inL, false );
2680 inR = inL;
2681 inR.setResource( 0 );
2682 remote->insertAddressee( inR, false );
2683 }
2680 } 2684 }
2681 } 2685 }
2682 } 2686 }
2683 } 2687 }
2684 } 2688 }
2685 ++incCounter; 2689 ++incCounter;
2686 } 2690 }
2687 el.clear(); 2691 el.clear();
2688 syncManager->hideProgressBar(); 2692 syncManager->hideProgressBar();
2689 mLastAddressbookSync = QDateTime::currentDateTime().addSecs( 1 ); 2693 mLastAddressbookSync = QDateTime::currentDateTime().addSecs( 1 );
2690 // get rid of micro seconds 2694 // get rid of micro seconds
2691 QTime t = mLastAddressbookSync.time(); 2695 QTime t = mLastAddressbookSync.time();
2692 mLastAddressbookSync.setTime( QTime (t.hour (), t.minute (), t.second () ) ); 2696 mLastAddressbookSync.setTime( QTime (t.hour (), t.minute (), t.second () ) );
2693 addresseeLSync.setRevision( mLastAddressbookSync ); 2697 addresseeLSync.setRevision( mLastAddressbookSync );
2694 addresseeRSync.setRevision( mLastAddressbookSync ); 2698 addresseeRSync.setRevision( mLastAddressbookSync );
2695 addresseeRSync.setRole( i18n("!Remote from: ")+mCurrentSyncName ) ; 2699 addresseeRSync.setRole( i18n("!Remote from: ")+mCurrentSyncName ) ;
2696 addresseeLSync.setRole(i18n("!Local from: ") + mCurrentSyncName ); 2700 addresseeLSync.setRole(i18n("!Local from: ") + mCurrentSyncName );
2697 addresseeRSync.setGivenName( i18n("!DO NOT EDIT!") ) ; 2701 addresseeRSync.setGivenName( i18n("!DO NOT EDIT!") ) ;
2698 addresseeLSync.setGivenName(i18n("!DO NOT EDIT!") ); 2702 addresseeLSync.setGivenName(i18n("!DO NOT EDIT!") );
2699 addresseeRSync.setOrganization( "!"+mLastAddressbookSync.toString() ) ; 2703 addresseeRSync.setOrganization( "!"+mLastAddressbookSync.toString() ) ;
2700 addresseeLSync.setOrganization("!"+ mLastAddressbookSync.toString() ); 2704 addresseeLSync.setOrganization("!"+ mLastAddressbookSync.toString() );
2701 addresseeRSync.setNote( "" ) ; 2705 addresseeRSync.setNote( "" ) ;
2702 addresseeLSync.setNote( "" ); 2706 addresseeLSync.setNote( "" );
2703 2707
2704 if ( mGlobalSyncMode == SYNC_MODE_NORMAL) 2708 if ( mGlobalSyncMode == SYNC_MODE_NORMAL)
2705 remote->insertAddressee( addresseeRSync, false ); 2709 remote->insertAddressee( addresseeRSync, false );
2706 local->insertAddressee( addresseeLSync, false ); 2710 local->insertAddressee( addresseeLSync, false );
2707 QString mes; 2711 QString mes;
2708 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 ); 2712 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 );
2709 if ( syncManager->mShowSyncSummary ) { 2713 if ( syncManager->mShowSyncSummary ) {
2710 KMessageBox::information(this, mes, i18n("KA/Pi Synchronization") ); 2714 KMessageBox::information(this, mes, i18n("KA/Pi Synchronization") );
2711 } 2715 }
2712 qDebug( mes ); 2716 qDebug( mes );
2713 return syncOK; 2717 return syncOK;
2714} 2718}
2715 2719
2716 2720
2717//this is a overwritten callbackmethods from the syncinterface 2721//this is a overwritten callbackmethods from the syncinterface
2718bool KABCore::sync(KSyncManager* manager, QString filename, int mode) 2722bool KABCore::sync(KSyncManager* manager, QString filename, int mode)
2719{ 2723{
2720 2724
2721 //pending prepare addresseeview for output 2725 //pending prepare addresseeview for output
2722 //pending detect, if remote file has REV field. if not switch to external sync 2726 //pending detect, if remote file has REV field. if not switch to external sync
2723 mGlobalSyncMode = SYNC_MODE_NORMAL; 2727 mGlobalSyncMode = SYNC_MODE_NORMAL;
2724 QString mCurrentSyncDevice = manager->getCurrentSyncDevice(); 2728 QString mCurrentSyncDevice = manager->getCurrentSyncDevice();
2725 2729
2726 AddressBook abLocal(filename,"syncContact"); 2730 AddressBook abLocal(filename,"syncContact");
2727 bool syncOK = false; 2731 bool syncOK = false;