summaryrefslogtreecommitdiffabout
path: root/kabc
Side-by-side diff
Diffstat (limited to 'kabc') (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
6 files changed, 183 insertions, 9 deletions
diff --git a/kabc/address.cpp b/kabc/address.cpp
index c820a6c..5ffe511 100644
--- a/kabc/address.cpp
+++ b/kabc/address.cpp
@@ -87,8 +87,21 @@ bool Address::isEmpty() const
}
return false;
}
+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()
{
*this = Address();
}
diff --git a/kabc/address.h b/kabc/address.h
index ad132a7..6b53c7e 100644
--- a/kabc/address.h
+++ b/kabc/address.h
@@ -106,8 +106,9 @@ class Address
/**
Clears all entries of the address.
*/
void clear();
+ QStringList asList();
/**
Sets the unique id.
*/
diff --git a/kabc/addressbook.cpp b/kabc/addressbook.cpp
index 16e1653..ec9f893 100644
--- a/kabc/addressbook.cpp
+++ b/kabc/addressbook.cpp
@@ -233,8 +233,9 @@ AddressBook::AddressBook( const QString &config, const QString &family )
// the default family is "contact"
void AddressBook::init(const QString &config, const QString &family )
{
+ blockLSEchange = false;
d = new AddressBookData;
QString fami = family;
qDebug("new ab ");
if (config != 0) {
@@ -344,8 +345,9 @@ bool AddressBook::load()
Addressee::List::Iterator addrIt;
for ( addrIt = d->mAddressees.begin(); addrIt != d->mAddressees.end(); ++addrIt )
(*addrIt).setChanged( false );
+ blockLSEchange = true;
return ok;
}
bool AddressBook::save( Ticket *ticket )
@@ -446,14 +448,16 @@ 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;
if ( addr != (*it) )
changed = true;
@@ -473,11 +477,28 @@ void AddressBook::insertAddressee( const Addressee &a, bool setRev )
}
(*it).setChanged( true );
}
- 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();
if ( addr.resource() == 0 )
addr.setResource( standardResource() );
@@ -487,14 +508,52 @@ void AddressBook::insertAddressee( const Addressee &a, bool setRev )
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();
}
void AddressBook::removeAddressee( const Iterator &it )
{
@@ -522,22 +581,24 @@ Addressee AddressBook::findByUid( const QString &uid )
}
}
return Addressee();
}
+#if 0
Addressee::List AddressBook::getExternLastSyncAddressees()
{
Addressee::List results;
Iterator it;
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 );
}
}
return results;
}
+#endif
void AddressBook::resetTempSyncStat()
{
Iterator it;
for ( it = begin(); it != end(); ++it ) {
diff --git a/kabc/addressbook.h b/kabc/addressbook.h
index 253de68..2f2678b 100644
--- a/kabc/addressbook.h
+++ b/kabc/addressbook.h
@@ -288,11 +288,12 @@ class AddressBook : public QObject
*/
void cleanUp();
// sync stuff
- Addressee::List getExternLastSyncAddressees();
+ //Addressee::List getExternLastSyncAddressees();
void resetTempSyncStat();
QStringList uidList();
+ void removeDeletedAddressees();
signals:
/**
@@ -323,8 +324,9 @@ class AddressBook : public QObject
struct AddressBookData;
AddressBookData *d;
+ bool blockLSEchange;
};
QDataStream &operator<<( QDataStream &, const AddressBook & );
QDataStream &operator>>( QDataStream &, AddressBook & );
diff --git a/kabc/addressee.cpp b/kabc/addressee.cpp
index 7f04d8f..0f5d605 100644
--- a/kabc/addressee.cpp
+++ b/kabc/addressee.cpp
@@ -173,8 +173,104 @@ bool Addressee::operator!=( const Addressee &a ) const
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)
{
detach();
mData->mExternalId = KIdManager::removeId ( mData->mExternalId, prof);
@@ -1453,9 +1549,8 @@ void Addressee::insertCustom( const QString &app, const QString &name,
(*it) = qualifiedName + value;
return;
}
}
-
mData->custom.append( qualifiedName + value );
}
void Addressee::removeCustom( const QString &app, const QString &name)
diff --git a/kabc/addressee.h b/kabc/addressee.h
index f098371..0805458 100644
--- a/kabc/addressee.h
+++ b/kabc/addressee.h
@@ -105,8 +105,10 @@ class Addressee
QString getID( const QString & );
void setCsum( const QString &, const QString & );
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.
*/
bool isEmpty() const;