summaryrefslogtreecommitdiffabout
path: root/kabc/addressee.cpp
Unidiff
Diffstat (limited to 'kabc/addressee.cpp') (more/less context) (show whitespace changes)
-rw-r--r--kabc/addressee.cpp75
1 files changed, 72 insertions, 3 deletions
diff --git a/kabc/addressee.cpp b/kabc/addressee.cpp
index 6cfac80..e8e440c 100644
--- a/kabc/addressee.cpp
+++ b/kabc/addressee.cpp
@@ -23,24 +23,25 @@
23Enhanced Version of the file for platform independent KDE tools. 23Enhanced Version of the file for platform independent KDE tools.
24Copyright (c) 2004 Ulf Schenk 24Copyright (c) 2004 Ulf Schenk
25 25
26$Id$ 26$Id$
27*/ 27*/
28 28
29#include <kconfig.h> 29#include <kconfig.h>
30 30
31#include <ksharedptr.h> 31#include <ksharedptr.h>
32#include <kdebug.h> 32#include <kdebug.h>
33#include <kapplication.h> 33#include <kapplication.h>
34#include <klocale.h> 34#include <klocale.h>
35#include <kmessagebox.h>
35#include <kidmanager.h> 36#include <kidmanager.h>
36//US 37//US
37#include <kstandarddirs.h> 38#include <kstandarddirs.h>
38#include <libkcal/syncdefines.h> 39#include <libkcal/syncdefines.h>
39 40
40//US #include "resource.h" 41//US #include "resource.h"
41#include "addressee.h" 42#include "addressee.h"
42 43
43using namespace KABC; 44using namespace KABC;
44 45
45static bool matchBinaryPattern( int value, int pattern ); 46static bool matchBinaryPattern( int value, int pattern );
46static bool matchBinaryPatternA( int value, int pattern ); 47static bool matchBinaryPatternA( int value, int pattern );
@@ -202,25 +203,25 @@ ulong Addressee::getCsum4List( const QStringList & attList)
202 203
203 } 204 }
204 //QString dump = attList.join(","); 205 //QString dump = attList.join(",");
205 //qDebug("csum: %d %s", cSum,dump.latin1()); 206 //qDebug("csum: %d %s", cSum,dump.latin1());
206 207
207 return cSum; 208 return cSum;
208 209
209} 210}
210void Addressee::computeCsum(const QString &dev) 211void Addressee::computeCsum(const QString &dev)
211{ 212{
212 QStringList l; 213 QStringList l;
213 //if ( !mData->name.isEmpty() ) l.append(mData->name); 214 //if ( !mData->name.isEmpty() ) l.append(mData->name);
214 //if ( !mData->formattedName.isEmpty() ) l.append(mData->formattedName ); 215 if ( !mData->formattedName.isEmpty() ) l.append(mData->formattedName );
215 if ( !mData->familyName.isEmpty() ) l.append( mData->familyName ); 216 if ( !mData->familyName.isEmpty() ) l.append( mData->familyName );
216 if ( !mData->givenName.isEmpty() ) l.append(mData->givenName ); 217 if ( !mData->givenName.isEmpty() ) l.append(mData->givenName );
217 if ( !mData->additionalName.isEmpty() ) l.append( mData->additionalName ); 218 if ( !mData->additionalName.isEmpty() ) l.append( mData->additionalName );
218 if ( !mData->prefix.isEmpty() ) l.append( mData->prefix ); 219 if ( !mData->prefix.isEmpty() ) l.append( mData->prefix );
219 if ( !mData->suffix.isEmpty() ) l.append( mData->suffix ); 220 if ( !mData->suffix.isEmpty() ) l.append( mData->suffix );
220 if ( !mData->nickName.isEmpty() ) l.append( mData->nickName ); 221 if ( !mData->nickName.isEmpty() ) l.append( mData->nickName );
221 if ( mData->birthday.isValid() ) l.append( mData->birthday.toString() ); 222 if ( mData->birthday.isValid() ) l.append( mData->birthday.toString() );
222 if ( !mData->mailer.isEmpty() ) l.append( mData->mailer ); 223 if ( !mData->mailer.isEmpty() ) l.append( mData->mailer );
223 if ( mData->timeZone.isValid() ) l.append( mData->timeZone.asString() ); 224 if ( mData->timeZone.isValid() ) l.append( mData->timeZone.asString() );
224 if ( mData->geo.isValid() ) l.append( mData->geo.asString() ); 225 if ( mData->geo.isValid() ) l.append( mData->geo.asString() );
225 if ( !mData->title .isEmpty() ) l.append( mData->title ); 226 if ( !mData->title .isEmpty() ) l.append( mData->title );
226 if ( !mData->role.isEmpty() ) l.append( mData->role ); 227 if ( !mData->role.isEmpty() ) l.append( mData->role );
@@ -323,24 +324,71 @@ bool Addressee::matchPhoneNumber( QRegExp* re ) const
323 for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end(); ++phoneIter ) { 324 for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end(); ++phoneIter ) {
324#if QT_VERSION >= 0x030000 325#if QT_VERSION >= 0x030000
325 if (re->search( (*phoneIter).number() ) == 0) 326 if (re->search( (*phoneIter).number() ) == 0)
326#else 327#else
327 if (re->match( (*phoneIter).number() ) == 0) 328 if (re->match( (*phoneIter).number() ) == 0)
328#endif 329#endif
329 return true; 330 return true;
330 331
331 } 332 }
332 return false; 333 return false;
333 334
334} 335}
336void Addressee::mergeOLContact( const Addressee& ad )
337{
338 if ( mData->formattedName.isEmpty() ) mData->formattedName = ad.mData->formattedName;
339 if ( mData->mailer.isEmpty() ) mData->mailer = ad.mData->mailer;
340 if ( !mData->timeZone.isValid() ) mData->timeZone = ad.mData->timeZone;
341 if ( !mData->geo.isValid() ) mData->geo = ad.mData->geo;
342 if ( mData->logo.undefined() && !ad.mData->logo.undefined() ) mData->logo = ad.mData->logo;
343 if ( mData->photo.undefined() && !ad.mData->photo.undefined() ) mData->photo = ad.mData->photo;
344 if ( !mData->sound.isIntern() ) {
345 if ( mData->sound.url().isEmpty() ) {
346 mData->sound = ad.mData->sound;
347 }
348 }
349 if ( !mData->agent.isIntern() ) {
350 if ( mData->agent.url().isEmpty() ) {
351 mData->agent = ad.mData->agent;
352 }
353 }
354 {
355 Key::List::Iterator itA;
356 for( itA = ad.mData->keys.begin(); itA != ad.mData->keys.end(); ++itA ) {
357 bool found = false;
358 Key::List::Iterator it;
359 for( it = mData->keys.begin(); it != mData->keys.end(); ++it ) {
360 if ( (*it) == (*itA)) {
361 found = true;
362 break;
363
364 }
365 }
366 if ( ! found ) {
367 mData->keys.append( *itA );
368 }
369 }
370 }
371
372 KABC::Address addthis = otherAddress();
373 KABC::Address addother = ad.otherAddress();
374 if ( !addthis.isEmpty() && !addother.isEmpty() )
375 addthis.setType( addother.type() );
376 //qDebug("merge contact %s ", ad.uid().latin1());
377 setUid( ad.uid() );
378 setRevision( ad.revision() );
379
380
381}
382
335void Addressee::mergeContact( const Addressee& ad , bool isSubSet) // = false) 383void Addressee::mergeContact( const Addressee& ad , bool isSubSet) // = false)
336{ 384{
337 // merge all standard non-outlook fields. 385 // merge all standard non-outlook fields.
338 //if isSubSet (e.g. mobile phone sync) merge all fields 386 //if isSubSet (e.g. mobile phone sync) merge all fields
339 387
340 detach(); 388 detach();
341 if ( isSubSet ) { 389 if ( isSubSet ) {
342 if ( mData->name.isEmpty() ) mData->name = ad.mData->name; 390 if ( mData->name.isEmpty() ) mData->name = ad.mData->name;
343 if ( mData->formattedName.isEmpty() ) mData->formattedName = ad.mData->formattedName; 391 if ( mData->formattedName.isEmpty() ) mData->formattedName = ad.mData->formattedName;
344 if ( mData->familyName.isEmpty() ) mData->familyName = ad.mData->familyName; 392 if ( mData->familyName.isEmpty() ) mData->familyName = ad.mData->familyName;
345 if ( mData->givenName.isEmpty() ) mData->givenName = ad.mData->givenName ; 393 if ( mData->givenName.isEmpty() ) mData->givenName = ad.mData->givenName ;
346 if ( mData->additionalName ) mData->additionalName = ad.mData->additionalName; 394 if ( mData->additionalName ) mData->additionalName = ad.mData->additionalName;
@@ -1644,25 +1692,24 @@ QString Addressee::preferredEmail() const
1644QStringList Addressee::emails() const 1692QStringList Addressee::emails() const
1645{ 1693{
1646 return mData->emails; 1694 return mData->emails;
1647} 1695}
1648void Addressee::setEmails( const QStringList& emails ) { 1696void Addressee::setEmails( const QStringList& emails ) {
1649 detach(); 1697 detach();
1650 mData->emails = emails; 1698 mData->emails = emails;
1651} 1699}
1652void Addressee::insertPhoneNumber( const PhoneNumber &phoneNumber ) 1700void Addressee::insertPhoneNumber( const PhoneNumber &phoneNumber )
1653{ 1701{
1654 detach(); 1702 detach();
1655 mData->empty = false; 1703 mData->empty = false;
1656
1657 PhoneNumber::List::Iterator it; 1704 PhoneNumber::List::Iterator it;
1658 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) { 1705 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) {
1659 if ( (*it).id() == phoneNumber.id() ) { 1706 if ( (*it).id() == phoneNumber.id() ) {
1660 *it = phoneNumber; 1707 *it = phoneNumber;
1661 return; 1708 return;
1662 } 1709 }
1663 } 1710 }
1664 mData->phoneNumbers.append( phoneNumber ); 1711 mData->phoneNumbers.append( phoneNumber );
1665} 1712}
1666 1713
1667void Addressee::removePhoneNumber( const PhoneNumber &phoneNumber ) 1714void Addressee::removePhoneNumber( const PhoneNumber &phoneNumber )
1668{ 1715{
@@ -1711,24 +1758,35 @@ int Addressee::hasPhoneNumberType( int type )
1711PhoneNumber::List Addressee::phoneNumbers( int type ) const 1758PhoneNumber::List Addressee::phoneNumbers( int type ) const
1712{ 1759{
1713 PhoneNumber::List list; 1760 PhoneNumber::List list;
1714 1761
1715 PhoneNumber::List::ConstIterator it; 1762 PhoneNumber::List::ConstIterator it;
1716 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) { 1763 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) {
1717 if ( matchBinaryPattern( (*it).type(), type ) ) { 1764 if ( matchBinaryPattern( (*it).type(), type ) ) {
1718 list.append( *it ); 1765 list.append( *it );
1719 } 1766 }
1720 } 1767 }
1721 return list; 1768 return list;
1722} 1769}
1770QString Addressee::phoneNumberString( int type ) const
1771{
1772
1773 PhoneNumber::List::ConstIterator it;
1774 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) {
1775 if ((*it).type() == type ) {
1776 return ( *it ).number();
1777 }
1778 }
1779 return "";
1780}
1723 1781
1724PhoneNumber Addressee::findPhoneNumber( const QString &id ) const 1782PhoneNumber Addressee::findPhoneNumber( const QString &id ) const
1725{ 1783{
1726 PhoneNumber::List::ConstIterator it; 1784 PhoneNumber::List::ConstIterator it;
1727 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) { 1785 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) {
1728 if ( (*it).id() == id ) { 1786 if ( (*it).id() == id ) {
1729 return *it; 1787 return *it;
1730 } 1788 }
1731 } 1789 }
1732 return PhoneNumber(); 1790 return PhoneNumber();
1733} 1791}
1734 1792
@@ -1916,25 +1974,36 @@ void Addressee::insertAddress( const Address &address )
1916void Addressee::removeAddress( const Address &address ) 1974void Addressee::removeAddress( const Address &address )
1917{ 1975{
1918 detach(); 1976 detach();
1919 1977
1920 Address::List::Iterator it; 1978 Address::List::Iterator it;
1921 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) { 1979 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) {
1922 if ( (*it).id() == address.id() ) { 1980 if ( (*it).id() == address.id() ) {
1923 mData->addresses.remove( it ); 1981 mData->addresses.remove( it );
1924 return; 1982 return;
1925 } 1983 }
1926 } 1984 }
1927} 1985}
1928 1986Address Addressee::otherAddress() const
1987{
1988 Address::List::ConstIterator it;
1989 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) {
1990 if ( matchBinaryPatternA( (*it).type(), KABC::Address::Work ) )
1991 continue;
1992 if ( matchBinaryPatternA( (*it).type(), KABC::Address::Home ) )
1993 continue;
1994 return (*it);
1995 }
1996 return Address();
1997}
1929Address Addressee::address( int type ) const 1998Address Addressee::address( int type ) const
1930{ 1999{
1931 Address address( type ); 2000 Address address( type );
1932 Address::List::ConstIterator it; 2001 Address::List::ConstIterator it;
1933 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) { 2002 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) {
1934 if ( matchBinaryPatternA( (*it).type(), type ) ) { 2003 if ( matchBinaryPatternA( (*it).type(), type ) ) {
1935 if ( (*it).type() & Address::Pref ) 2004 if ( (*it).type() & Address::Pref )
1936 return (*it); 2005 return (*it);
1937 else if ( address.isEmpty() ) 2006 else if ( address.isEmpty() )
1938 address = (*it); 2007 address = (*it);
1939 } 2008 }
1940 } 2009 }