-rw-r--r-- | kabc/address.cpp | 13 | ||||
-rw-r--r-- | kabc/address.h | 1 | ||||
-rw-r--r-- | kabc/addressbook.cpp | 75 | ||||
-rw-r--r-- | kabc/addressbook.h | 4 | ||||
-rw-r--r-- | kabc/addressee.cpp | 97 | ||||
-rw-r--r-- | kabc/addressee.h | 2 | ||||
-rw-r--r-- | kaddressbook/kabcore.cpp | 34 |
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 | |||
@@ -88,6 +88,19 @@ bool Address::isEmpty() const | |||
88 | return false; | 88 | return false; |
89 | } | 89 | } |
90 | 90 | ||
91 | QStringList Address::asList() | ||
92 | { | ||
93 | QStringList result; | ||
94 | if ( ! mPostOfficeBox.isEmpty() )result.append(mPostOfficeBox); | ||
95 | if ( ! mExtended.isEmpty())result.append(mExtended); | ||
96 | if ( ! mStreet.isEmpty())result.append(mStreet); | ||
97 | if ( ! mLocality.isEmpty() )result.append(mLocality); | ||
98 | if ( ! mRegion.isEmpty())result.append(mRegion); | ||
99 | if ( ! mPostalCode.isEmpty())result.append(mPostalCode); | ||
100 | if ( ! mCountry.isEmpty())result.append(mCountry); | ||
101 | if ( ! mLabel.isEmpty() )result.append(mLabel); | ||
102 | return result; | ||
103 | } | ||
91 | void Address::clear() | 104 | void Address::clear() |
92 | { | 105 | { |
93 | *this = Address(); | 106 | *this = Address(); |
diff --git a/kabc/address.h b/kabc/address.h index ad132a7..6b53c7e 100644 --- a/kabc/address.h +++ b/kabc/address.h | |||
@@ -107,6 +107,7 @@ class Address | |||
107 | Clears all entries of the address. | 107 | Clears all entries of the address. |
108 | */ | 108 | */ |
109 | void clear(); | 109 | void clear(); |
110 | QStringList asList(); | ||
110 | 111 | ||
111 | /** | 112 | /** |
112 | Sets the unique id. | 113 | 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 | |||
@@ -234,6 +234,7 @@ AddressBook::AddressBook( const QString &config, const QString &family ) | |||
234 | // the default family is "contact" | 234 | // the default family is "contact" |
235 | void AddressBook::init(const QString &config, const QString &family ) | 235 | void AddressBook::init(const QString &config, const QString &family ) |
236 | { | 236 | { |
237 | blockLSEchange = false; | ||
237 | d = new AddressBookData; | 238 | d = new AddressBookData; |
238 | QString fami = family; | 239 | QString fami = family; |
239 | qDebug("new ab "); | 240 | qDebug("new ab "); |
@@ -345,6 +346,7 @@ bool AddressBook::load() | |||
345 | for ( addrIt = d->mAddressees.begin(); addrIt != d->mAddressees.end(); ++addrIt ) | 346 | for ( addrIt = d->mAddressees.begin(); addrIt != d->mAddressees.end(); ++addrIt ) |
346 | (*addrIt).setChanged( false ); | 347 | (*addrIt).setChanged( false ); |
347 | 348 | ||
349 | blockLSEchange = true; | ||
348 | return ok; | 350 | return ok; |
349 | } | 351 | } |
350 | 352 | ||
@@ -447,12 +449,14 @@ Ticket *AddressBook::requestSaveTicket( Resource *resource ) | |||
447 | 449 | ||
448 | void AddressBook::insertAddressee( const Addressee &a, bool setRev ) | 450 | void AddressBook::insertAddressee( const Addressee &a, bool setRev ) |
449 | { | 451 | { |
452 | if ( blockLSEchange && setRev && a.uid().left( 19 ) == QString("last-syncAddressee-") ) { | ||
453 | return; | ||
454 | } | ||
455 | bool found = false; | ||
450 | Addressee::List::Iterator it; | 456 | Addressee::List::Iterator it; |
451 | for ( it = d->mAddressees.begin(); it != d->mAddressees.end(); ++it ) { | 457 | for ( it = d->mAddressees.begin(); it != d->mAddressees.end(); ++it ) { |
452 | if ( a.uid() == (*it).uid() ) { | 458 | if ( a.uid() == (*it).uid() ) { |
453 | if ( setRev && (*it).uid().left( 19 ) == QString("last-syncAddressee-") ) { | 459 | |
454 | return; | ||
455 | } | ||
456 | bool changed = false; | 460 | bool changed = false; |
457 | Addressee addr = a; | 461 | Addressee addr = a; |
458 | if ( addr != (*it) ) | 462 | if ( addr != (*it) ) |
@@ -474,9 +478,26 @@ void AddressBook::insertAddressee( const Addressee &a, bool setRev ) | |||
474 | (*it).setChanged( true ); | 478 | (*it).setChanged( true ); |
475 | } | 479 | } |
476 | 480 | ||
477 | return; | 481 | found = true; |
482 | } else { | ||
483 | if ( (*it).uid() == QString("last-syncAddressee-") ) { | ||
484 | QString name = (*it).uid().mid( 19 ); | ||
485 | Addressee b = a; | ||
486 | QString id = b.getID( name ); | ||
487 | if ( ! id.isEmpty() ) { | ||
488 | QString des = (*it).note(); | ||
489 | int startN; | ||
490 | if( (startN = des.find( id ) ) >= 0 ) { | ||
491 | int endN = des.find( ",", startN+1 ); | ||
492 | des = des.left( startN ) + des.mid( endN+1 ); | ||
493 | (*it).setNote( des ); | ||
494 | } | ||
478 | } | 495 | } |
479 | } | 496 | } |
497 | } | ||
498 | } | ||
499 | if ( found ) | ||
500 | return; | ||
480 | d->mAddressees.append( a ); | 501 | d->mAddressees.append( a ); |
481 | Addressee& addr = d->mAddressees.last(); | 502 | Addressee& addr = d->mAddressees.last(); |
482 | if ( addr.resource() == 0 ) | 503 | if ( addr.resource() == 0 ) |
@@ -488,12 +509,50 @@ void AddressBook::insertAddressee( const Addressee &a, bool setRev ) | |||
488 | void AddressBook::removeAddressee( const Addressee &a ) | 509 | void AddressBook::removeAddressee( const Addressee &a ) |
489 | { | 510 | { |
490 | Iterator it; | 511 | Iterator it; |
512 | Iterator it2; | ||
513 | bool found = false; | ||
491 | for ( it = begin(); it != end(); ++it ) { | 514 | for ( it = begin(); it != end(); ++it ) { |
492 | if ( a.uid() == (*it).uid() ) { | 515 | if ( a.uid() == (*it).uid() ) { |
493 | removeAddressee( it ); | 516 | found = true; |
494 | return; | 517 | it2 = it; |
518 | } else { | ||
519 | if ( (*it).uid() == QString("last-syncAddressee-") ) { | ||
520 | QString name = (*it).uid().mid( 19 ); | ||
521 | Addressee b = a; | ||
522 | QString id = b.getID( name ); | ||
523 | if ( ! id.isEmpty() ) { | ||
524 | QString des = (*it).note(); | ||
525 | if( des.find( id ) < 0 ) { | ||
526 | des += id + ","; | ||
527 | (*it).setNote( des ); | ||
528 | } | ||
495 | } | 529 | } |
496 | } | 530 | } |
531 | |||
532 | } | ||
533 | } | ||
534 | |||
535 | if ( found ) | ||
536 | removeAddressee( it2 ); | ||
537 | |||
538 | } | ||
539 | |||
540 | void AddressBook::removeDeletedAddressees() | ||
541 | { | ||
542 | deleteRemovedAddressees(); | ||
543 | Iterator it = begin(); | ||
544 | Iterator it2 ; | ||
545 | QDateTime dt ( QDate( 2004,1,1) ); | ||
546 | while ( it != end() ) { | ||
547 | (*it).setRevision( dt ); | ||
548 | if ( (*it).tempSyncStat() == SYNC_TEMPSTATE_DELETE ) { | ||
549 | it2 = it; | ||
550 | ++it; | ||
551 | removeAddressee( it2 ); | ||
552 | } else | ||
553 | ++it; | ||
554 | } | ||
555 | deleteRemovedAddressees(); | ||
497 | } | 556 | } |
498 | 557 | ||
499 | void AddressBook::removeAddressee( const Iterator &it ) | 558 | void AddressBook::removeAddressee( const Iterator &it ) |
@@ -523,6 +582,7 @@ Addressee AddressBook::findByUid( const QString &uid ) | |||
523 | } | 582 | } |
524 | return Addressee(); | 583 | return Addressee(); |
525 | } | 584 | } |
585 | #if 0 | ||
526 | Addressee::List AddressBook::getExternLastSyncAddressees() | 586 | Addressee::List AddressBook::getExternLastSyncAddressees() |
527 | { | 587 | { |
528 | Addressee::List results; | 588 | Addressee::List results; |
@@ -530,13 +590,14 @@ Addressee::List AddressBook::getExternLastSyncAddressees() | |||
530 | Iterator it; | 590 | Iterator it; |
531 | for ( it = begin(); it != end(); ++it ) { | 591 | for ( it = begin(); it != end(); ++it ) { |
532 | if ( (*it).uid().left( 19 ) == "last-syncAddressee-" ) { | 592 | if ( (*it).uid().left( 19 ) == "last-syncAddressee-" ) { |
533 | if ( (*it).familyName().left(3) == "E: " ) | 593 | if ( (*it).familyName().left(4) == "!E: " ) |
534 | results.append( *it ); | 594 | results.append( *it ); |
535 | } | 595 | } |
536 | } | 596 | } |
537 | 597 | ||
538 | return results; | 598 | return results; |
539 | } | 599 | } |
600 | #endif | ||
540 | void AddressBook::resetTempSyncStat() | 601 | void AddressBook::resetTempSyncStat() |
541 | { | 602 | { |
542 | Iterator it; | 603 | Iterator it; |
diff --git a/kabc/addressbook.h b/kabc/addressbook.h index 253de68..2f2678b 100644 --- a/kabc/addressbook.h +++ b/kabc/addressbook.h | |||
@@ -289,9 +289,10 @@ class AddressBook : public QObject | |||
289 | void cleanUp(); | 289 | void cleanUp(); |
290 | 290 | ||
291 | // sync stuff | 291 | // sync stuff |
292 | Addressee::List getExternLastSyncAddressees(); | 292 | //Addressee::List getExternLastSyncAddressees(); |
293 | void resetTempSyncStat(); | 293 | void resetTempSyncStat(); |
294 | QStringList uidList(); | 294 | QStringList uidList(); |
295 | void removeDeletedAddressees(); | ||
295 | 296 | ||
296 | 297 | ||
297 | signals: | 298 | signals: |
@@ -324,6 +325,7 @@ class AddressBook : public QObject | |||
324 | 325 | ||
325 | struct AddressBookData; | 326 | struct AddressBookData; |
326 | AddressBookData *d; | 327 | AddressBookData *d; |
328 | bool blockLSEchange; | ||
327 | }; | 329 | }; |
328 | 330 | ||
329 | QDataStream &operator<<( QDataStream &, const AddressBook & ); | 331 | QDataStream &operator<<( QDataStream &, const AddressBook & ); |
diff --git a/kabc/addressee.cpp b/kabc/addressee.cpp index 7f04d8f..0f5d605 100644 --- a/kabc/addressee.cpp +++ b/kabc/addressee.cpp | |||
@@ -174,6 +174,102 @@ bool Addressee::isEmpty() const | |||
174 | { | 174 | { |
175 | return mData->empty; | 175 | return mData->empty; |
176 | } | 176 | } |
177 | ulong Addressee::getCsum4List( const QStringList & attList) | ||
178 | { | ||
179 | int max = attList.count(); | ||
180 | ulong cSum = 0; | ||
181 | int j,k,i; | ||
182 | int add; | ||
183 | for ( i = 0; i < max ; ++i ) { | ||
184 | QString s = attList[i]; | ||
185 | if ( ! s.isEmpty() ){ | ||
186 | j = s.length(); | ||
187 | for ( k = 0; k < j; ++k ) { | ||
188 | int mul = k +1; | ||
189 | add = s[k].unicode (); | ||
190 | if ( k < 16 ) | ||
191 | mul = mul * mul; | ||
192 | int ii = i+1; | ||
193 | add = add * mul *ii*ii*ii; | ||
194 | cSum += add; | ||
195 | } | ||
196 | } | ||
197 | |||
198 | } | ||
199 | //QString dump = attList.join(","); | ||
200 | //qDebug("csum: %d %s", cSum,dump.latin1()); | ||
201 | |||
202 | return cSum; | ||
203 | |||
204 | } | ||
205 | void Addressee::computeCsum(const QString &dev) | ||
206 | { | ||
207 | QStringList l; | ||
208 | if ( !mData->name.isEmpty() ) l.append(mData->name); | ||
209 | if ( !mData->formattedName.isEmpty() ) l.append(mData->formattedName ); | ||
210 | if ( !mData->familyName.isEmpty() ) l.append( mData->familyName ); | ||
211 | if ( !mData->givenName.isEmpty() ) l.append(mData->givenName ); | ||
212 | if ( !mData->additionalName ) l.append( mData->additionalName ); | ||
213 | if ( !mData->prefix.isEmpty() ) l.append( mData->prefix ); | ||
214 | if ( !mData->suffix.isEmpty() ) l.append( mData->suffix ); | ||
215 | if ( !mData->nickName.isEmpty() ) l.append( mData->nickName ); | ||
216 | if ( mData->birthday.isValid() ) l.append( mData->birthday.toString() ); | ||
217 | if ( !mData->mailer.isEmpty() ) l.append( mData->mailer ); | ||
218 | if ( mData->timeZone.isValid() ) l.append( mData->timeZone.asString() ); | ||
219 | if ( mData->geo.isValid() ) l.append( mData->geo.asString() ); | ||
220 | if ( !mData->title .isEmpty() ) l.append( mData->title ); | ||
221 | if ( !mData->role.isEmpty() ) l.append( mData->role ); | ||
222 | if ( !mData->organization.isEmpty() ) l.append( mData->organization ); | ||
223 | if ( !mData->note.isEmpty() ) l.append( mData->note ); | ||
224 | if ( !mData->productId.isEmpty() ) l.append(mData->productId ); | ||
225 | if ( !mData->sortString.isEmpty() ) l.append( mData->sortString ); | ||
226 | if ( mData->secrecy.isValid() ) l.append( mData->secrecy.asString()); | ||
227 | // if ( !mData->logo.isEmpty() ) l.append( ); | ||
228 | //if ( !mData->photo.isEmpty() ) l.append( ); | ||
229 | //if ( !mData->sound.isEmpty() ) l.append( ); | ||
230 | //if ( !mData->agent.isEmpty() ) l.append( ); | ||
231 | //if ( mData->url.isValid() ) l.append( ); | ||
232 | #if 0 | ||
233 | if ( !mData->phoneNumbers.isEmpty() ) l.append( ); | ||
234 | if ( !mData->addresses.isEmpty() ) l.append( ); | ||
235 | //if ( !mData->keys.isEmpty() ) l.append( ); | ||
236 | if ( !mData->emails.isEmpty() ) l.append( ); | ||
237 | if ( !mData->categories .isEmpty() ) l.append( ); | ||
238 | if ( !mData->custom.isEmpty() ) l.append( ); | ||
239 | #endif | ||
240 | KABC::PhoneNumber::List phoneNumbers; | ||
241 | KABC::PhoneNumber::List::Iterator phoneIter; | ||
242 | |||
243 | QStringList t; | ||
244 | for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end(); | ||
245 | ++phoneIter ) | ||
246 | t.append( ( *phoneIter ).number()+QString::number( ( *phoneIter ).type() ) ); | ||
247 | t.sort(); | ||
248 | uint iii; | ||
249 | for ( iii = 0; iii < t.count(); ++iii) | ||
250 | l.append( t[iii] ); | ||
251 | t = mData->emails; | ||
252 | t.sort(); | ||
253 | for ( iii = 0; iii < t.count(); ++iii) | ||
254 | l.append( t[iii] ); | ||
255 | t = mData->categories; | ||
256 | t.sort(); | ||
257 | for ( iii = 0; iii < t.count(); ++iii) | ||
258 | l.append( t[iii] ); | ||
259 | t = mData->custom; | ||
260 | t.sort(); | ||
261 | for ( iii = 0; iii < t.count(); ++iii) | ||
262 | l.append( t[iii] ); | ||
263 | KABC::Address::List::Iterator addressIter; | ||
264 | for ( addressIter = mData->addresses.begin(); addressIter != mData->addresses.end(); | ||
265 | ++addressIter ) { | ||
266 | t = (*addressIter).asList(); | ||
267 | t.sort(); | ||
268 | for ( iii = 0; iii < t.count(); ++iii) | ||
269 | l.append( t[iii] ); | ||
270 | } | ||
271 | setCsum( dev, QString::number (getCsum4List(l)) ); | ||
272 | } | ||
177 | void Addressee::removeID(const QString &prof) | 273 | void Addressee::removeID(const QString &prof) |
178 | { | 274 | { |
179 | detach(); | 275 | detach(); |
@@ -1454,7 +1550,6 @@ void Addressee::insertCustom( const QString &app, const QString &name, | |||
1454 | return; | 1550 | return; |
1455 | } | 1551 | } |
1456 | } | 1552 | } |
1457 | |||
1458 | mData->custom.append( qualifiedName + value ); | 1553 | mData->custom.append( qualifiedName + value ); |
1459 | } | 1554 | } |
1460 | 1555 | ||
diff --git a/kabc/addressee.h b/kabc/addressee.h index f098371..0805458 100644 --- a/kabc/addressee.h +++ b/kabc/addressee.h | |||
@@ -106,6 +106,8 @@ class Addressee | |||
106 | void setCsum( const QString &, const QString & ); | 106 | void setCsum( const QString &, const QString & ); |
107 | QString getCsum( const QString & ); | 107 | QString getCsum( const QString & ); |
108 | void removeID(const QString &); | 108 | void removeID(const QString &); |
109 | void computeCsum(const QString &dev); | ||
110 | ulong getCsum4List( const QStringList & attList); | ||
109 | /** | 111 | /** |
110 | Return, if the address book entry is empty. | 112 | Return, if the address book entry is empty. |
111 | */ | 113 | */ |
diff --git a/kaddressbook/kabcore.cpp b/kaddressbook/kabcore.cpp index cc8eb52..8776b53 100644 --- a/kaddressbook/kabcore.cpp +++ b/kaddressbook/kabcore.cpp | |||
@@ -2669,8 +2669,8 @@ bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBo | |||
2669 | Addressee addresseeL; | 2669 | Addressee addresseeL; |
2670 | Addressee addresseeRSync; | 2670 | Addressee addresseeRSync; |
2671 | Addressee addresseeLSync; | 2671 | Addressee addresseeLSync; |
2672 | KABC::Addressee::List addresseeRSyncSharp = remote->getExternLastSyncAddressees(); | 2672 | // KABC::Addressee::List addresseeRSyncSharp = remote->getExternLastSyncAddressees(); |
2673 | KABC::Addressee::List addresseeLSyncSharp = local->getExternLastSyncAddressees(); | 2673 | //KABC::Addressee::List addresseeLSyncSharp = local->getExternLastSyncAddressees(); |
2674 | bool fullDateRange = false; | 2674 | bool fullDateRange = false; |
2675 | local->resetTempSyncStat(); | 2675 | local->resetTempSyncStat(); |
2676 | mLastAddressbookSync = QDateTime::currentDateTime(); | 2676 | mLastAddressbookSync = QDateTime::currentDateTime(); |
@@ -2709,7 +2709,7 @@ bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBo | |||
2709 | qDebug("FULLDATE 3 %s %s", addresseeLSync.revision().toString().latin1() , addresseeRSync.revision().toString().latin1() ); | 2709 | qDebug("FULLDATE 3 %s %s", addresseeLSync.revision().toString().latin1() , addresseeRSync.revision().toString().latin1() ); |
2710 | } | 2710 | } |
2711 | } | 2711 | } |
2712 | fullDateRange = true; // debug only! | 2712 | // fullDateRange = true; // debug only! |
2713 | if ( fullDateRange ) | 2713 | if ( fullDateRange ) |
2714 | mLastAddressbookSync = QDateTime::currentDateTime().addDays( -100*365); | 2714 | mLastAddressbookSync = QDateTime::currentDateTime().addDays( -100*365); |
2715 | else | 2715 | else |
@@ -2918,7 +2918,33 @@ bool KABCore::syncAB(QString filename, int mode) | |||
2918 | bool syncOK = false; | 2918 | bool syncOK = false; |
2919 | if ( abLocal.load() ) { | 2919 | if ( abLocal.load() ) { |
2920 | qDebug("AB loaded %s mode %d",filename.latin1(), mode ); | 2920 | qDebug("AB loaded %s mode %d",filename.latin1(), mode ); |
2921 | bool external = false; | ||
2922 | Addressee lse = mAddressBook->findByUid( "last-syncAddressee-"+mCurrentSyncDevice ); | ||
2923 | if ( ! lse.isEmpty() ) { | ||
2924 | if ( lse.familyName().left(4) == "!E: " ) | ||
2925 | external = true; | ||
2926 | } else { | ||
2927 | bool found = false; | ||
2928 | QDateTime dt( QDate( 2004,1,1)); | ||
2921 | AddressBook::Iterator it; | 2929 | AddressBook::Iterator it; |
2930 | for ( it = abLocal.begin(); it != abLocal.end(); ++it ) { | ||
2931 | if ( (*it).revision() != dt ) { | ||
2932 | found = true; | ||
2933 | break; | ||
2934 | } | ||
2935 | } | ||
2936 | external = ! found; | ||
2937 | } | ||
2938 | |||
2939 | if ( external ) { | ||
2940 | mGlobalSyncMode = SYNC_MODE_EXTERNAL; | ||
2941 | AddressBook::Iterator it; | ||
2942 | for ( it = abLocal.begin(); it != abLocal.end(); ++it ) { | ||
2943 | (*it).setID( mCurrentSyncDevice, (*it).uid() ); | ||
2944 | (*it).computeCsum( mCurrentSyncDevice ); | ||
2945 | } | ||
2946 | } | ||
2947 | //AddressBook::Iterator it; | ||
2922 | //QStringList vcards; | 2948 | //QStringList vcards; |
2923 | //for ( it = abLocal.begin(); it != abLocal.end(); ++it ) { | 2949 | //for ( it = abLocal.begin(); it != abLocal.end(); ++it ) { |
2924 | // qDebug("Name %s ", (*it).familyName().latin1()); | 2950 | // qDebug("Name %s ", (*it).familyName().latin1()); |
@@ -2927,6 +2953,8 @@ bool KABCore::syncAB(QString filename, int mode) | |||
2927 | if ( syncOK ) { | 2953 | if ( syncOK ) { |
2928 | if ( KABPrefs::instance()->mWriteBackFile ) | 2954 | if ( KABPrefs::instance()->mWriteBackFile ) |
2929 | { | 2955 | { |
2956 | if ( external ) | ||
2957 | abLocal.removeDeletedAddressees(); | ||
2930 | qDebug("saving remote AB "); | 2958 | qDebug("saving remote AB "); |
2931 | abLocal.saveAB(); | 2959 | abLocal.saveAB(); |
2932 | } | 2960 | } |