summaryrefslogtreecommitdiffabout
path: root/kabc/addressee.cpp
Unidiff
Diffstat (limited to 'kabc/addressee.cpp') (more/less context) (show whitespace changes)
-rw-r--r--kabc/addressee.cpp28
1 files changed, 23 insertions, 5 deletions
diff --git a/kabc/addressee.cpp b/kabc/addressee.cpp
index e241281..31ce1d6 100644
--- a/kabc/addressee.cpp
+++ b/kabc/addressee.cpp
@@ -34,24 +34,26 @@ $Id$
34#include <klocale.h> 34#include <klocale.h>
35#include <kidmanager.h> 35#include <kidmanager.h>
36//US 36//US
37#include <kstandarddirs.h> 37#include <kstandarddirs.h>
38#include <libkcal/syncdefines.h> 38#include <libkcal/syncdefines.h>
39 39
40//US #include "resource.h" 40//US #include "resource.h"
41#include "addressee.h" 41#include "addressee.h"
42 42
43using namespace KABC; 43using namespace KABC;
44 44
45static bool matchBinaryPattern( int value, int pattern ); 45static bool matchBinaryPattern( int value, int pattern );
46static bool matchBinaryPatternA( int value, int pattern );
47static bool matchBinaryPatternP( int value, int pattern );
46 48
47struct Addressee::AddresseeData : public KShared 49struct Addressee::AddresseeData : public KShared
48{ 50{
49 QString uid; 51 QString uid;
50 QString name; 52 QString name;
51 QString formattedName; 53 QString formattedName;
52 QString familyName; 54 QString familyName;
53 QString givenName; 55 QString givenName;
54 QString additionalName; 56 QString additionalName;
55 QString prefix; 57 QString prefix;
56 QString suffix; 58 QString suffix;
57 QString nickName; 59 QString nickName;
@@ -372,38 +374,38 @@ void Addressee::setExternalUID( const QString &id )
372 mData->externalUID = id; 374 mData->externalUID = id;
373} 375}
374 376
375QString Addressee::externalUID() const 377QString Addressee::externalUID() const
376{ 378{
377 return mData->externalUID; 379 return mData->externalUID;
378} 380}
379void Addressee::setOriginalExternalUID( const QString &id ) 381void Addressee::setOriginalExternalUID( const QString &id )
380{ 382{
381 if ( id == mData->originalExternalUID ) return; 383 if ( id == mData->originalExternalUID ) return;
382 detach(); 384 detach();
383 mData->empty = false; 385 mData->empty = false;
384 qDebug("*******Set orig uid %s ", id.latin1()); 386 //qDebug("*******Set orig uid %s ", id.latin1());
385 mData->originalExternalUID = id; 387 mData->originalExternalUID = id;
386} 388}
387 389
388QString Addressee::originalExternalUID() const 390QString Addressee::originalExternalUID() const
389{ 391{
390 return mData->originalExternalUID; 392 return mData->originalExternalUID;
391} 393}
392 394
393void Addressee::setUid( const QString &id ) 395void Addressee::setUid( const QString &id )
394{ 396{
395 if ( id == mData->uid ) return; 397 if ( id == mData->uid ) return;
396 detach(); 398 detach();
397 qDebug("****setuid %s ", id.latin1()); 399 //qDebug("****setuid %s ", id.latin1());
398 mData->empty = false; 400 mData->empty = false;
399 mData->uid = id; 401 mData->uid = id;
400} 402}
401 403
402QString Addressee::uid() const 404QString Addressee::uid() const
403{ 405{
404 if ( mData->uid.isEmpty() ) 406 if ( mData->uid.isEmpty() )
405 mData->uid = KApplication::randomString( 10 ); 407 mData->uid = KApplication::randomString( 10 );
406 408
407 return mData->uid; 409 return mData->uid;
408} 410}
409 411
@@ -1281,25 +1283,25 @@ void Addressee::removePhoneNumber( const PhoneNumber &phoneNumber )
1281 if ( (*it).id() == phoneNumber.id() ) { 1283 if ( (*it).id() == phoneNumber.id() ) {
1282 mData->phoneNumbers.remove( it ); 1284 mData->phoneNumbers.remove( it );
1283 return; 1285 return;
1284 } 1286 }
1285 } 1287 }
1286} 1288}
1287 1289
1288PhoneNumber Addressee::phoneNumber( int type ) const 1290PhoneNumber Addressee::phoneNumber( int type ) const
1289{ 1291{
1290 PhoneNumber phoneNumber( "", type ); 1292 PhoneNumber phoneNumber( "", type );
1291 PhoneNumber::List::ConstIterator it; 1293 PhoneNumber::List::ConstIterator it;
1292 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) { 1294 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) {
1293 if ( matchBinaryPattern( (*it).type(), type ) ) { 1295 if ( matchBinaryPatternP( (*it).type(), type ) ) {
1294 if ( (*it).type() & PhoneNumber::Pref ) 1296 if ( (*it).type() & PhoneNumber::Pref )
1295 return (*it); 1297 return (*it);
1296 else if ( phoneNumber.number().isEmpty() ) 1298 else if ( phoneNumber.number().isEmpty() )
1297 phoneNumber = (*it); 1299 phoneNumber = (*it);
1298 } 1300 }
1299 } 1301 }
1300 1302
1301 return phoneNumber; 1303 return phoneNumber;
1302} 1304}
1303 1305
1304PhoneNumber::List Addressee::phoneNumbers() const 1306PhoneNumber::List Addressee::phoneNumbers() const
1305{ 1307{
@@ -1518,25 +1520,25 @@ void Addressee::removeAddress( const Address &address )
1518 if ( (*it).id() == address.id() ) { 1520 if ( (*it).id() == address.id() ) {
1519 mData->addresses.remove( it ); 1521 mData->addresses.remove( it );
1520 return; 1522 return;
1521 } 1523 }
1522 } 1524 }
1523} 1525}
1524 1526
1525Address Addressee::address( int type ) const 1527Address Addressee::address( int type ) const
1526{ 1528{
1527 Address address( type ); 1529 Address address( type );
1528 Address::List::ConstIterator it; 1530 Address::List::ConstIterator it;
1529 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) { 1531 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) {
1530 if ( matchBinaryPattern( (*it).type(), type ) ) { 1532 if ( matchBinaryPatternA( (*it).type(), type ) ) {
1531 if ( (*it).type() & Address::Pref ) 1533 if ( (*it).type() & Address::Pref )
1532 return (*it); 1534 return (*it);
1533 else if ( address.isEmpty() ) 1535 else if ( address.isEmpty() )
1534 address = (*it); 1536 address = (*it);
1535 } 1537 }
1536 } 1538 }
1537 1539
1538 return address; 1540 return address;
1539} 1541}
1540 1542
1541Address::List Addressee::addresses() const 1543Address::List Addressee::addresses() const
1542{ 1544{
@@ -1826,26 +1828,42 @@ QDataStream &KABC::operator>>( QDataStream &s, Addressee &a )
1826 s >> a.mData->agent; 1828 s >> a.mData->agent;
1827 s >> a.mData->phoneNumbers; 1829 s >> a.mData->phoneNumbers;
1828 s >> a.mData->addresses; 1830 s >> a.mData->addresses;
1829 s >> a.mData->emails; 1831 s >> a.mData->emails;
1830 s >> a.mData->categories; 1832 s >> a.mData->categories;
1831 s >> a.mData->custom; 1833 s >> a.mData->custom;
1832 s >> a.mData->keys; 1834 s >> a.mData->keys;
1833 1835
1834 a.mData->empty = false; 1836 a.mData->empty = false;
1835 1837
1836 return s; 1838 return s;
1837} 1839}
1838
1839bool matchBinaryPattern( int value, int pattern ) 1840bool matchBinaryPattern( int value, int pattern )
1840{ 1841{
1841 /** 1842 /**
1842 We want to match all telephonnumbers/addresses which have the bits in the 1843 We want to match all telephonnumbers/addresses which have the bits in the
1843 pattern set. More are allowed. 1844 pattern set. More are allowed.
1844 if pattern == 0 we have a special handling, then we want only those with 1845 if pattern == 0 we have a special handling, then we want only those with
1845 exactly no bit set. 1846 exactly no bit set.
1846 */ 1847 */
1847 if ( pattern == 0 ) 1848 if ( pattern == 0 )
1848 return ( value == 0 ); 1849 return ( value == 0 );
1849 else 1850 else
1850 return ( pattern == ( pattern & value ) ); 1851 return ( pattern == ( pattern & value ) );
1851} 1852}
1853
1854bool matchBinaryPatternP( int value, int pattern )
1855{
1856
1857 if ( pattern == 0 )
1858 return ( value == 0 );
1859 else
1860 return ( (pattern |PhoneNumber::Pref ) == ( value |PhoneNumber::Pref ) );
1861}
1862bool matchBinaryPatternA( int value, int pattern )
1863{
1864
1865 if ( pattern == 0 )
1866 return ( value == 0 );
1867 else
1868 return ( (pattern | Address::Pref) == ( value | Address::Pref ) );
1869}