summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--kabc/addressbook.cpp5
-rw-r--r--kabc/addressbook.h2
-rw-r--r--kabc/addressee.cpp1
-rw-r--r--kaddressbook/kabcore.cpp200
-rw-r--r--kaddressbook/kabcore.h1
5 files changed, 171 insertions, 38 deletions
diff --git a/kabc/addressbook.cpp b/kabc/addressbook.cpp
index 6e8d027..3ec0795 100644
--- a/kabc/addressbook.cpp
+++ b/kabc/addressbook.cpp
@@ -446,5 +446,5 @@ Ticket *AddressBook::requestSaveTicket( Resource *resource )
446} 446}
447 447
448void AddressBook::insertAddressee( const Addressee &a ) 448void AddressBook::insertAddressee( const Addressee &a, bool setRev )
449{ 449{
450 Addressee::List::Iterator it; 450 Addressee::List::Iterator it;
@@ -461,5 +461,6 @@ void AddressBook::insertAddressee( const Addressee &a )
461 461
462 if ( changed ) { 462 if ( changed ) {
463 (*it).setRevision( QDateTime::currentDateTime() ); 463 if ( setRev )
464 (*it).setRevision( QDateTime::currentDateTime() );
464 (*it).setChanged( true ); 465 (*it).setChanged( true );
465 } 466 }
diff --git a/kabc/addressbook.h b/kabc/addressbook.h
index 650a638..253de68 100644
--- a/kabc/addressbook.h
+++ b/kabc/addressbook.h
@@ -174,5 +174,5 @@ class AddressBook : public QObject
174 one. If not the new object is appended to the address book. 174 one. If not the new object is appended to the address book.
175 */ 175 */
176 void insertAddressee( const Addressee & ); 176 void insertAddressee( const Addressee &, bool setRev = true );
177 177
178 /** 178 /**
diff --git a/kabc/addressee.cpp b/kabc/addressee.cpp
index fb32f6e..7f04d8f 100644
--- a/kabc/addressee.cpp
+++ b/kabc/addressee.cpp
@@ -94,4 +94,5 @@ Addressee::Addressee()
94 mData->resource = 0; 94 mData->resource = 0;
95 mData->mExternalId = ":"; 95 mData->mExternalId = ":";
96 mData->revision = QDateTime ( QDate( 2004,1,1));
96 mTempSyncStat = SYNC_TEMPSTATE_INITIAL; 97 mTempSyncStat = SYNC_TEMPSTATE_INITIAL;
97} 98}
diff --git a/kaddressbook/kabcore.cpp b/kaddressbook/kabcore.cpp
index f497541..226d5e4 100644
--- a/kaddressbook/kabcore.cpp
+++ b/kaddressbook/kabcore.cpp
@@ -2524,5 +2524,6 @@ KABC::Addressee KABCore::getLastSyncAddressee()
2524 lse = mAddressBook->findByUid( "last-syncAddressee-"+mCurrentSyncDevice ); 2524 lse = mAddressBook->findByUid( "last-syncAddressee-"+mCurrentSyncDevice );
2525 if (lse.isEmpty()) { 2525 if (lse.isEmpty()) {
2526 lse.setUid( "last-syncEvent-"+mCurrentSyncDevice ); 2526 qDebug("Creating new last-syncAddressee ");
2527 lse.setUid( "last-syncAddressee-"+mCurrentSyncDevice );
2527 QString sum = ""; 2528 QString sum = "";
2528 if ( KABPrefs::instance()->mExternSyncProfiles.contains( mCurrentSyncDevice ) ) 2529 if ( KABPrefs::instance()->mExternSyncProfiles.contains( mCurrentSyncDevice ) )
@@ -2535,5 +2536,138 @@ KABC::Addressee KABCore::getLastSyncAddressee()
2535 return lse; 2536 return lse;
2536} 2537}
2537 2538int KABCore::takeAddressee( KABC::Addressee* local, KABC::Addressee* remote, int mode , bool full )
2539{
2540
2541 //void setZaurusId(int id);
2542 // int zaurusId() const;
2543 // void setZaurusUid(int id);
2544 // int zaurusUid() const;
2545 // void setZaurusStat(int id);
2546 // int zaurusStat() const;
2547 // 0 equal
2548 // 1 take local
2549 // 2 take remote
2550 // 3 cancel
2551 QDateTime lastSync = mLastAddressbookSync;
2552 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2553 bool remCh, locCh;
2554 remCh = ( remote->getCsum(mCurrentSyncDevice) != local->getCsum(mCurrentSyncDevice) );
2555 //if ( remCh )
2556 //qDebug("loc %s rem %s", local->getCsum(mCurrentSyncDevice).latin1(), remote->getCsum(mCurrentSyncDevice).latin1() );
2557 locCh = ( local->revision() > mLastAddressbookSync );
2558 if ( !remCh && ! locCh ) {
2559 //qDebug("both not changed ");
2560 lastSync = local->revision().addDays(1);
2561 } else {
2562 if ( locCh ) {
2563 //qDebug("loc changed %d %s %s", local->revision() , local->lastModified().toString().latin1(), mLastCalendarSync.toString().latin1());
2564 lastSync = local->revision().addDays( -1 );
2565 if ( !remCh )
2566 remote->setRevision( lastSync.addDays( -1 ) );
2567 } else {
2568 //qDebug(" not loc changed ");
2569 lastSync = local->revision().addDays( 1 );
2570 if ( remCh )
2571 remote->setRevision( lastSync.addDays( 1 ) );
2572
2573 }
2574 }
2575 full = true;
2576 if ( mode < SYNC_PREF_ASK )
2577 mode = SYNC_PREF_ASK;
2578 } else {
2579 if ( local->revision() == remote->revision() )
2580 return 0;
2581
2582 }
2583 // qDebug(" %d %d conflict on %s %s ", mode, full, local->summary().latin1(), remote->summary().latin1() );
2584
2585 //qDebug("%s %d %s %d", local->lastModified().toString().latin1() , local->revision(), remote->lastModified().toString().latin1(), remote->revision());
2586 //qDebug("%d %d %d %d ", local->lastModified().time().second(), local->lastModified().time().msec(), remote->lastModified().time().second(), remote->lastModified().time().msec() );
2587 //full = true; //debug only
2588 if ( full ) {
2589 bool equ = ( (*local) == (*remote) );
2590 if ( equ ) {
2591 //qDebug("equal ");
2592 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2593 local->setCsum( mCurrentSyncDevice, remote->getCsum(mCurrentSyncDevice) );
2594 }
2595 if ( mode < SYNC_PREF_FORCE_LOCAL )
2596 return 0;
2597
2598 }//else //debug only
2599 //qDebug("not equal %s %s ", local->summary().latin1(), remote->summary().latin1());
2600 }
2601 int result;
2602 bool localIsNew;
2603 //qDebug("%s -- %s mLastCalendarSync %s lastsync %s --- local %s remote %s ",local->summary().latin1(), remote->summary().latin1(),mLastCalendarSync.toString().latin1() ,lastSync.toString().latin1() , local->lastModified().toString().latin1() , remote->lastModified().toString().latin1() );
2604
2605 if ( full && mode < SYNC_PREF_NEWEST )
2606 mode = SYNC_PREF_ASK;
2607
2608 switch( mode ) {
2609 case SYNC_PREF_LOCAL:
2610 if ( lastSync > remote->revision() )
2611 return 1;
2612 if ( lastSync > local->revision() )
2613 return 2;
2614 return 1;
2615 break;
2616 case SYNC_PREF_REMOTE:
2617 if ( lastSync > remote->revision() )
2618 return 1;
2619 if ( lastSync > local->revision() )
2620 return 2;
2621 return 2;
2622 break;
2623 case SYNC_PREF_NEWEST:
2624 if ( local->revision() > remote->revision() )
2625 return 1;
2626 else
2627 return 2;
2628 break;
2629 case SYNC_PREF_ASK:
2630 qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), local->revision().toString().latin1(), remote->revision().toString().latin1() );
2631 if ( lastSync > remote->revision() )
2632 return 1;
2633 if ( lastSync > local->revision() )
2634 return 2;
2635 //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), local->revision().toString().latin1(), remote->revision().toString().latin1() );
2636 localIsNew = local->revision() >= remote->revision();
2637#if 0
2638 if ( localIsNew )
2639 getEventViewerDialog()->setColorMode( 1 );
2640 else
2641 getEventViewerDialog()->setColorMode( 2 );
2642 getEventViewerDialog()->setIncidence(local);
2643 if ( localIsNew )
2644 getEventViewerDialog()->setColorMode( 2 );
2645 else
2646 getEventViewerDialog()->setColorMode( 1 );
2647 getEventViewerDialog()->addIncidence(remote);
2648 getEventViewerDialog()->setColorMode( 0 );
2649 //qDebug("local %d remote %d ",local->relatedTo(),remote->relatedTo() );
2650 getEventViewerDialog()->setCaption( mCurrentSyncDevice +i18n(" : Conflict! Please choose entry!"));
2651 getEventViewerDialog()->showMe();
2652 result = getEventViewerDialog()->executeS( localIsNew );
2653#endif
2654 qDebug("conflict! ************************************** ");
2655 result = 1;
2656 return result;
2657
2658 break;
2659 case SYNC_PREF_FORCE_LOCAL:
2660 return 1;
2661 break;
2662 case SYNC_PREF_FORCE_REMOTE:
2663 return 2;
2664 break;
2665
2666 default:
2667 // SYNC_PREF_TAKE_BOTH not implemented
2668 break;
2669 }
2670 return 0;
2671}
2538bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBook* remote,int mode) 2672bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBook* remote,int mode)
2539{ 2673{
@@ -2559,4 +2693,5 @@ bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBo
2559 QDateTime modifiedCalendar = mLastAddressbookSync;; 2693 QDateTime modifiedCalendar = mLastAddressbookSync;;
2560 addresseeLSync = getLastSyncAddressee(); 2694 addresseeLSync = getLastSyncAddressee();
2695 qDebug("Last Sync %s ", addresseeLSync.revision().toString().latin1());
2561 addresseeR = remote->findByUid("last-syncAddressee-"+mCurrentSyncName ); 2696 addresseeR = remote->findByUid("last-syncAddressee-"+mCurrentSyncName );
2562 if ( !addresseeR.isEmpty() ) { 2697 if ( !addresseeR.isEmpty() ) {
@@ -2568,4 +2703,5 @@ bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBo
2568 addresseeRSync = addresseeLSync ; 2703 addresseeRSync = addresseeLSync ;
2569 } else { 2704 } else {
2705 qDebug("FULLDATE 1");
2570 fullDateRange = true; 2706 fullDateRange = true;
2571 Addressee newAdd; 2707 Addressee newAdd;
@@ -2577,6 +2713,8 @@ bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBo
2577 } 2713 }
2578 } 2714 }
2579 if ( addresseeLSync.revision() == mLastAddressbookSync ) 2715 if ( addresseeLSync.revision() == mLastAddressbookSync ) {
2716 qDebug("FULLDATE 2");
2580 fullDateRange = true; 2717 fullDateRange = true;
2718 }
2581 if ( ! fullDateRange ) { 2719 if ( ! fullDateRange ) {
2582 if ( addresseeLSync.revision() != addresseeRSync.revision() ) { 2720 if ( addresseeLSync.revision() != addresseeRSync.revision() ) {
@@ -2585,4 +2723,5 @@ bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBo
2585 //qDebug("%d %d %d %d ", addresseeLSync->dtStart().time().second(), addresseeLSync->dtStart().time().msec() , addresseeRSync->dtStart().time().second(), addresseeRSync->dtStart().time().msec()); 2723 //qDebug("%d %d %d %d ", addresseeLSync->dtStart().time().second(), addresseeLSync->dtStart().time().msec() , addresseeRSync->dtStart().time().second(), addresseeRSync->dtStart().time().msec());
2586 fullDateRange = true; 2724 fullDateRange = true;
2725 qDebug("FULLDATE 3 %s %s", addresseeLSync.revision().toString().latin1() , addresseeRSync.revision().toString().latin1() );
2587 } 2726 }
2588 } 2727 }
@@ -2635,6 +2774,5 @@ bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBo
2635 //inR.setResource( 0 ); 2774 //inR.setResource( 0 );
2636 if ( !inL.isEmpty() ) { // maybe conflict - same uid in both calendars 2775 if ( !inL.isEmpty() ) { // maybe conflict - same uid in both calendars
2637 // pending if ( (take = takeAddressee( inL, inR, mode, fullDateRange )) > 0 ) { 2776 if ( take = takeAddressee( &inL, &inR, mode, fullDateRange ) ) {
2638 if ( true ) {
2639 //qDebug("take %d %s ", take, inL.summary().latin1()); 2777 //qDebug("take %d %s ", take, inL.summary().latin1());
2640 if ( take == 3 ) 2778 if ( take == 3 )
@@ -2643,5 +2781,5 @@ bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBo
2643 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2781 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2644 inL.setCsum( mCurrentSyncDevice, inR.getCsum(mCurrentSyncDevice) ); 2782 inL.setCsum( mCurrentSyncDevice, inR.getCsum(mCurrentSyncDevice) );
2645 local->insertAddressee( inL ); 2783 local->insertAddressee( inL, false );
2646 } 2784 }
2647 else 2785 else
@@ -2653,5 +2791,5 @@ bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBo
2653 inR.setIDStr( idS ); 2791 inR.setIDStr( idS );
2654 inR.setResource( 0 ); 2792 inR.setResource( 0 );
2655 remote->insertAddressee( inR ); 2793 remote->insertAddressee( inR , false);
2656 ++changedRemote; 2794 ++changedRemote;
2657 } else { 2795 } else {
@@ -2661,5 +2799,5 @@ bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBo
2661 inL.setIDStr( idS ); 2799 inL.setIDStr( idS );
2662 inL.setResource( 0 ); 2800 inL.setResource( 0 );
2663 local->insertAddressee( inL ); 2801 local->insertAddressee( inL , false );
2664 ++changedLocal; 2802 ++changedLocal;
2665 } 2803 }
@@ -2674,8 +2812,8 @@ bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBo
2674 } else { 2812 } else {
2675 inR.setRevision( modifiedCalendar ); 2813 inR.setRevision( modifiedCalendar );
2676 remote->insertAddressee( inR ); 2814 remote->insertAddressee( inR, false );
2677 inL = inR; 2815 inL = inR;
2678 inL.setResource( 0 ); 2816 inL.setResource( 0 );
2679 local->insertAddressee( inL ); 2817 local->insertAddressee( inL , false);
2680 ++addedAddressee; 2818 ++addedAddressee;
2681 } 2819 }
@@ -2683,7 +2821,7 @@ bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBo
2683 if ( inR.revision() > mLastAddressbookSync || mode == 5 ) { 2821 if ( inR.revision() > mLastAddressbookSync || mode == 5 ) {
2684 inR.setRevision( modifiedCalendar ); 2822 inR.setRevision( modifiedCalendar );
2685 remote->insertAddressee( inR ); 2823 remote->insertAddressee( inR, false );
2686 inR.setResource( 0 ); 2824 inR.setResource( 0 );
2687 local->insertAddressee( inR ); 2825 local->insertAddressee( inR, false );
2688 ++addedAddressee; 2826 ++addedAddressee;
2689 } else { 2827 } else {
@@ -2732,9 +2870,9 @@ bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBo
2732 //qDebug("remote added Incidence %s ", inL.summary().latin1()); 2870 //qDebug("remote added Incidence %s ", inL.summary().latin1());
2733 inL.setRevision( modifiedCalendar ); 2871 inL.setRevision( modifiedCalendar );
2734 local->insertAddressee( inL ); 2872 local->insertAddressee( inL, false );
2735 inR = inL; 2873 inR = inL;
2736 inR.setTempSyncStat( SYNC_TEMPSTATE_INITIAL ); 2874 inR.setTempSyncStat( SYNC_TEMPSTATE_INITIAL );
2737 inR.setResource( 0 ); 2875 inR.setResource( 0 );
2738 remote->insertAddressee( inR ); 2876 remote->insertAddressee( inR, false );
2739 } 2877 }
2740 } 2878 }
@@ -2748,8 +2886,8 @@ bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBo
2748 ++addedAddresseeR; 2886 ++addedAddresseeR;
2749 inL.setRevision( modifiedCalendar ); 2887 inL.setRevision( modifiedCalendar );
2750 local->insertAddressee( inL ); 2888 local->insertAddressee( inL, false );
2751 inR = inL; 2889 inR = inL;
2752 inR.setResource( 0 ); 2890 inR.setResource( 0 );
2753 remote->insertAddressee( inR ); 2891 remote->insertAddressee( inR, false );
2754 } 2892 }
2755 } 2893 }
@@ -2760,7 +2898,6 @@ bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBo
2760 } 2898 }
2761 el.clear(); 2899 el.clear();
2762 int delFut = 0;
2763 2900
2764 #if 0 2901
2765 2902
2766 bar.hide(); 2903 bar.hide();
@@ -2768,25 +2905,18 @@ bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBo
2768 addresseeLSync.setRevision( mLastAddressbookSync ); 2905 addresseeLSync.setRevision( mLastAddressbookSync );
2769 addresseeRSync.setRevision( mLastAddressbookSync ); 2906 addresseeRSync.setRevision( mLastAddressbookSync );
2770 addresseeRSync.setLocation( i18n("Remote from: ")+mCurrentSyncName ) ; 2907 addresseeRSync.setGivenName( i18n("Remote from: ")+mCurrentSyncName ) ;
2771 addresseeLSync.setLocation(i18n("Local from: ") + mCurrentSyncName ); 2908 addresseeLSync.setGivenName(i18n("Local from: ") + mCurrentSyncName );
2772 addresseeLSync.setReadOnly( true );
2773 if ( mGlobalSyncMode == SYNC_MODE_NORMAL) 2909 if ( mGlobalSyncMode == SYNC_MODE_NORMAL)
2774 remote->addAddressee( addresseeRSync ); 2910 remote->insertAddressee( addresseeRSync, false );
2911 local->insertAddressee( addresseeLSync, false );
2775 QString mes; 2912 QString mes;
2776 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 ); 2913 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 );
2777 QString delmess; 2914 if ( KABPrefs::instance()->mShowSyncSummary ) {
2778 if ( delFut ) {
2779 delmess.sprintf( i18n("%d items skipped on remote,\nbecause they are in the past or\nmore than %d weeks in the future.\n"),delFut, KOPrefs::instance()->mWriteBackInFuture );
2780 mes += delmess;
2781 }
2782 if ( KOPrefs::instance()->mShowSyncSummary ) {
2783 KMessageBox::information(this, mes, i18n("KO/Pi Synchronization") ); 2915 KMessageBox::information(this, mes, i18n("KO/Pi Synchronization") );
2784 } 2916 }
2785 qDebug( mes ); 2917 qDebug( mes );
2786 mCalendar->checkAlarmForIncidence( 0, true );
2787 return syncOK; 2918 return syncOK;
2788#endif
2789 return false;
2790} 2919}
2920
2791bool KABCore::syncAB(QString filename, int mode) 2921bool KABCore::syncAB(QString filename, int mode)
2792{ 2922{
@@ -2800,8 +2930,8 @@ bool KABCore::syncAB(QString filename, int mode)
2800 qDebug("AB loaded %s mode %d",filename.latin1(), mode ); 2930 qDebug("AB loaded %s mode %d",filename.latin1(), mode );
2801 AddressBook::Iterator it; 2931 AddressBook::Iterator it;
2802 QStringList vcards; 2932 //QStringList vcards;
2803 for ( it = abLocal.begin(); it != abLocal.end(); ++it ) { 2933 //for ( it = abLocal.begin(); it != abLocal.end(); ++it ) {
2804 qDebug("Name %s ", (*it).familyName().latin1()); 2934 // qDebug("Name %s ", (*it).familyName().latin1());
2805 } 2935 //}
2806 syncOK = synchronizeAddressbooks( mAddressBook, &abLocal, mode ); 2936 syncOK = synchronizeAddressbooks( mAddressBook, &abLocal, mode );
2807 if ( syncOK ) { 2937 if ( syncOK ) {
diff --git a/kaddressbook/kabcore.h b/kaddressbook/kabcore.h
index c67cee6..f01f306 100644
--- a/kaddressbook/kabcore.h
+++ b/kaddressbook/kabcore.h
@@ -475,4 +475,5 @@ class KABCore : public QWidget
475 KABC::Addressee getLastSyncAddressee(); 475 KABC::Addressee getLastSyncAddressee();
476 QDateTime mLastAddressbookSync; 476 QDateTime mLastAddressbookSync;
477 int takeAddressee( KABC::Addressee* local, KABC::Addressee* remote, int mode , bool full );
477 public slots: 478 public slots:
478 void confSync(); 479 void confSync();