-rw-r--r-- | kabc/addressbook.cpp | 5 | ||||
-rw-r--r-- | kabc/addressbook.h | 2 | ||||
-rw-r--r-- | kabc/addressee.cpp | 1 | ||||
-rw-r--r-- | kaddressbook/kabcore.cpp | 200 | ||||
-rw-r--r-- | kaddressbook/kabcore.h | 1 |
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 @@ -447,3 +447,3 @@ Ticket *AddressBook::requestSaveTicket( Resource *resource ) -void AddressBook::insertAddressee( const Addressee &a ) +void AddressBook::insertAddressee( const Addressee &a, bool setRev ) { @@ -462,3 +462,4 @@ void AddressBook::insertAddressee( const Addressee &a ) if ( changed ) { - (*it).setRevision( QDateTime::currentDateTime() ); + if ( setRev ) + (*it).setRevision( QDateTime::currentDateTime() ); (*it).setChanged( true ); diff --git a/kabc/addressbook.h b/kabc/addressbook.h index 650a638..253de68 100644 --- a/kabc/addressbook.h +++ b/kabc/addressbook.h @@ -175,3 +175,3 @@ class AddressBook : public QObject */ - void insertAddressee( const Addressee & ); + void insertAddressee( const Addressee &, bool setRev = true ); diff --git a/kabc/addressee.cpp b/kabc/addressee.cpp index fb32f6e..7f04d8f 100644 --- a/kabc/addressee.cpp +++ b/kabc/addressee.cpp @@ -95,2 +95,3 @@ Addressee::Addressee() mData->mExternalId = ":"; + mData->revision = QDateTime ( QDate( 2004,1,1)); mTempSyncStat = SYNC_TEMPSTATE_INITIAL; diff --git a/kaddressbook/kabcore.cpp b/kaddressbook/kabcore.cpp index f497541..226d5e4 100644 --- a/kaddressbook/kabcore.cpp +++ b/kaddressbook/kabcore.cpp @@ -2525,3 +2525,4 @@ KABC::Addressee KABCore::getLastSyncAddressee() if (lse.isEmpty()) { - lse.setUid( "last-syncEvent-"+mCurrentSyncDevice ); + qDebug("Creating new last-syncAddressee "); + lse.setUid( "last-syncAddressee-"+mCurrentSyncDevice ); QString sum = ""; @@ -2536,3 +2537,136 @@ KABC::Addressee KABCore::getLastSyncAddressee() } - +int KABCore::takeAddressee( KABC::Addressee* local, KABC::Addressee* remote, int mode , bool full ) +{ + + //void setZaurusId(int id); + // int zaurusId() const; + // void setZaurusUid(int id); + // int zaurusUid() const; + // void setZaurusStat(int id); + // int zaurusStat() const; + // 0 equal + // 1 take local + // 2 take remote + // 3 cancel + QDateTime lastSync = mLastAddressbookSync; + if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { + bool remCh, locCh; + remCh = ( remote->getCsum(mCurrentSyncDevice) != local->getCsum(mCurrentSyncDevice) ); + //if ( remCh ) + //qDebug("loc %s rem %s", local->getCsum(mCurrentSyncDevice).latin1(), remote->getCsum(mCurrentSyncDevice).latin1() ); + locCh = ( local->revision() > mLastAddressbookSync ); + if ( !remCh && ! locCh ) { + //qDebug("both not changed "); + lastSync = local->revision().addDays(1); + } else { + if ( locCh ) { + //qDebug("loc changed %d %s %s", local->revision() , local->lastModified().toString().latin1(), mLastCalendarSync.toString().latin1()); + lastSync = local->revision().addDays( -1 ); + if ( !remCh ) + remote->setRevision( lastSync.addDays( -1 ) ); + } else { + //qDebug(" not loc changed "); + lastSync = local->revision().addDays( 1 ); + if ( remCh ) + remote->setRevision( lastSync.addDays( 1 ) ); + + } + } + full = true; + if ( mode < SYNC_PREF_ASK ) + mode = SYNC_PREF_ASK; + } else { + if ( local->revision() == remote->revision() ) + return 0; + + } + // qDebug(" %d %d conflict on %s %s ", mode, full, local->summary().latin1(), remote->summary().latin1() ); + + //qDebug("%s %d %s %d", local->lastModified().toString().latin1() , local->revision(), remote->lastModified().toString().latin1(), remote->revision()); + //qDebug("%d %d %d %d ", local->lastModified().time().second(), local->lastModified().time().msec(), remote->lastModified().time().second(), remote->lastModified().time().msec() ); + //full = true; //debug only + if ( full ) { + bool equ = ( (*local) == (*remote) ); + if ( equ ) { + //qDebug("equal "); + if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { + local->setCsum( mCurrentSyncDevice, remote->getCsum(mCurrentSyncDevice) ); + } + if ( mode < SYNC_PREF_FORCE_LOCAL ) + return 0; + + }//else //debug only + //qDebug("not equal %s %s ", local->summary().latin1(), remote->summary().latin1()); + } + int result; + bool localIsNew; + //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() ); + + if ( full && mode < SYNC_PREF_NEWEST ) + mode = SYNC_PREF_ASK; + + switch( mode ) { + case SYNC_PREF_LOCAL: + if ( lastSync > remote->revision() ) + return 1; + if ( lastSync > local->revision() ) + return 2; + return 1; + break; + case SYNC_PREF_REMOTE: + if ( lastSync > remote->revision() ) + return 1; + if ( lastSync > local->revision() ) + return 2; + return 2; + break; + case SYNC_PREF_NEWEST: + if ( local->revision() > remote->revision() ) + return 1; + else + return 2; + break; + case SYNC_PREF_ASK: + qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), local->revision().toString().latin1(), remote->revision().toString().latin1() ); + if ( lastSync > remote->revision() ) + return 1; + if ( lastSync > local->revision() ) + return 2; + //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), local->revision().toString().latin1(), remote->revision().toString().latin1() ); + localIsNew = local->revision() >= remote->revision(); +#if 0 + if ( localIsNew ) + getEventViewerDialog()->setColorMode( 1 ); + else + getEventViewerDialog()->setColorMode( 2 ); + getEventViewerDialog()->setIncidence(local); + if ( localIsNew ) + getEventViewerDialog()->setColorMode( 2 ); + else + getEventViewerDialog()->setColorMode( 1 ); + getEventViewerDialog()->addIncidence(remote); + getEventViewerDialog()->setColorMode( 0 ); + //qDebug("local %d remote %d ",local->relatedTo(),remote->relatedTo() ); + getEventViewerDialog()->setCaption( mCurrentSyncDevice +i18n(" : Conflict! Please choose entry!")); + getEventViewerDialog()->showMe(); + result = getEventViewerDialog()->executeS( localIsNew ); +#endif + qDebug("conflict! ************************************** "); + result = 1; + return result; + + break; + case SYNC_PREF_FORCE_LOCAL: + return 1; + break; + case SYNC_PREF_FORCE_REMOTE: + return 2; + break; + + default: + // SYNC_PREF_TAKE_BOTH not implemented + break; + } + return 0; +} bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBook* remote,int mode) @@ -2560,2 +2694,3 @@ bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBo addresseeLSync = getLastSyncAddressee(); + qDebug("Last Sync %s ", addresseeLSync.revision().toString().latin1()); addresseeR = remote->findByUid("last-syncAddressee-"+mCurrentSyncName ); @@ -2569,2 +2704,3 @@ bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBo } else { + qDebug("FULLDATE 1"); fullDateRange = true; @@ -2578,4 +2714,6 @@ bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBo } - if ( addresseeLSync.revision() == mLastAddressbookSync ) + if ( addresseeLSync.revision() == mLastAddressbookSync ) { + qDebug("FULLDATE 2"); fullDateRange = true; + } if ( ! fullDateRange ) { @@ -2586,2 +2724,3 @@ bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBo fullDateRange = true; + qDebug("FULLDATE 3 %s %s", addresseeLSync.revision().toString().latin1() , addresseeRSync.revision().toString().latin1() ); } @@ -2636,4 +2775,3 @@ bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBo if ( !inL.isEmpty() ) { // maybe conflict - same uid in both calendars - // pending if ( (take = takeAddressee( inL, inR, mode, fullDateRange )) > 0 ) { - if ( true ) { + if ( take = takeAddressee( &inL, &inR, mode, fullDateRange ) ) { //qDebug("take %d %s ", take, inL.summary().latin1()); @@ -2644,3 +2782,3 @@ bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBo inL.setCsum( mCurrentSyncDevice, inR.getCsum(mCurrentSyncDevice) ); - local->insertAddressee( inL ); + local->insertAddressee( inL, false ); } @@ -2654,3 +2792,3 @@ bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBo inR.setResource( 0 ); - remote->insertAddressee( inR ); + remote->insertAddressee( inR , false); ++changedRemote; @@ -2662,3 +2800,3 @@ bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBo inL.setResource( 0 ); - local->insertAddressee( inL ); + local->insertAddressee( inL , false ); ++changedLocal; @@ -2675,6 +2813,6 @@ bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBo inR.setRevision( modifiedCalendar ); - remote->insertAddressee( inR ); + remote->insertAddressee( inR, false ); inL = inR; inL.setResource( 0 ); - local->insertAddressee( inL ); + local->insertAddressee( inL , false); ++addedAddressee; @@ -2684,5 +2822,5 @@ bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBo inR.setRevision( modifiedCalendar ); - remote->insertAddressee( inR ); + remote->insertAddressee( inR, false ); inR.setResource( 0 ); - local->insertAddressee( inR ); + local->insertAddressee( inR, false ); ++addedAddressee; @@ -2733,3 +2871,3 @@ bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBo inL.setRevision( modifiedCalendar ); - local->insertAddressee( inL ); + local->insertAddressee( inL, false ); inR = inL; @@ -2737,3 +2875,3 @@ bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBo inR.setResource( 0 ); - remote->insertAddressee( inR ); + remote->insertAddressee( inR, false ); } @@ -2749,6 +2887,6 @@ bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBo inL.setRevision( modifiedCalendar ); - local->insertAddressee( inL ); + local->insertAddressee( inL, false ); inR = inL; inR.setResource( 0 ); - remote->insertAddressee( inR ); + remote->insertAddressee( inR, false ); } @@ -2761,5 +2899,4 @@ bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBo el.clear(); - int delFut = 0; - #if 0 + @@ -2769,15 +2906,10 @@ bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBo addresseeRSync.setRevision( mLastAddressbookSync ); - addresseeRSync.setLocation( i18n("Remote from: ")+mCurrentSyncName ) ; - addresseeLSync.setLocation(i18n("Local from: ") + mCurrentSyncName ); - addresseeLSync.setReadOnly( true ); + addresseeRSync.setGivenName( i18n("Remote from: ")+mCurrentSyncName ) ; + addresseeLSync.setGivenName(i18n("Local from: ") + mCurrentSyncName ); if ( mGlobalSyncMode == SYNC_MODE_NORMAL) - remote->addAddressee( addresseeRSync ); + remote->insertAddressee( addresseeRSync, false ); + local->insertAddressee( addresseeLSync, false ); QString mes; 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 ); - QString delmess; - if ( delFut ) { - 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 ); - mes += delmess; - } - if ( KOPrefs::instance()->mShowSyncSummary ) { + if ( KABPrefs::instance()->mShowSyncSummary ) { KMessageBox::information(this, mes, i18n("KO/Pi Synchronization") ); @@ -2785,7 +2917,5 @@ bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBo qDebug( mes ); - mCalendar->checkAlarmForIncidence( 0, true ); return syncOK; -#endif - return false; } + bool KABCore::syncAB(QString filename, int mode) @@ -2801,6 +2931,6 @@ bool KABCore::syncAB(QString filename, int mode) AddressBook::Iterator it; - QStringList vcards; - for ( it = abLocal.begin(); it != abLocal.end(); ++it ) { - qDebug("Name %s ", (*it).familyName().latin1()); - } + //QStringList vcards; + //for ( it = abLocal.begin(); it != abLocal.end(); ++it ) { + // qDebug("Name %s ", (*it).familyName().latin1()); + //} syncOK = synchronizeAddressbooks( mAddressBook, &abLocal, mode ); diff --git a/kaddressbook/kabcore.h b/kaddressbook/kabcore.h index c67cee6..f01f306 100644 --- a/kaddressbook/kabcore.h +++ b/kaddressbook/kabcore.h @@ -476,2 +476,3 @@ class KABCore : public QWidget QDateTime mLastAddressbookSync; + int takeAddressee( KABC::Addressee* local, KABC::Addressee* remote, int mode , bool full ); public slots: |