summaryrefslogtreecommitdiffabout
authorzautrix <zautrix>2004-09-18 22:33:39 (UTC)
committer zautrix <zautrix>2004-09-18 22:33:39 (UTC)
commitf370d0f89bcaeeb68bd60152a9812a9cd55e5d8a (patch) (side-by-side diff)
treec1a9de8b305200a7cec885764a0afb4beb92dabb
parent28f894fd2a0dfbd5f09f9e530f359981efe0198c (diff)
downloadkdepimpi-f370d0f89bcaeeb68bd60152a9812a9cd55e5d8a.zip
kdepimpi-f370d0f89bcaeeb68bd60152a9812a9cd55e5d8a.tar.gz
kdepimpi-f370d0f89bcaeeb68bd60152a9812a9cd55e5d8a.tar.bz2
more AB sync
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--kabc/address.cpp13
-rw-r--r--kabc/address.h1
-rw-r--r--kabc/addressbook.cpp75
-rw-r--r--kabc/addressbook.h4
-rw-r--r--kabc/addressee.cpp97
-rw-r--r--kabc/addressee.h2
-rw-r--r--kaddressbook/kabcore.cpp34
7 files changed, 214 insertions, 12 deletions
diff --git a/kabc/address.cpp b/kabc/address.cpp
index c820a6c..5ffe511 100644
--- a/kabc/address.cpp
+++ b/kabc/address.cpp
@@ -89,4 +89,17 @@ bool Address::isEmpty() const
}
+QStringList Address::asList()
+{
+ QStringList result;
+ if ( ! mPostOfficeBox.isEmpty() )result.append(mPostOfficeBox);
+ if ( ! mExtended.isEmpty())result.append(mExtended);
+ if ( ! mStreet.isEmpty())result.append(mStreet);
+ if ( ! mLocality.isEmpty() )result.append(mLocality);
+ if ( ! mRegion.isEmpty())result.append(mRegion);
+ if ( ! mPostalCode.isEmpty())result.append(mPostalCode);
+ if ( ! mCountry.isEmpty())result.append(mCountry);
+ if ( ! mLabel.isEmpty() )result.append(mLabel);
+ return result;
+}
void Address::clear()
{
diff --git a/kabc/address.h b/kabc/address.h
index ad132a7..6b53c7e 100644
--- a/kabc/address.h
+++ b/kabc/address.h
@@ -108,4 +108,5 @@ class Address
*/
void clear();
+ QStringList asList();
/**
diff --git a/kabc/addressbook.cpp b/kabc/addressbook.cpp
index 16e1653..ec9f893 100644
--- a/kabc/addressbook.cpp
+++ b/kabc/addressbook.cpp
@@ -235,4 +235,5 @@ AddressBook::AddressBook( const QString &config, const QString &family )
void AddressBook::init(const QString &config, const QString &family )
{
+ blockLSEchange = false;
d = new AddressBookData;
QString fami = family;
@@ -346,4 +347,5 @@ bool AddressBook::load()
(*addrIt).setChanged( false );
+ blockLSEchange = true;
return ok;
}
@@ -448,10 +450,12 @@ Ticket *AddressBook::requestSaveTicket( Resource *resource )
void AddressBook::insertAddressee( const Addressee &a, bool setRev )
{
+ if ( blockLSEchange && setRev && a.uid().left( 19 ) == QString("last-syncAddressee-") ) {
+ return;
+ }
+ bool found = false;
Addressee::List::Iterator it;
for ( it = d->mAddressees.begin(); it != d->mAddressees.end(); ++it ) {
if ( a.uid() == (*it).uid() ) {
- if ( setRev && (*it).uid().left( 19 ) == QString("last-syncAddressee-") ) {
- return;
- }
+
bool changed = false;
Addressee addr = a;
@@ -475,7 +479,24 @@ void AddressBook::insertAddressee( const Addressee &a, bool setRev )
}
- return;
+ found = true;
+ } else {
+ if ( (*it).uid() == QString("last-syncAddressee-") ) {
+ QString name = (*it).uid().mid( 19 );
+ Addressee b = a;
+ QString id = b.getID( name );
+ if ( ! id.isEmpty() ) {
+ QString des = (*it).note();
+ int startN;
+ if( (startN = des.find( id ) ) >= 0 ) {
+ int endN = des.find( ",", startN+1 );
+ des = des.left( startN ) + des.mid( endN+1 );
+ (*it).setNote( des );
+ }
}
}
+ }
+ }
+ if ( found )
+ return;
d->mAddressees.append( a );
Addressee& addr = d->mAddressees.last();
@@ -489,10 +510,48 @@ void AddressBook::removeAddressee( const Addressee &a )
{
Iterator it;
+ Iterator it2;
+ bool found = false;
for ( it = begin(); it != end(); ++it ) {
if ( a.uid() == (*it).uid() ) {
- removeAddressee( it );
- return;
+ found = true;
+ it2 = it;
+ } else {
+ if ( (*it).uid() == QString("last-syncAddressee-") ) {
+ QString name = (*it).uid().mid( 19 );
+ Addressee b = a;
+ QString id = b.getID( name );
+ if ( ! id.isEmpty() ) {
+ QString des = (*it).note();
+ if( des.find( id ) < 0 ) {
+ des += id + ",";
+ (*it).setNote( des );
+ }
}
}
+
+ }
+ }
+
+ if ( found )
+ removeAddressee( it2 );
+
+}
+
+void AddressBook::removeDeletedAddressees()
+{
+ deleteRemovedAddressees();
+ Iterator it = begin();
+ Iterator it2 ;
+ QDateTime dt ( QDate( 2004,1,1) );
+ while ( it != end() ) {
+ (*it).setRevision( dt );
+ if ( (*it).tempSyncStat() == SYNC_TEMPSTATE_DELETE ) {
+ it2 = it;
+ ++it;
+ removeAddressee( it2 );
+ } else
+ ++it;
+ }
+ deleteRemovedAddressees();
}
@@ -524,4 +583,5 @@ Addressee AddressBook::findByUid( const QString &uid )
return Addressee();
}
+#if 0
Addressee::List AddressBook::getExternLastSyncAddressees()
{
@@ -531,5 +591,5 @@ Addressee::List AddressBook::getExternLastSyncAddressees()
for ( it = begin(); it != end(); ++it ) {
if ( (*it).uid().left( 19 ) == "last-syncAddressee-" ) {
- if ( (*it).familyName().left(3) == "E: " )
+ if ( (*it).familyName().left(4) == "!E: " )
results.append( *it );
}
@@ -538,4 +598,5 @@ Addressee::List AddressBook::getExternLastSyncAddressees()
return results;
}
+#endif
void AddressBook::resetTempSyncStat()
{
diff --git a/kabc/addressbook.h b/kabc/addressbook.h
index 253de68..2f2678b 100644
--- a/kabc/addressbook.h
+++ b/kabc/addressbook.h
@@ -290,7 +290,8 @@ class AddressBook : public QObject
// sync stuff
- Addressee::List getExternLastSyncAddressees();
+ //Addressee::List getExternLastSyncAddressees();
void resetTempSyncStat();
QStringList uidList();
+ void removeDeletedAddressees();
@@ -325,4 +326,5 @@ class AddressBook : public QObject
struct AddressBookData;
AddressBookData *d;
+ bool blockLSEchange;
};
diff --git a/kabc/addressee.cpp b/kabc/addressee.cpp
index 7f04d8f..0f5d605 100644
--- a/kabc/addressee.cpp
+++ b/kabc/addressee.cpp
@@ -175,4 +175,100 @@ bool Addressee::isEmpty() const
return mData->empty;
}
+ulong Addressee::getCsum4List( const QStringList & attList)
+{
+ int max = attList.count();
+ ulong cSum = 0;
+ int j,k,i;
+ int add;
+ for ( i = 0; i < max ; ++i ) {
+ QString s = attList[i];
+ if ( ! s.isEmpty() ){
+ j = s.length();
+ for ( k = 0; k < j; ++k ) {
+ int mul = k +1;
+ add = s[k].unicode ();
+ if ( k < 16 )
+ mul = mul * mul;
+ int ii = i+1;
+ add = add * mul *ii*ii*ii;
+ cSum += add;
+ }
+ }
+
+ }
+ //QString dump = attList.join(",");
+ //qDebug("csum: %d %s", cSum,dump.latin1());
+
+ return cSum;
+
+}
+void Addressee::computeCsum(const QString &dev)
+{
+ QStringList l;
+ if ( !mData->name.isEmpty() ) l.append(mData->name);
+ if ( !mData->formattedName.isEmpty() ) l.append(mData->formattedName );
+ if ( !mData->familyName.isEmpty() ) l.append( mData->familyName );
+ if ( !mData->givenName.isEmpty() ) l.append(mData->givenName );
+ if ( !mData->additionalName ) l.append( mData->additionalName );
+ if ( !mData->prefix.isEmpty() ) l.append( mData->prefix );
+ if ( !mData->suffix.isEmpty() ) l.append( mData->suffix );
+ if ( !mData->nickName.isEmpty() ) l.append( mData->nickName );
+ if ( mData->birthday.isValid() ) l.append( mData->birthday.toString() );
+ if ( !mData->mailer.isEmpty() ) l.append( mData->mailer );
+ if ( mData->timeZone.isValid() ) l.append( mData->timeZone.asString() );
+ if ( mData->geo.isValid() ) l.append( mData->geo.asString() );
+ if ( !mData->title .isEmpty() ) l.append( mData->title );
+ if ( !mData->role.isEmpty() ) l.append( mData->role );
+ if ( !mData->organization.isEmpty() ) l.append( mData->organization );
+ if ( !mData->note.isEmpty() ) l.append( mData->note );
+ if ( !mData->productId.isEmpty() ) l.append(mData->productId );
+ if ( !mData->sortString.isEmpty() ) l.append( mData->sortString );
+ if ( mData->secrecy.isValid() ) l.append( mData->secrecy.asString());
+ // if ( !mData->logo.isEmpty() ) l.append( );
+ //if ( !mData->photo.isEmpty() ) l.append( );
+ //if ( !mData->sound.isEmpty() ) l.append( );
+ //if ( !mData->agent.isEmpty() ) l.append( );
+ //if ( mData->url.isValid() ) l.append( );
+#if 0
+ if ( !mData->phoneNumbers.isEmpty() ) l.append( );
+ if ( !mData->addresses.isEmpty() ) l.append( );
+ //if ( !mData->keys.isEmpty() ) l.append( );
+ if ( !mData->emails.isEmpty() ) l.append( );
+ if ( !mData->categories .isEmpty() ) l.append( );
+ if ( !mData->custom.isEmpty() ) l.append( );
+#endif
+ KABC::PhoneNumber::List phoneNumbers;
+ KABC::PhoneNumber::List::Iterator phoneIter;
+
+ QStringList t;
+ for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end();
+ ++phoneIter )
+ t.append( ( *phoneIter ).number()+QString::number( ( *phoneIter ).type() ) );
+ t.sort();
+ uint iii;
+ for ( iii = 0; iii < t.count(); ++iii)
+ l.append( t[iii] );
+ t = mData->emails;
+ t.sort();
+ for ( iii = 0; iii < t.count(); ++iii)
+ l.append( t[iii] );
+ t = mData->categories;
+ t.sort();
+ for ( iii = 0; iii < t.count(); ++iii)
+ l.append( t[iii] );
+ t = mData->custom;
+ t.sort();
+ for ( iii = 0; iii < t.count(); ++iii)
+ l.append( t[iii] );
+ KABC::Address::List::Iterator addressIter;
+ for ( addressIter = mData->addresses.begin(); addressIter != mData->addresses.end();
+ ++addressIter ) {
+ t = (*addressIter).asList();
+ t.sort();
+ for ( iii = 0; iii < t.count(); ++iii)
+ l.append( t[iii] );
+ }
+ setCsum( dev, QString::number (getCsum4List(l)) );
+}
void Addressee::removeID(const QString &prof)
{
@@ -1455,5 +1551,4 @@ void Addressee::insertCustom( const QString &app, const QString &name,
}
}
-
mData->custom.append( qualifiedName + value );
}
diff --git a/kabc/addressee.h b/kabc/addressee.h
index f098371..0805458 100644
--- a/kabc/addressee.h
+++ b/kabc/addressee.h
@@ -107,4 +107,6 @@ class Addressee
QString getCsum( const QString & );
void removeID(const QString &);
+ void computeCsum(const QString &dev);
+ ulong getCsum4List( const QStringList & attList);
/**
Return, if the address book entry is empty.
diff --git a/kaddressbook/kabcore.cpp b/kaddressbook/kabcore.cpp
index cc8eb52..8776b53 100644
--- a/kaddressbook/kabcore.cpp
+++ b/kaddressbook/kabcore.cpp
@@ -2670,6 +2670,6 @@ bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBo
Addressee addresseeRSync;
Addressee addresseeLSync;
- KABC::Addressee::List addresseeRSyncSharp = remote->getExternLastSyncAddressees();
- KABC::Addressee::List addresseeLSyncSharp = local->getExternLastSyncAddressees();
+ // KABC::Addressee::List addresseeRSyncSharp = remote->getExternLastSyncAddressees();
+ //KABC::Addressee::List addresseeLSyncSharp = local->getExternLastSyncAddressees();
bool fullDateRange = false;
local->resetTempSyncStat();
@@ -2710,5 +2710,5 @@ bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBo
}
}
- fullDateRange = true; // debug only!
+ // fullDateRange = true; // debug only!
if ( fullDateRange )
mLastAddressbookSync = QDateTime::currentDateTime().addDays( -100*365);
@@ -2919,5 +2919,31 @@ bool KABCore::syncAB(QString filename, int mode)
if ( abLocal.load() ) {
qDebug("AB loaded %s mode %d",filename.latin1(), mode );
+ bool external = false;
+ Addressee lse = mAddressBook->findByUid( "last-syncAddressee-"+mCurrentSyncDevice );
+ if ( ! lse.isEmpty() ) {
+ if ( lse.familyName().left(4) == "!E: " )
+ external = true;
+ } else {
+ bool found = false;
+ QDateTime dt( QDate( 2004,1,1));
AddressBook::Iterator it;
+ for ( it = abLocal.begin(); it != abLocal.end(); ++it ) {
+ if ( (*it).revision() != dt ) {
+ found = true;
+ break;
+ }
+ }
+ external = ! found;
+ }
+
+ if ( external ) {
+ mGlobalSyncMode = SYNC_MODE_EXTERNAL;
+ AddressBook::Iterator it;
+ for ( it = abLocal.begin(); it != abLocal.end(); ++it ) {
+ (*it).setID( mCurrentSyncDevice, (*it).uid() );
+ (*it).computeCsum( mCurrentSyncDevice );
+ }
+ }
+ //AddressBook::Iterator it;
//QStringList vcards;
//for ( it = abLocal.begin(); it != abLocal.end(); ++it ) {
@@ -2928,4 +2954,6 @@ bool KABCore::syncAB(QString filename, int mode)
if ( KABPrefs::instance()->mWriteBackFile )
{
+ if ( external )
+ abLocal.removeDeletedAddressees();
qDebug("saving remote AB ");
abLocal.saveAB();