summaryrefslogtreecommitdiffabout
authorzautrix <zautrix>2004-09-18 16:07:07 (UTC)
committer zautrix <zautrix>2004-09-18 16:07:07 (UTC)
commitbf18a7b4edb4121fd2ea974ac1ec634167c9b993 (patch) (side-by-side diff)
tree056e62659f8bc5a5b20dc24dcaa73c38f4515cd5
parentca8fcf3fd4dc068747d8f31e2189145b22853d55 (diff)
downloadkdepimpi-bf18a7b4edb4121fd2ea974ac1ec634167c9b993.zip
kdepimpi-bf18a7b4edb4121fd2ea974ac1ec634167c9b993.tar.gz
kdepimpi-bf18a7b4edb4121fd2ea974ac1ec634167c9b993.tar.bz2
more AB sync
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 )
}
-void AddressBook::insertAddressee( const Addressee &a )
+void AddressBook::insertAddressee( const Addressee &a, bool setRev )
{
Addressee::List::Iterator it;
@@ -461,5 +461,6 @@ 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
@@ -174,5 +174,5 @@ class AddressBook : public QObject
one. If not the new object is appended to the address book.
*/
- 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
@@ -94,4 +94,5 @@ Addressee::Addressee()
mData->resource = 0;
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
@@ -2524,5 +2524,6 @@ KABC::Addressee KABCore::getLastSyncAddressee()
lse = mAddressBook->findByUid( "last-syncAddressee-"+mCurrentSyncDevice );
if (lse.isEmpty()) {
- lse.setUid( "last-syncEvent-"+mCurrentSyncDevice );
+ qDebug("Creating new last-syncAddressee ");
+ lse.setUid( "last-syncAddressee-"+mCurrentSyncDevice );
QString sum = "";
if ( KABPrefs::instance()->mExternSyncProfiles.contains( mCurrentSyncDevice ) )
@@ -2535,5 +2536,138 @@ KABC::Addressee KABCore::getLastSyncAddressee()
return lse;
}
-
+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)
{
@@ -2559,4 +2693,5 @@ bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBo
QDateTime modifiedCalendar = mLastAddressbookSync;;
addresseeLSync = getLastSyncAddressee();
+ qDebug("Last Sync %s ", addresseeLSync.revision().toString().latin1());
addresseeR = remote->findByUid("last-syncAddressee-"+mCurrentSyncName );
if ( !addresseeR.isEmpty() ) {
@@ -2568,4 +2703,5 @@ bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBo
addresseeRSync = addresseeLSync ;
} else {
+ qDebug("FULLDATE 1");
fullDateRange = true;
Addressee newAdd;
@@ -2577,6 +2713,8 @@ bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBo
}
}
- if ( addresseeLSync.revision() == mLastAddressbookSync )
+ if ( addresseeLSync.revision() == mLastAddressbookSync ) {
+ qDebug("FULLDATE 2");
fullDateRange = true;
+ }
if ( ! fullDateRange ) {
if ( addresseeLSync.revision() != addresseeRSync.revision() ) {
@@ -2585,4 +2723,5 @@ bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBo
//qDebug("%d %d %d %d ", addresseeLSync->dtStart().time().second(), addresseeLSync->dtStart().time().msec() , addresseeRSync->dtStart().time().second(), addresseeRSync->dtStart().time().msec());
fullDateRange = true;
+ qDebug("FULLDATE 3 %s %s", addresseeLSync.revision().toString().latin1() , addresseeRSync.revision().toString().latin1() );
}
}
@@ -2635,6 +2774,5 @@ bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBo
//inR.setResource( 0 );
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());
if ( take == 3 )
@@ -2643,5 +2781,5 @@ bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBo
if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
inL.setCsum( mCurrentSyncDevice, inR.getCsum(mCurrentSyncDevice) );
- local->insertAddressee( inL );
+ local->insertAddressee( inL, false );
}
else
@@ -2653,5 +2791,5 @@ bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBo
inR.setIDStr( idS );
inR.setResource( 0 );
- remote->insertAddressee( inR );
+ remote->insertAddressee( inR , false);
++changedRemote;
} else {
@@ -2661,5 +2799,5 @@ bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBo
inL.setIDStr( idS );
inL.setResource( 0 );
- local->insertAddressee( inL );
+ local->insertAddressee( inL , false );
++changedLocal;
}
@@ -2674,8 +2812,8 @@ bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBo
} else {
inR.setRevision( modifiedCalendar );
- remote->insertAddressee( inR );
+ remote->insertAddressee( inR, false );
inL = inR;
inL.setResource( 0 );
- local->insertAddressee( inL );
+ local->insertAddressee( inL , false);
++addedAddressee;
}
@@ -2683,7 +2821,7 @@ bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBo
if ( inR.revision() > mLastAddressbookSync || mode == 5 ) {
inR.setRevision( modifiedCalendar );
- remote->insertAddressee( inR );
+ remote->insertAddressee( inR, false );
inR.setResource( 0 );
- local->insertAddressee( inR );
+ local->insertAddressee( inR, false );
++addedAddressee;
} else {
@@ -2732,9 +2870,9 @@ bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBo
//qDebug("remote added Incidence %s ", inL.summary().latin1());
inL.setRevision( modifiedCalendar );
- local->insertAddressee( inL );
+ local->insertAddressee( inL, false );
inR = inL;
inR.setTempSyncStat( SYNC_TEMPSTATE_INITIAL );
inR.setResource( 0 );
- remote->insertAddressee( inR );
+ remote->insertAddressee( inR, false );
}
}
@@ -2748,8 +2886,8 @@ bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBo
++addedAddresseeR;
inL.setRevision( modifiedCalendar );
- local->insertAddressee( inL );
+ local->insertAddressee( inL, false );
inR = inL;
inR.setResource( 0 );
- remote->insertAddressee( inR );
+ remote->insertAddressee( inR, false );
}
}
@@ -2760,7 +2898,6 @@ bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBo
}
el.clear();
- int delFut = 0;
- #if 0
+
bar.hide();
@@ -2768,25 +2905,18 @@ bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBo
addresseeLSync.setRevision( mLastAddressbookSync );
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") );
}
qDebug( mes );
- mCalendar->checkAlarmForIncidence( 0, true );
return syncOK;
-#endif
- return false;
}
+
bool KABCore::syncAB(QString filename, int mode)
{
@@ -2800,8 +2930,8 @@ bool KABCore::syncAB(QString filename, int mode)
qDebug("AB loaded %s mode %d",filename.latin1(), 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 );
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
KABC::Addressee getLastSyncAddressee();
QDateTime mLastAddressbookSync;
+ int takeAddressee( KABC::Addressee* local, KABC::Addressee* remote, int mode , bool full );
public slots:
void confSync();