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
@@ -40,12 +40,14 @@ $Id$
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;
@@ -378,26 +380,26 @@ QString Addressee::externalUID() const
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{
@@ -1287,13 +1289,13 @@ void Addressee::removePhoneNumber( const PhoneNumber &phoneNumber )
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 }
@@ -1524,13 +1526,13 @@ void Addressee::removeAddress( const Address &address )
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 }
@@ -1832,13 +1834,12 @@ QDataStream &KABC::operator>>( QDataStream &s, Addressee &a )
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
@@ -1846,6 +1847,23 @@ bool matchBinaryPattern( int value, int pattern )
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}