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) (show whitespace changes)
-rw-r--r--kabc/addressbook.cpp3
-rw-r--r--kabc/addressbook.h2
-rw-r--r--kabc/addressee.cpp1
-rw-r--r--kaddressbook/kabcore.cpp198
-rw-r--r--kaddressbook/kabcore.h1
5 files changed, 169 insertions, 36 deletions
diff --git a/kabc/addressbook.cpp b/kabc/addressbook.cpp
index 6e8d027..3ec0795 100644
--- a/kabc/addressbook.cpp
+++ b/kabc/addressbook.cpp
@@ -442,13 +442,13 @@ Ticket *AddressBook::requestSaveTicket( Resource *resource )
}
}
return 0;
}
-void AddressBook::insertAddressee( const Addressee &a )
+void AddressBook::insertAddressee( const Addressee &a, bool setRev )
{
Addressee::List::Iterator it;
for ( it = d->mAddressees.begin(); it != d->mAddressees.end(); ++it ) {
if ( a.uid() == (*it).uid() ) {
bool changed = false;
Addressee addr = a;
@@ -457,12 +457,13 @@ void AddressBook::insertAddressee( const Addressee &a )
(*it) = a;
if ( (*it).resource() == 0 )
(*it).setResource( standardResource() );
if ( changed ) {
+ if ( setRev )
(*it).setRevision( QDateTime::currentDateTime() );
(*it).setChanged( true );
}
return;
}
diff --git a/kabc/addressbook.h b/kabc/addressbook.h
index 650a638..253de68 100644
--- a/kabc/addressbook.h
+++ b/kabc/addressbook.h
@@ -170,13 +170,13 @@ class AddressBook : public QObject
/**
Insert an Addressee object into address book. If an object with the same
unique id already exists in the address book it it replaced by the new
one. If not the new object is appended to the address book.
*/
- void insertAddressee( const Addressee & );
+ void insertAddressee( const Addressee &, bool setRev = true );
/**
Removes entry from the address book.
*/
void removeAddressee( const Addressee & );
diff --git a/kabc/addressee.cpp b/kabc/addressee.cpp
index fb32f6e..7f04d8f 100644
--- a/kabc/addressee.cpp
+++ b/kabc/addressee.cpp
@@ -90,12 +90,13 @@ Addressee::Addressee()
{
mData = new AddresseeData;
mData->empty = true;
mData->changed = false;
mData->resource = 0;
mData->mExternalId = ":";
+ mData->revision = QDateTime ( QDate( 2004,1,1));
mTempSyncStat = SYNC_TEMPSTATE_INITIAL;
}
Addressee::~Addressee()
{
}
diff --git a/kaddressbook/kabcore.cpp b/kaddressbook/kabcore.cpp
index f497541..226d5e4 100644
--- a/kaddressbook/kabcore.cpp
+++ b/kaddressbook/kabcore.cpp
@@ -2520,24 +2520,158 @@ QString KABCore::getPassword( )
KABC::Addressee KABCore::getLastSyncAddressee()
{
Addressee lse;
//qDebug("CurrentSyncDevice %s ",mCurrentSyncDevice .latin1() );
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 ) )
sum = "E: ";
lse.setFamilyName(sum+mCurrentSyncDevice + i18n(" - sync event"));
lse.setRevision( mLastAddressbookSync );
lse.setCategories( i18n("SyncEvent") );
mAddressBook->insertAddressee( lse );
}
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)
{
bool syncOK = true;
int addedAddressee = 0;
int addedAddresseeR = 0;
int deletedAddresseeR = 0;
@@ -2555,38 +2689,43 @@ bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBo
KABC::Addressee::List addresseeLSyncSharp = local->getExternLastSyncAddressees();
bool fullDateRange = false;
local->resetTempSyncStat();
mLastAddressbookSync = QDateTime::currentDateTime();
QDateTime modifiedCalendar = mLastAddressbookSync;;
addresseeLSync = getLastSyncAddressee();
+ qDebug("Last Sync %s ", addresseeLSync.revision().toString().latin1());
addresseeR = remote->findByUid("last-syncAddressee-"+mCurrentSyncName );
if ( !addresseeR.isEmpty() ) {
addresseeRSync = addresseeR;
remote->removeAddressee(addresseeR );
} else {
if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
addresseeRSync = addresseeLSync ;
} else {
+ qDebug("FULLDATE 1");
fullDateRange = true;
Addressee newAdd;
addresseeRSync = newAdd;
addresseeRSync.setFamilyName(mCurrentSyncName + i18n(" - sync addressee"));
addresseeRSync.setUid("last-syncAddressee-"+mCurrentSyncName );
addresseeRSync.setRevision( mLastAddressbookSync );
addresseeRSync.setCategories( i18n("SyncAddressee") );
}
}
- if ( addresseeLSync.revision() == mLastAddressbookSync )
+ if ( addresseeLSync.revision() == mLastAddressbookSync ) {
+ qDebug("FULLDATE 2");
fullDateRange = true;
+ }
if ( ! fullDateRange ) {
if ( addresseeLSync.revision() != addresseeRSync.revision() ) {
// qDebug("set fulldate to true %s %s" ,addresseeLSync->dtStart().toString().latin1(), addresseeRSync->dtStart().toString().latin1() );
//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() );
}
}
if ( fullDateRange )
mLastAddressbookSync = QDateTime::currentDateTime().addDays( -100*365);
else
mLastAddressbookSync = addresseeLSync.revision();
@@ -2631,63 +2770,62 @@ bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBo
if ( !skipIncidence ) {
inL = local->findByUid( uid );
inR = remote->findByUid( uid );
//inL.setResource( 0 );
//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 )
return false;
if ( take == 1 ) {// take local
if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
inL.setCsum( mCurrentSyncDevice, inR.getCsum(mCurrentSyncDevice) );
- local->insertAddressee( inL );
+ local->insertAddressee( inL, false );
}
else
idS = inR.IDStr();
remote->removeAddressee( inR );
inR = inL;
inR.setTempSyncStat( SYNC_TEMPSTATE_INITIAL );
if ( mGlobalSyncMode != SYNC_MODE_EXTERNAL )
inR.setIDStr( idS );
inR.setResource( 0 );
- remote->insertAddressee( inR );
+ remote->insertAddressee( inR , false);
++changedRemote;
} else {
idS = inL.IDStr();
local->removeAddressee( inL );
inL = inR;
inL.setIDStr( idS );
inL.setResource( 0 );
- local->insertAddressee( inL );
+ local->insertAddressee( inL , false );
++changedLocal;
}
}
} else { // no conflict
if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
QString des = addresseeLSync.note();
QString pref = "a";
if ( des.find(pref+ inR.getID(mCurrentSyncDevice) +"," ) >= 0 && mode != 5) { // delete it
inR.setTempSyncStat( SYNC_TEMPSTATE_DELETE );
++deletedAddresseeR;
} else {
inR.setRevision( modifiedCalendar );
- remote->insertAddressee( inR );
+ remote->insertAddressee( inR, false );
inL = inR;
inL.setResource( 0 );
- local->insertAddressee( inL );
+ local->insertAddressee( inL , false);
++addedAddressee;
}
} else {
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 {
// pending checkExternSyncAddressee(addresseeRSyncSharp, inR);
remote->removeAddressee( inR );
++deletedAddresseeR;
}
@@ -2728,84 +2866,76 @@ bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBo
} else {
if ( ! KABPrefs::instance()->mWriteBackExistingOnly ) {
inL.removeID(mCurrentSyncDevice );
++addedAddresseeR;
//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 );
}
}
} else {
if ( inL.revision() < mLastAddressbookSync && mode != 4 ) {
// pending checkExternSyncAddressee(addresseeLSyncSharp, inL);
local->removeAddressee( inL );
++deletedAddresseeL;
} else {
if ( ! KABPrefs::instance()->mWriteBackExistingOnly ) {
++addedAddresseeR;
inL.setRevision( modifiedCalendar );
- local->insertAddressee( inL );
+ local->insertAddressee( inL, false );
inR = inL;
inR.setResource( 0 );
- remote->insertAddressee( inR );
+ remote->insertAddressee( inR, false );
}
}
}
}
}
++incCounter;
}
el.clear();
- int delFut = 0;
- #if 0
+
bar.hide();
mLastAddressbookSync = QDateTime::currentDateTime().addSecs( 1 );
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)
{
//pending prepare addresseeview for output
//pending detect, if remote file has REV field. if not switch to external sync
mGlobalSyncMode = SYNC_MODE_NORMAL;
AddressBook abLocal(filename,"syncContact");
bool syncOK = false;
if ( abLocal.load() ) {
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 ) {
if ( KABPrefs::instance()->mWriteBackFile )
{
qDebug("saving remote AB ");
abLocal.saveAB();
diff --git a/kaddressbook/kabcore.h b/kaddressbook/kabcore.h
index c67cee6..f01f306 100644
--- a/kaddressbook/kabcore.h
+++ b/kaddressbook/kabcore.h
@@ -471,12 +471,13 @@ class KABCore : public QWidget
int ringSync();
QString getPassword( );
int mGlobalSyncMode;
bool synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBook* remote,int mode);
KABC::Addressee getLastSyncAddressee();
QDateTime mLastAddressbookSync;
+ int takeAddressee( KABC::Addressee* local, KABC::Addressee* remote, int mode , bool full );
public slots:
void confSync();
// *********************
};