summaryrefslogtreecommitdiffabout
path: root/kabc/addressee.cpp
Unidiff
Diffstat (limited to 'kabc/addressee.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--kabc/addressee.cpp2
1 files changed, 1 insertions, 1 deletions
diff --git a/kabc/addressee.cpp b/kabc/addressee.cpp
index 3d4992c..028d3bb 100644
--- a/kabc/addressee.cpp
+++ b/kabc/addressee.cpp
@@ -1,2132 +1,2132 @@
1/*** Warning! This file has been generated by the script makeaddressee ***/ 1/*** Warning! This file has been generated by the script makeaddressee ***/
2/* 2/*
3 This file is part of libkabc. 3 This file is part of libkabc.
4 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> 4 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
5 5
6 This library is free software; you can redistribute it and/or 6 This library is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Library General Public 7 modify it under the terms of the GNU Library General Public
8 License as published by the Free Software Foundation; either 8 License as published by the Free Software Foundation; either
9 version 2 of the License, or (at your option) any later version. 9 version 2 of the License, or (at your option) any later version.
10 10
11 This library is distributed in the hope that it will be useful, 11 This library is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Library General Public License for more details. 14 Library General Public License for more details.
15 15
16 You should have received a copy of the GNU Library General Public License 16 You should have received a copy of the GNU Library General Public License
17 along with this library; see the file COPYING.LIB. If not, write to 17 along with this library; see the file COPYING.LIB. If not, write to
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19 Boston, MA 02111-1307, USA. 19 Boston, MA 02111-1307, USA.
20*/ 20*/
21 21
22/* 22/*
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 <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 ); 46static bool matchBinaryPatternA( int value, int pattern );
47static bool matchBinaryPatternP( int value, int pattern ); 47static bool matchBinaryPatternP( int value, int pattern );
48 48
49struct Addressee::AddresseeData : public KShared 49struct Addressee::AddresseeData : public KShared
50{ 50{
51 QString uid; 51 QString uid;
52 QString name; 52 QString name;
53 QString formattedName; 53 QString formattedName;
54 QString familyName; 54 QString familyName;
55 QString givenName; 55 QString givenName;
56 QString additionalName; 56 QString additionalName;
57 QString prefix; 57 QString prefix;
58 QString suffix; 58 QString suffix;
59 QString nickName; 59 QString nickName;
60 QDateTime birthday; 60 QDateTime birthday;
61 QString mailer; 61 QString mailer;
62 TimeZone timeZone; 62 TimeZone timeZone;
63 Geo geo; 63 Geo geo;
64 QString title; 64 QString title;
65 QString role; 65 QString role;
66 QString organization; 66 QString organization;
67 QString note; 67 QString note;
68 QString productId; 68 QString productId;
69 QDateTime revision; 69 QDateTime revision;
70 QString sortString; 70 QString sortString;
71 QString externalUID; 71 QString externalUID;
72 QString originalExternalUID; 72 QString originalExternalUID;
73 KURL url; 73 KURL url;
74 Secrecy secrecy; 74 Secrecy secrecy;
75 Picture logo; 75 Picture logo;
76 Picture photo; 76 Picture photo;
77 Sound sound; 77 Sound sound;
78 Agent agent; 78 Agent agent;
79 QString mExternalId; 79 QString mExternalId;
80 PhoneNumber::List phoneNumbers; 80 PhoneNumber::List phoneNumbers;
81 Address::List addresses; 81 Address::List addresses;
82 Key::List keys; 82 Key::List keys;
83 QStringList emails; 83 QStringList emails;
84 QStringList categories; 84 QStringList categories;
85 QStringList custom; 85 QStringList custom;
86 int mTempSyncStat; 86 int mTempSyncStat;
87 Resource *resource; 87 Resource *resource;
88 88
89 bool empty :1; 89 bool empty :1;
90 bool changed :1; 90 bool changed :1;
91 bool tagged :1; 91 bool tagged :1;
92}; 92};
93 93
94Addressee::Addressee() 94Addressee::Addressee()
95{ 95{
96 mData = new AddresseeData; 96 mData = new AddresseeData;
97 mData->empty = true; 97 mData->empty = true;
98 mData->changed = false; 98 mData->changed = false;
99 mData->resource = 0; 99 mData->resource = 0;
100 mData->mExternalId = ":"; 100 mData->mExternalId = ":";
101 mData->revision = QDateTime ( QDate( 2003,1,1)); 101 mData->revision = QDateTime ( QDate( 2003,1,1));
102 mData->mTempSyncStat = SYNC_TEMPSTATE_INITIAL; 102 mData->mTempSyncStat = SYNC_TEMPSTATE_INITIAL;
103} 103}
104 104
105Addressee::~Addressee() 105Addressee::~Addressee()
106{ 106{
107} 107}
108 108
109Addressee::Addressee( const Addressee &a ) 109Addressee::Addressee( const Addressee &a )
110{ 110{
111 mData = a.mData; 111 mData = a.mData;
112} 112}
113 113
114Addressee &Addressee::operator=( const Addressee &a ) 114Addressee &Addressee::operator=( const Addressee &a )
115{ 115{
116 mData = a.mData; 116 mData = a.mData;
117 return (*this); 117 return (*this);
118} 118}
119 119
120Addressee Addressee::copy() 120Addressee Addressee::copy()
121{ 121{
122 Addressee a; 122 Addressee a;
123 *(a.mData) = *mData; 123 *(a.mData) = *mData;
124 return a; 124 return a;
125} 125}
126 126
127void Addressee::detach() 127void Addressee::detach()
128{ 128{
129 if ( mData.count() == 1 ) return; 129 if ( mData.count() == 1 ) return;
130 *this = copy(); 130 *this = copy();
131} 131}
132 132
133bool Addressee::operator==( const Addressee &a ) const 133bool Addressee::operator==( const Addressee &a ) const
134{ 134{
135 if ( uid() != a.uid() ) return false; 135 if ( uid() != a.uid() ) return false;
136 if ( mData->name != a.mData->name ) return false; 136 if ( mData->name != a.mData->name ) return false;
137 if ( mData->formattedName != a.mData->formattedName ) return false; 137 if ( mData->formattedName != a.mData->formattedName ) return false;
138 if ( mData->familyName != a.mData->familyName ) return false; 138 if ( mData->familyName != a.mData->familyName ) return false;
139 if ( mData->givenName != a.mData->givenName ) return false; 139 if ( mData->givenName != a.mData->givenName ) return false;
140 if ( mData->additionalName != a.mData->additionalName ) return false; 140 if ( mData->additionalName != a.mData->additionalName ) return false;
141 if ( mData->prefix != a.mData->prefix ) return false; 141 if ( mData->prefix != a.mData->prefix ) return false;
142 if ( mData->suffix != a.mData->suffix ) return false; 142 if ( mData->suffix != a.mData->suffix ) return false;
143 if ( mData->nickName != a.mData->nickName ) return false; 143 if ( mData->nickName != a.mData->nickName ) return false;
144 if ( mData->birthday != a.mData->birthday ) return false; 144 if ( mData->birthday != a.mData->birthday ) return false;
145 if ( mData->mailer != a.mData->mailer ) return false; 145 if ( mData->mailer != a.mData->mailer ) return false;
146 if ( mData->timeZone != a.mData->timeZone ) return false; 146 if ( mData->timeZone != a.mData->timeZone ) return false;
147 if ( mData->geo != a.mData->geo ) return false; 147 if ( mData->geo != a.mData->geo ) return false;
148 if ( mData->title != a.mData->title ) return false; 148 if ( mData->title != a.mData->title ) return false;
149 if ( mData->role != a.mData->role ) return false; 149 if ( mData->role != a.mData->role ) return false;
150 if ( mData->organization != a.mData->organization ) return false; 150 if ( mData->organization != a.mData->organization ) return false;
151 if ( mData->note != a.mData->note ) return false; 151 if ( mData->note != a.mData->note ) return false;
152 if ( mData->productId != a.mData->productId ) return false; 152 if ( mData->productId != a.mData->productId ) return false;
153 //if ( mData->revision != a.mData->revision ) return false; 153 //if ( mData->revision != a.mData->revision ) return false;
154 if ( mData->sortString != a.mData->sortString ) return false; 154 if ( mData->sortString != a.mData->sortString ) return false;
155 if ( mData->secrecy != a.mData->secrecy ) return false; 155 if ( mData->secrecy != a.mData->secrecy ) return false;
156 if ( mData->logo != a.mData->logo ) return false; 156 if ( mData->logo != a.mData->logo ) return false;
157 if ( mData->photo != a.mData->photo ) return false; 157 if ( mData->photo != a.mData->photo ) return false;
158 if ( mData->sound != a.mData->sound ) return false; 158 if ( mData->sound != a.mData->sound ) return false;
159 if ( mData->agent != a.mData->agent ) return false; 159 if ( mData->agent != a.mData->agent ) return false;
160 if ( ( mData->url.isValid() || a.mData->url.isValid() ) && 160 if ( ( mData->url.isValid() || a.mData->url.isValid() ) &&
161 ( mData->url != a.mData->url ) ) return false; 161 ( mData->url != a.mData->url ) ) return false;
162 if ( mData->phoneNumbers != a.mData->phoneNumbers ) return false; 162 if ( mData->phoneNumbers != a.mData->phoneNumbers ) return false;
163 if ( mData->addresses != a.mData->addresses ) return false; 163 if ( mData->addresses != a.mData->addresses ) return false;
164 if ( mData->keys != a.mData->keys ) return false; 164 if ( mData->keys != a.mData->keys ) return false;
165 if ( mData->emails != a.mData->emails ) return false; 165 if ( mData->emails != a.mData->emails ) return false;
166 if ( mData->categories != a.mData->categories ) return false; 166 if ( mData->categories != a.mData->categories ) return false;
167 if ( mData->custom != a.mData->custom ) return false; 167 if ( mData->custom != a.mData->custom ) return false;
168 168
169 return true; 169 return true;
170} 170}
171 171
172bool Addressee::operator!=( const Addressee &a ) const 172bool Addressee::operator!=( const Addressee &a ) const
173{ 173{
174 return !( a == *this ); 174 return !( a == *this );
175} 175}
176 176
177bool Addressee::isEmpty() const 177bool Addressee::isEmpty() const
178{ 178{
179 return mData->empty; 179 return mData->empty;
180} 180}
181ulong Addressee::getCsum4List( const QStringList & attList) 181ulong Addressee::getCsum4List( const QStringList & attList)
182{ 182{
183 int max = attList.count(); 183 int max = attList.count();
184 ulong cSum = 0; 184 ulong cSum = 0;
185 int j,k,i; 185 int j,k,i;
186 int add; 186 int add;
187 for ( i = 0; i < max ; ++i ) { 187 for ( i = 0; i < max ; ++i ) {
188 QString s = attList[i]; 188 QString s = attList[i];
189 if ( ! s.isEmpty() ){ 189 if ( ! s.isEmpty() ){
190 j = s.length(); 190 j = s.length();
191 for ( k = 0; k < j; ++k ) { 191 for ( k = 0; k < j; ++k ) {
192 int mul = k +1; 192 int mul = k +1;
193 add = s[k].unicode (); 193 add = s[k].unicode ();
194 if ( k < 16 ) 194 if ( k < 16 )
195 mul = mul * mul; 195 mul = mul * mul;
196 int ii = i+1; 196 int ii = i+1;
197 add = add * mul *ii*ii*ii; 197 add = add * mul *ii*ii*ii;
198 cSum += add; 198 cSum += add;
199 } 199 }
200 } 200 }
201 201
202 } 202 }
203 //QString dump = attList.join(","); 203 //QString dump = attList.join(",");
204 //qDebug("csum: %d %s", cSum,dump.latin1()); 204 //qDebug("csum: %d %s", cSum,dump.latin1());
205 205
206 return cSum; 206 return cSum;
207 207
208} 208}
209void Addressee::computeCsum(const QString &dev) 209void Addressee::computeCsum(const QString &dev)
210{ 210{
211 QStringList l; 211 QStringList l;
212 //if ( !mData->name.isEmpty() ) l.append(mData->name); 212 //if ( !mData->name.isEmpty() ) l.append(mData->name);
213 //if ( !mData->formattedName.isEmpty() ) l.append(mData->formattedName ); 213 //if ( !mData->formattedName.isEmpty() ) l.append(mData->formattedName );
214 if ( !mData->familyName.isEmpty() ) l.append( mData->familyName ); 214 if ( !mData->familyName.isEmpty() ) l.append( mData->familyName );
215 if ( !mData->givenName.isEmpty() ) l.append(mData->givenName ); 215 if ( !mData->givenName.isEmpty() ) l.append(mData->givenName );
216 if ( !mData->additionalName.isEmpty() ) l.append( mData->additionalName ); 216 if ( !mData->additionalName.isEmpty() ) l.append( mData->additionalName );
217 if ( !mData->prefix.isEmpty() ) l.append( mData->prefix ); 217 if ( !mData->prefix.isEmpty() ) l.append( mData->prefix );
218 if ( !mData->suffix.isEmpty() ) l.append( mData->suffix ); 218 if ( !mData->suffix.isEmpty() ) l.append( mData->suffix );
219 if ( !mData->nickName.isEmpty() ) l.append( mData->nickName ); 219 if ( !mData->nickName.isEmpty() ) l.append( mData->nickName );
220 if ( mData->birthday.isValid() ) l.append( mData->birthday.toString() ); 220 if ( mData->birthday.isValid() ) l.append( mData->birthday.toString() );
221 if ( !mData->mailer.isEmpty() ) l.append( mData->mailer ); 221 if ( !mData->mailer.isEmpty() ) l.append( mData->mailer );
222 if ( mData->timeZone.isValid() ) l.append( mData->timeZone.asString() ); 222 if ( mData->timeZone.isValid() ) l.append( mData->timeZone.asString() );
223 if ( mData->geo.isValid() ) l.append( mData->geo.asString() ); 223 if ( mData->geo.isValid() ) l.append( mData->geo.asString() );
224 if ( !mData->title .isEmpty() ) l.append( mData->title ); 224 if ( !mData->title .isEmpty() ) l.append( mData->title );
225 if ( !mData->role.isEmpty() ) l.append( mData->role ); 225 if ( !mData->role.isEmpty() ) l.append( mData->role );
226 if ( !mData->organization.isEmpty() ) l.append( mData->organization ); 226 if ( !mData->organization.isEmpty() ) l.append( mData->organization );
227 if ( !mData->note.isEmpty() ) l.append( mData->note ); 227 if ( !mData->note.isEmpty() ) l.append( mData->note );
228 if ( !mData->productId.isEmpty() ) l.append(mData->productId ); 228 if ( !mData->productId.isEmpty() ) l.append(mData->productId );
229 if ( !mData->sortString.isEmpty() ) l.append( mData->sortString ); 229 if ( !mData->sortString.isEmpty() ) l.append( mData->sortString );
230 if ( mData->secrecy.isValid() ) l.append( mData->secrecy.asString()); 230 if ( mData->secrecy.isValid() ) l.append( mData->secrecy.asString());
231 // if ( !mData->logo.isEmpty() ) l.append( ); 231 // if ( !mData->logo.isEmpty() ) l.append( );
232 //if ( !mData->photo.isEmpty() ) l.append( ); 232 //if ( !mData->photo.isEmpty() ) l.append( );
233 //if ( !mData->sound.isEmpty() ) l.append( ); 233 //if ( !mData->sound.isEmpty() ) l.append( );
234 //if ( !mData->agent.isEmpty() ) l.append( ); 234 //if ( !mData->agent.isEmpty() ) l.append( );
235 if ( mData->url.isValid() ) 235 if ( mData->url.isValid() )
236 if ( ! mData->url.path().isEmpty()) l.append( mData->url.path() ); 236 if ( ! mData->url.path().isEmpty()) l.append( mData->url.path() );
237 KABC::PhoneNumber::List phoneNumbers; 237 KABC::PhoneNumber::List phoneNumbers;
238 KABC::PhoneNumber::List::Iterator phoneIter; 238 KABC::PhoneNumber::List::Iterator phoneIter;
239 239
240 QStringList t; 240 QStringList t;
241 for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end(); 241 for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end();
242 ++phoneIter ) 242 ++phoneIter )
243 t.append( ( *phoneIter ).number()+QString::number( ( *phoneIter ).type() ) ); 243 t.append( ( *phoneIter ).number()+QString::number( ( *phoneIter ).type() ) );
244 t.sort(); 244 t.sort();
245 uint iii; 245 uint iii;
246 for ( iii = 0; iii < t.count(); ++iii) 246 for ( iii = 0; iii < t.count(); ++iii)
247 l.append( t[iii] ); 247 l.append( t[iii] );
248 t = mData->emails; 248 t = mData->emails;
249 t.sort(); 249 t.sort();
250 for ( iii = 0; iii < t.count(); ++iii) 250 for ( iii = 0; iii < t.count(); ++iii)
251 l.append( t[iii] ); 251 l.append( t[iii] );
252 t = mData->categories; 252 t = mData->categories;
253 t.sort(); 253 t.sort();
254 for ( iii = 0; iii < t.count(); ++iii) 254 for ( iii = 0; iii < t.count(); ++iii)
255 l.append( t[iii] ); 255 l.append( t[iii] );
256 t = mData->custom; 256 t = mData->custom;
257 t.sort(); 257 t.sort();
258 for ( iii = 0; iii < t.count(); ++iii) 258 for ( iii = 0; iii < t.count(); ++iii)
259 if ( t[iii].left( 25 ) != "KADDRESSBOOK-X-ExternalID" ) { 259 if ( t[iii].left( 25 ) != "KADDRESSBOOK-X-ExternalID" ) {
260 int find = t[iii].find (':')+1; 260 int find = t[iii].find (':')+1;
261 //qDebug("lennnn %d %d ", find, t[iii].length()); 261 //qDebug("lennnn %d %d ", find, t[iii].length());
262 if ( find < t[iii].length()) 262 if ( find < t[iii].length())
263 l.append( t[iii] ); 263 l.append( t[iii] );
264 264
265 } 265 }
266 KABC::Address::List::Iterator addressIter; 266 KABC::Address::List::Iterator addressIter;
267 for ( addressIter = mData->addresses.begin(); addressIter != mData->addresses.end(); 267 for ( addressIter = mData->addresses.begin(); addressIter != mData->addresses.end();
268 ++addressIter ) { 268 ++addressIter ) {
269 t = (*addressIter).asList(); 269 t = (*addressIter).asList();
270 t.sort(); 270 t.sort();
271 for ( iii = 0; iii < t.count(); ++iii) 271 for ( iii = 0; iii < t.count(); ++iii)
272 l.append( t[iii] ); 272 l.append( t[iii] );
273 } 273 }
274 uint cs = getCsum4List(l); 274 uint cs = getCsum4List(l);
275#if 1 275#if 0
276 for ( iii = 0; iii < l.count(); ++iii) 276 for ( iii = 0; iii < l.count(); ++iii)
277 qDebug("%d***%s***",iii,l[iii].latin1()); 277 qDebug("%d***%s***",iii,l[iii].latin1());
278 qDebug("CSUM computed %d %s %s", cs,QString::number (cs ).latin1(), uid().latin1() ); 278 qDebug("CSUM computed %d %s %s", cs,QString::number (cs ).latin1(), uid().latin1() );
279#endif 279#endif
280 setCsum( dev, QString::number (cs )); 280 setCsum( dev, QString::number (cs ));
281} 281}
282 282
283void Addressee::mergeContact( const Addressee& ad , bool isSubSet) // = false) 283void Addressee::mergeContact( const Addressee& ad , bool isSubSet) // = false)
284{ 284{
285 285
286 detach(); 286 detach();
287 if ( mData->name.isEmpty() ) mData->name = ad.mData->name; 287 if ( mData->name.isEmpty() ) mData->name = ad.mData->name;
288 if ( mData->formattedName.isEmpty() ) mData->formattedName = ad.mData->formattedName; 288 if ( mData->formattedName.isEmpty() ) mData->formattedName = ad.mData->formattedName;
289 if ( mData->familyName.isEmpty() ) mData->familyName = ad.mData->familyName; 289 if ( mData->familyName.isEmpty() ) mData->familyName = ad.mData->familyName;
290 if ( mData->givenName.isEmpty() ) mData->givenName = ad.mData->givenName ; 290 if ( mData->givenName.isEmpty() ) mData->givenName = ad.mData->givenName ;
291 if ( mData->additionalName ) mData->additionalName = ad.mData->additionalName; 291 if ( mData->additionalName ) mData->additionalName = ad.mData->additionalName;
292 if ( mData->prefix.isEmpty() ) mData->prefix = ad.mData->prefix; 292 if ( mData->prefix.isEmpty() ) mData->prefix = ad.mData->prefix;
293 if ( mData->suffix.isEmpty() ) mData->suffix = ad.mData->suffix; 293 if ( mData->suffix.isEmpty() ) mData->suffix = ad.mData->suffix;
294 if ( mData->nickName.isEmpty() ) mData->nickName = ad.mData->nickName; 294 if ( mData->nickName.isEmpty() ) mData->nickName = ad.mData->nickName;
295 if ( !mData->birthday.isValid() ) 295 if ( !mData->birthday.isValid() )
296 if ( ad.mData->birthday.isValid()) 296 if ( ad.mData->birthday.isValid())
297 mData->birthday = ad.mData->birthday; 297 mData->birthday = ad.mData->birthday;
298 if ( mData->mailer.isEmpty() ) mData->mailer = ad.mData->mailer; 298 if ( mData->mailer.isEmpty() ) mData->mailer = ad.mData->mailer;
299 if ( !mData->timeZone.isValid() ) mData->timeZone = ad.mData->timeZone; 299 if ( !mData->timeZone.isValid() ) mData->timeZone = ad.mData->timeZone;
300 if ( !mData->geo.isValid() ) mData->geo = ad.mData->geo; 300 if ( !mData->geo.isValid() ) mData->geo = ad.mData->geo;
301 if ( mData->title .isEmpty() ) mData->title = ad.mData->title ; 301 if ( mData->title .isEmpty() ) mData->title = ad.mData->title ;
302 if ( mData->role.isEmpty() ) mData->role = ad.mData->role ; 302 if ( mData->role.isEmpty() ) mData->role = ad.mData->role ;
303 if ( mData->organization.isEmpty() ) mData->organization = ad.mData->organization ; 303 if ( mData->organization.isEmpty() ) mData->organization = ad.mData->organization ;
304 if ( mData->note.isEmpty() ) mData->note = ad.mData->note ; 304 if ( mData->note.isEmpty() ) mData->note = ad.mData->note ;
305 if ( mData->productId.isEmpty() ) mData->productId = ad.mData->productId; 305 if ( mData->productId.isEmpty() ) mData->productId = ad.mData->productId;
306 if ( mData->sortString.isEmpty() ) mData->sortString = ad.mData->sortString; 306 if ( mData->sortString.isEmpty() ) mData->sortString = ad.mData->sortString;
307 if ( !mData->secrecy.isValid() ) mData->secrecy = ad.mData->secrecy; 307 if ( !mData->secrecy.isValid() ) mData->secrecy = ad.mData->secrecy;
308 if ( ( !mData->url.isValid() && ad.mData->url.isValid() ) ) mData->url = ad.mData->url ; 308 if ( ( !mData->url.isValid() && ad.mData->url.isValid() ) ) mData->url = ad.mData->url ;
309 QStringList t; 309 QStringList t;
310 QStringList tAD; 310 QStringList tAD;
311 uint iii; 311 uint iii;
312 312
313 // ********** phone numbers 313 // ********** phone numbers
314 PhoneNumber::List phoneAD = ad.phoneNumbers(); 314 PhoneNumber::List phoneAD = ad.phoneNumbers();
315 PhoneNumber::List::Iterator phoneItAD; 315 PhoneNumber::List::Iterator phoneItAD;
316 for ( phoneItAD = phoneAD.begin(); phoneItAD != phoneAD.end(); ++phoneItAD ) { 316 for ( phoneItAD = phoneAD.begin(); phoneItAD != phoneAD.end(); ++phoneItAD ) {
317 bool found = false; 317 bool found = false;
318 PhoneNumber::List::Iterator it; 318 PhoneNumber::List::Iterator it;
319 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) { 319 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) {
320 if ( ( *phoneItAD ).contains( (*it) ) ) { 320 if ( ( *phoneItAD ).contains( (*it) ) ) {
321 found = true; 321 found = true;
322 (*it).setType( ( *phoneItAD ).type() ); 322 (*it).setType( ( *phoneItAD ).type() );
323 (*it).setNumber( ( *phoneItAD ).number() ); 323 (*it).setNumber( ( *phoneItAD ).number() );
324 break; 324 break;
325 } 325 }
326 } 326 }
327 if ( isSubSet && ! found ) 327 if ( isSubSet && ! found )
328 mData->phoneNumbers.append( *phoneItAD ); 328 mData->phoneNumbers.append( *phoneItAD );
329 } 329 }
330 if ( isSubSet ) { 330 if ( isSubSet ) {
331 // ************* emails; 331 // ************* emails;
332 t = mData->emails; 332 t = mData->emails;
333 tAD = ad.mData->emails; 333 tAD = ad.mData->emails;
334 for ( iii = 0; iii < tAD.count(); ++iii) 334 for ( iii = 0; iii < tAD.count(); ++iii)
335 if ( !t.contains(tAD[iii] ) ) 335 if ( !t.contains(tAD[iii] ) )
336 mData->emails.append( tAD[iii] ); 336 mData->emails.append( tAD[iii] );
337 } 337 }
338 338
339 // ************* categories; 339 // ************* categories;
340 t = mData->categories; 340 t = mData->categories;
341 tAD = ad.mData->categories; 341 tAD = ad.mData->categories;
342 for ( iii = 0; iii < tAD.count(); ++iii) 342 for ( iii = 0; iii < tAD.count(); ++iii)
343 if ( !t.contains(tAD[iii] ) ) 343 if ( !t.contains(tAD[iii] ) )
344 mData->categories.append( tAD[iii] ); 344 mData->categories.append( tAD[iii] );
345 QStringList::ConstIterator it; 345 QStringList::ConstIterator it;
346 for( it = ad.mData->custom.begin(); it != ad.mData->custom.end(); ++it ) { 346 for( it = ad.mData->custom.begin(); it != ad.mData->custom.end(); ++it ) {
347 QString qualifiedName = (*it).left( (*it).find( ":" )); 347 QString qualifiedName = (*it).left( (*it).find( ":" ));
348 bool found = false; 348 bool found = false;
349 QStringList::ConstIterator itL; 349 QStringList::ConstIterator itL;
350 for( itL = mData->custom.begin(); itL != mData->custom.end(); ++itL ) { 350 for( itL = mData->custom.begin(); itL != mData->custom.end(); ++itL ) {
351 if ( (*itL).startsWith( qualifiedName ) ) { 351 if ( (*itL).startsWith( qualifiedName ) ) {
352 found = true; 352 found = true;
353 break; 353 break;
354 } 354 }
355 } 355 }
356 if ( ! found ) { 356 if ( ! found ) {
357 mData->custom.append( *it ); 357 mData->custom.append( *it );
358 } 358 }
359 } 359 }
360 if ( mData->logo.undefined() && !ad.mData->logo.undefined() ) mData->logo = ad.mData->logo; 360 if ( mData->logo.undefined() && !ad.mData->logo.undefined() ) mData->logo = ad.mData->logo;
361 if ( mData->photo.undefined() && !ad.mData->photo.undefined() ) mData->photo = ad.mData->photo; 361 if ( mData->photo.undefined() && !ad.mData->photo.undefined() ) mData->photo = ad.mData->photo;
362 if ( !mData->sound.isIntern() ) { 362 if ( !mData->sound.isIntern() ) {
363 if ( mData->sound.url().isEmpty() ) { 363 if ( mData->sound.url().isEmpty() ) {
364 mData->sound = ad.mData->sound; 364 mData->sound = ad.mData->sound;
365 } 365 }
366 } 366 }
367 if ( !mData->agent.isIntern() ) { 367 if ( !mData->agent.isIntern() ) {
368 if ( mData->agent.url().isEmpty() ) { 368 if ( mData->agent.url().isEmpty() ) {
369 mData->agent = ad.mData->agent; 369 mData->agent = ad.mData->agent;
370 } 370 }
371 } 371 }
372 { 372 {
373 Key::List::Iterator itA; 373 Key::List::Iterator itA;
374 for( itA = ad.mData->keys.begin(); itA != ad.mData->keys.end(); ++itA ) { 374 for( itA = ad.mData->keys.begin(); itA != ad.mData->keys.end(); ++itA ) {
375 bool found = false; 375 bool found = false;
376 Key::List::Iterator it; 376 Key::List::Iterator it;
377 for( it = mData->keys.begin(); it != mData->keys.end(); ++it ) { 377 for( it = mData->keys.begin(); it != mData->keys.end(); ++it ) {
378 if ( (*it) == (*itA)) { 378 if ( (*it) == (*itA)) {
379 found = true; 379 found = true;
380 break; 380 break;
381 381
382 } 382 }
383 } 383 }
384 if ( ! found ) { 384 if ( ! found ) {
385 mData->keys.append( *itA ); 385 mData->keys.append( *itA );
386 } 386 }
387 } 387 }
388 } 388 }
389 KABC::Address::List::Iterator addressIterA; 389 KABC::Address::List::Iterator addressIterA;
390 for ( addressIterA = ad.mData->addresses.begin(); addressIterA != ad.mData->addresses.end(); ++addressIterA ) { 390 for ( addressIterA = ad.mData->addresses.begin(); addressIterA != ad.mData->addresses.end(); ++addressIterA ) {
391 bool found = false; 391 bool found = false;
392 KABC::Address::List::Iterator addressIter; 392 KABC::Address::List::Iterator addressIter;
393 for ( addressIter = mData->addresses.begin(); addressIter != mData->addresses.end(); 393 for ( addressIter = mData->addresses.begin(); addressIter != mData->addresses.end();
394 ++addressIter ) { 394 ++addressIter ) {
395 if ( (*addressIter) == (*addressIterA)) { 395 if ( (*addressIter) == (*addressIterA)) {
396 found = true; 396 found = true;
397 (*addressIter).setType( (*addressIterA).type() ); 397 (*addressIter).setType( (*addressIterA).type() );
398 break; 398 break;
399 } 399 }
400 400
401 } 401 }
402 if ( isSubSet && ! found ) { 402 if ( isSubSet && ! found ) {
403 mData->addresses.append( *addressIterA ); 403 mData->addresses.append( *addressIterA );
404 } 404 }
405 } 405 }
406 //qDebug("merge contact %s ", ad.uid().latin1()); 406 //qDebug("merge contact %s ", ad.uid().latin1());
407 setUid( ad.uid() ); 407 setUid( ad.uid() );
408 setRevision( ad.revision() ); 408 setRevision( ad.revision() );
409} 409}
410 410
411bool Addressee::removeVoice() 411bool Addressee::removeVoice()
412{ 412{
413 PhoneNumber::List phoneN = phoneNumbers(); 413 PhoneNumber::List phoneN = phoneNumbers();
414 PhoneNumber::List::Iterator phoneIt; 414 PhoneNumber::List::Iterator phoneIt;
415 bool found = false; 415 bool found = false;
416 for ( phoneIt = phoneN.begin(); phoneIt != phoneN.end(); ++phoneIt ) { 416 for ( phoneIt = phoneN.begin(); phoneIt != phoneN.end(); ++phoneIt ) {
417 if ( (*phoneIt).type() & PhoneNumber::Voice) { // voice found 417 if ( (*phoneIt).type() & PhoneNumber::Voice) { // voice found
418 if ((*phoneIt).type() - PhoneNumber::Voice ) { 418 if ((*phoneIt).type() - PhoneNumber::Voice ) {
419 (*phoneIt).setType((*phoneIt).type() - PhoneNumber::Voice ); 419 (*phoneIt).setType((*phoneIt).type() - PhoneNumber::Voice );
420 insertPhoneNumber( (*phoneIt) ); 420 insertPhoneNumber( (*phoneIt) );
421 found = true; 421 found = true;
422 } 422 }
423 } 423 }
424 424
425 } 425 }
426 return found; 426 return found;
427} 427}
428 428
429bool Addressee::containsAdr(const Addressee& ad ) 429bool Addressee::containsAdr(const Addressee& ad )
430{ 430{
431 if ( ! ad.mData->familyName.isEmpty() ) if ( mData->familyName != ad.mData->familyName) return false; 431 if ( ! ad.mData->familyName.isEmpty() ) if ( mData->familyName != ad.mData->familyName) return false;
432 if ( ! ad.mData->givenName.isEmpty() )if ( mData->givenName != ad.mData->givenName ) return false; 432 if ( ! ad.mData->givenName.isEmpty() )if ( mData->givenName != ad.mData->givenName ) return false;
433 if ( ad.mData->url.isValid() ) if (mData->url != ad.mData->url) return false ; 433 if ( ad.mData->url.isValid() ) if (mData->url != ad.mData->url) return false ;
434 if ( ! ad.mData->role.isEmpty() ) if (mData->role != ad.mData->role) return false ; 434 if ( ! ad.mData->role.isEmpty() ) if (mData->role != ad.mData->role) return false ;
435 if ( ! ad.mData->organization.isEmpty() ) if (mData->organization != ad.mData->organization) return false ; 435 if ( ! ad.mData->organization.isEmpty() ) if (mData->organization != ad.mData->organization) return false ;
436 if ( ! ad.mData->note.isEmpty() ) if (mData->note != ad.mData->note) return false ; 436 if ( ! ad.mData->note.isEmpty() ) if (mData->note != ad.mData->note) return false ;
437 if ( ! ad.mData->title .isEmpty() ) if (mData->title != ad.mData->title ) return false ; 437 if ( ! ad.mData->title .isEmpty() ) if (mData->title != ad.mData->title ) return false ;
438 438
439 // compare phone numbers 439 // compare phone numbers
440 PhoneNumber::List phoneN = ad.phoneNumbers(); 440 PhoneNumber::List phoneN = ad.phoneNumbers();
441 PhoneNumber::List::Iterator phoneIt; 441 PhoneNumber::List::Iterator phoneIt;
442 bool found = false; 442 bool found = false;
443 for ( phoneIt = phoneN.begin(); phoneIt != phoneN.end(); ++phoneIt ) { 443 for ( phoneIt = phoneN.begin(); phoneIt != phoneN.end(); ++phoneIt ) {
444 bool found = false; 444 bool found = false;
445 PhoneNumber::List phoneL = ad.phoneNumbers(); 445 PhoneNumber::List phoneL = ad.phoneNumbers();
446 PhoneNumber::List::Iterator phoneItL; 446 PhoneNumber::List::Iterator phoneItL;
447 for ( phoneItL = phoneL.begin(); phoneItL != phoneL.end(); ++phoneItL ) { 447 for ( phoneItL = phoneL.begin(); phoneItL != phoneL.end(); ++phoneItL ) {
448 if ( ( *phoneItL ).number() == ( *phoneIt ).number() ) { 448 if ( ( *phoneItL ).number() == ( *phoneIt ).number() ) {
449 found = true; 449 found = true;
450 break; 450 break;
451 } 451 }
452 } 452 }
453 if ( ! found ) 453 if ( ! found )
454 return false; 454 return false;
455 } 455 }
456 return true; 456 return true;
457 457
458} 458}
459void Addressee::simplifyAddresses() 459void Addressee::simplifyAddresses()
460{ 460{
461 461
462 462
463 Address::List list; 463 Address::List list;
464 Address::List::Iterator it; 464 Address::List::Iterator it;
465 Address::List::Iterator it2; 465 Address::List::Iterator it2;
466 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) { 466 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) {
467 it2 = it; 467 it2 = it;
468 ++it2; 468 ++it2;
469 for( ; it2 != mData->addresses.end(); ++it2 ) { 469 for( ; it2 != mData->addresses.end(); ++it2 ) {
470 if ( (*it) == (*it2) ) { 470 if ( (*it) == (*it2) ) {
471 list.append( *it ); 471 list.append( *it );
472 break; 472 break;
473 } 473 }
474 } 474 }
475 } 475 }
476 for( it = list.begin(); it != list.end(); ++it ) { 476 for( it = list.begin(); it != list.end(); ++it ) {
477 removeAddress( (*it) ); 477 removeAddress( (*it) );
478 } 478 }
479 479
480 list.clear(); 480 list.clear();
481 int max = 2; 481 int max = 2;
482 if ( mData->url.isValid() ) 482 if ( mData->url.isValid() )
483 max = 1; 483 max = 1;
484 if ( mData->addresses.count() <= max ) return ; 484 if ( mData->addresses.count() <= max ) return ;
485 int count = 0; 485 int count = 0;
486 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) { 486 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) {
487 if ( count >= max ) 487 if ( count >= max )
488 list.append( *it ); 488 list.append( *it );
489 ++count; 489 ++count;
490 } 490 }
491 for( it = list.begin(); it != list.end(); ++it ) { 491 for( it = list.begin(); it != list.end(); ++it ) {
492 removeAddress( (*it) ); 492 removeAddress( (*it) );
493 } 493 }
494} 494}
495 495
496// removes all emails but the first 496// removes all emails but the first
497// needed by phone sync 497// needed by phone sync
498void Addressee::simplifyEmails() 498void Addressee::simplifyEmails()
499{ 499{
500 if ( mData->emails.count() == 0 ) return ; 500 if ( mData->emails.count() == 0 ) return ;
501 QString email = mData->emails.first(); 501 QString email = mData->emails.first();
502 detach(); 502 detach();
503 mData->emails.clear(); 503 mData->emails.clear();
504 mData->emails.append( email ); 504 mData->emails.append( email );
505} 505}
506 506
507void Addressee::simplifyPhoneNumbers() 507void Addressee::simplifyPhoneNumbers()
508{ 508{
509 int max = 4; 509 int max = 4;
510 int inList = mData->phoneNumbers.count(); 510 int inList = mData->phoneNumbers.count();
511 KABC::PhoneNumber::List removeNumbers; 511 KABC::PhoneNumber::List removeNumbers;
512 KABC::PhoneNumber::List::Iterator phoneIter; 512 KABC::PhoneNumber::List::Iterator phoneIter;
513 if ( inList > max ) { 513 if ( inList > max ) {
514 // delete non-preferred numbers 514 // delete non-preferred numbers
515 for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end(); 515 for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end();
516 ++phoneIter ) { 516 ++phoneIter ) {
517 if ( inList > max ) { 517 if ( inList > max ) {
518 if ( ! (( *phoneIter ).type() & PhoneNumber::Pref )) { 518 if ( ! (( *phoneIter ).type() & PhoneNumber::Pref )) {
519 removeNumbers.append( ( *phoneIter ) ); 519 removeNumbers.append( ( *phoneIter ) );
520 --inList; 520 --inList;
521 } 521 }
522 } else 522 } else
523 break; 523 break;
524 } 524 }
525 for ( phoneIter = removeNumbers.begin(); phoneIter != removeNumbers.end(); 525 for ( phoneIter = removeNumbers.begin(); phoneIter != removeNumbers.end();
526 ++phoneIter ) { 526 ++phoneIter ) {
527 removePhoneNumber(( *phoneIter )); 527 removePhoneNumber(( *phoneIter ));
528 } 528 }
529 // delete preferred numbers 529 // delete preferred numbers
530 if ( inList > max ) { 530 if ( inList > max ) {
531 for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end(); 531 for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end();
532 ++phoneIter ) { 532 ++phoneIter ) {
533 if ( inList > max ) { 533 if ( inList > max ) {
534 removeNumbers.append( ( *phoneIter ) ); 534 removeNumbers.append( ( *phoneIter ) );
535 --inList; 535 --inList;
536 } else 536 } else
537 break; 537 break;
538 } 538 }
539 for ( phoneIter = removeNumbers.begin(); phoneIter != removeNumbers.end(); 539 for ( phoneIter = removeNumbers.begin(); phoneIter != removeNumbers.end();
540 ++phoneIter ) { 540 ++phoneIter ) {
541 removePhoneNumber(( *phoneIter )); 541 removePhoneNumber(( *phoneIter ));
542 } 542 }
543 } 543 }
544 } 544 }
545 // remove non-numeric characters 545 // remove non-numeric characters
546 for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end(); 546 for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end();
547 ++phoneIter ) { 547 ++phoneIter ) {
548 if ( ! ( *phoneIter ).simplifyNumber() ) 548 if ( ! ( *phoneIter ).simplifyNumber() )
549 removeNumbers.append( ( *phoneIter ) ); 549 removeNumbers.append( ( *phoneIter ) );
550 } 550 }
551 for ( phoneIter = removeNumbers.begin(); phoneIter != removeNumbers.end(); 551 for ( phoneIter = removeNumbers.begin(); phoneIter != removeNumbers.end();
552 ++phoneIter ) { 552 ++phoneIter ) {
553 removePhoneNumber(( *phoneIter )); 553 removePhoneNumber(( *phoneIter ));
554 } 554 }
555} 555}
556void Addressee::simplifyPhoneNumberTypes() 556void Addressee::simplifyPhoneNumberTypes()
557{ 557{
558 KABC::PhoneNumber::List::Iterator phoneIter; 558 KABC::PhoneNumber::List::Iterator phoneIter;
559 for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end(); 559 for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end();
560 ++phoneIter ) 560 ++phoneIter )
561 ( *phoneIter ).simplifyType(); 561 ( *phoneIter ).simplifyType();
562} 562}
563void Addressee::removeID(const QString &prof) 563void Addressee::removeID(const QString &prof)
564{ 564{
565 detach(); 565 detach();
566 if ( prof.isEmpty() ) 566 if ( prof.isEmpty() )
567 mData->mExternalId = ":"; 567 mData->mExternalId = ":";
568 else 568 else
569 mData->mExternalId = KIdManager::removeId ( mData->mExternalId, prof); 569 mData->mExternalId = KIdManager::removeId ( mData->mExternalId, prof);
570 570
571} 571}
572void Addressee::setID( const QString & prof , const QString & id ) 572void Addressee::setID( const QString & prof , const QString & id )
573{ 573{
574 detach(); 574 detach();
575 mData->mExternalId = KIdManager::setId ( mData->mExternalId, prof, id ); 575 mData->mExternalId = KIdManager::setId ( mData->mExternalId, prof, id );
576 //qDebug("setID2 %s %s %s",mData->mExternalId.latin1(), prof.latin1(), id.latin1() ); 576 //qDebug("setID2 %s %s %s",mData->mExternalId.latin1(), prof.latin1(), id.latin1() );
577} 577}
578void Addressee::setTempSyncStat( int id ) 578void Addressee::setTempSyncStat( int id )
579{ 579{
580 if ( mData->mTempSyncStat == id ) return; 580 if ( mData->mTempSyncStat == id ) return;
581 detach(); 581 detach();
582 mData->mTempSyncStat = id; 582 mData->mTempSyncStat = id;
583} 583}
584int Addressee::tempSyncStat() const 584int Addressee::tempSyncStat() const
585{ 585{
586 return mData->mTempSyncStat; 586 return mData->mTempSyncStat;
587} 587}
588 588
589QString Addressee::getID( const QString & prof) 589QString Addressee::getID( const QString & prof)
590{ 590{
591 return KIdManager::getId ( mData->mExternalId, prof ); 591 return KIdManager::getId ( mData->mExternalId, prof );
592} 592}
593 593
594void Addressee::setCsum( const QString & prof , const QString & id ) 594void Addressee::setCsum( const QString & prof , const QString & id )
595{ 595{
596 detach(); 596 detach();
597 //qDebug("setcsum1 %s %s %s",mData->mExternalId.latin1(), prof.latin1(), id.latin1() ); 597 //qDebug("setcsum1 %s %s %s",mData->mExternalId.latin1(), prof.latin1(), id.latin1() );
598 mData->mExternalId = KIdManager::setCsum ( mData->mExternalId, prof, id ); 598 mData->mExternalId = KIdManager::setCsum ( mData->mExternalId, prof, id );
599 //qDebug("setcsum2 %s ",mData->mExternalId.latin1() ); 599 //qDebug("setcsum2 %s ",mData->mExternalId.latin1() );
600} 600}
601 601
602QString Addressee::getCsum( const QString & prof) 602QString Addressee::getCsum( const QString & prof)
603{ 603{
604 return KIdManager::getCsum ( mData->mExternalId, prof ); 604 return KIdManager::getCsum ( mData->mExternalId, prof );
605} 605}
606 606
607void Addressee::setIDStr( const QString & s ) 607void Addressee::setIDStr( const QString & s )
608{ 608{
609 detach(); 609 detach();
610 mData->mExternalId = s; 610 mData->mExternalId = s;
611} 611}
612 612
613QString Addressee::IDStr() const 613QString Addressee::IDStr() const
614{ 614{
615 return mData->mExternalId; 615 return mData->mExternalId;
616} 616}
617 617
618void Addressee::setExternalUID( const QString &id ) 618void Addressee::setExternalUID( const QString &id )
619{ 619{
620 if ( id == mData->externalUID ) return; 620 if ( id == mData->externalUID ) return;
621 detach(); 621 detach();
622 mData->empty = false; 622 mData->empty = false;
623 mData->externalUID = id; 623 mData->externalUID = id;
624} 624}
625 625
626QString Addressee::externalUID() const 626QString Addressee::externalUID() const
627{ 627{
628 return mData->externalUID; 628 return mData->externalUID;
629} 629}
630void Addressee::setOriginalExternalUID( const QString &id ) 630void Addressee::setOriginalExternalUID( const QString &id )
631{ 631{
632 if ( id == mData->originalExternalUID ) return; 632 if ( id == mData->originalExternalUID ) return;
633 detach(); 633 detach();
634 mData->empty = false; 634 mData->empty = false;
635 //qDebug("*******Set orig uid %s ", id.latin1()); 635 //qDebug("*******Set orig uid %s ", id.latin1());
636 mData->originalExternalUID = id; 636 mData->originalExternalUID = id;
637} 637}
638 638
639QString Addressee::originalExternalUID() const 639QString Addressee::originalExternalUID() const
640{ 640{
641 return mData->originalExternalUID; 641 return mData->originalExternalUID;
642} 642}
643 643
644void Addressee::setUid( const QString &id ) 644void Addressee::setUid( const QString &id )
645{ 645{
646 if ( id == mData->uid ) return; 646 if ( id == mData->uid ) return;
647 detach(); 647 detach();
648 //qDebug("****setuid %s ", id.latin1()); 648 //qDebug("****setuid %s ", id.latin1());
649 mData->empty = false; 649 mData->empty = false;
650 mData->uid = id; 650 mData->uid = id;
651} 651}
652 652
653QString Addressee::uid() const 653QString Addressee::uid() const
654{ 654{
655 if ( mData->uid.isEmpty() ) 655 if ( mData->uid.isEmpty() )
656 mData->uid = KApplication::randomString( 10 ); 656 mData->uid = KApplication::randomString( 10 );
657 657
658 return mData->uid; 658 return mData->uid;
659} 659}
660 660
661QString Addressee::uidLabel() 661QString Addressee::uidLabel()
662{ 662{
663 return i18n("Unique Identifier"); 663 return i18n("Unique Identifier");
664} 664}
665 665
666void Addressee::setName( const QString &name ) 666void Addressee::setName( const QString &name )
667{ 667{
668 if ( name == mData->name ) return; 668 if ( name == mData->name ) return;
669 detach(); 669 detach();
670 mData->empty = false; 670 mData->empty = false;
671 mData->name = name; 671 mData->name = name;
672} 672}
673 673
674QString Addressee::name() const 674QString Addressee::name() const
675{ 675{
676 return mData->name; 676 return mData->name;
677} 677}
678 678
679QString Addressee::nameLabel() 679QString Addressee::nameLabel()
680{ 680{
681 return i18n("Name"); 681 return i18n("Name");
682} 682}
683 683
684 684
685void Addressee::setFormattedName( const QString &formattedName ) 685void Addressee::setFormattedName( const QString &formattedName )
686{ 686{
687 if ( formattedName == mData->formattedName ) return; 687 if ( formattedName == mData->formattedName ) return;
688 detach(); 688 detach();
689 mData->empty = false; 689 mData->empty = false;
690 mData->formattedName = formattedName; 690 mData->formattedName = formattedName;
691} 691}
692 692
693QString Addressee::formattedName() const 693QString Addressee::formattedName() const
694{ 694{
695 return mData->formattedName; 695 return mData->formattedName;
696} 696}
697 697
698QString Addressee::formattedNameLabel() 698QString Addressee::formattedNameLabel()
699{ 699{
700 return i18n("Formatted Name"); 700 return i18n("Formatted Name");
701} 701}
702 702
703 703
704void Addressee::setFamilyName( const QString &familyName ) 704void Addressee::setFamilyName( const QString &familyName )
705{ 705{
706 if ( familyName == mData->familyName ) return; 706 if ( familyName == mData->familyName ) return;
707 detach(); 707 detach();
708 mData->empty = false; 708 mData->empty = false;
709 mData->familyName = familyName; 709 mData->familyName = familyName;
710} 710}
711 711
712QString Addressee::familyName() const 712QString Addressee::familyName() const
713{ 713{
714 return mData->familyName; 714 return mData->familyName;
715} 715}
716 716
717QString Addressee::familyNameLabel() 717QString Addressee::familyNameLabel()
718{ 718{
719 return i18n("Family Name"); 719 return i18n("Family Name");
720} 720}
721 721
722 722
723void Addressee::setGivenName( const QString &givenName ) 723void Addressee::setGivenName( const QString &givenName )
724{ 724{
725 if ( givenName == mData->givenName ) return; 725 if ( givenName == mData->givenName ) return;
726 detach(); 726 detach();
727 mData->empty = false; 727 mData->empty = false;
728 mData->givenName = givenName; 728 mData->givenName = givenName;
729} 729}
730 730
731QString Addressee::givenName() const 731QString Addressee::givenName() const
732{ 732{
733 return mData->givenName; 733 return mData->givenName;
734} 734}
735 735
736QString Addressee::givenNameLabel() 736QString Addressee::givenNameLabel()
737{ 737{
738 return i18n("Given Name"); 738 return i18n("Given Name");
739} 739}
740 740
741 741
742void Addressee::setAdditionalName( const QString &additionalName ) 742void Addressee::setAdditionalName( const QString &additionalName )
743{ 743{
744 if ( additionalName == mData->additionalName ) return; 744 if ( additionalName == mData->additionalName ) return;
745 detach(); 745 detach();
746 mData->empty = false; 746 mData->empty = false;
747 mData->additionalName = additionalName; 747 mData->additionalName = additionalName;
748} 748}
749 749
750QString Addressee::additionalName() const 750QString Addressee::additionalName() const
751{ 751{
752 return mData->additionalName; 752 return mData->additionalName;
753} 753}
754 754
755QString Addressee::additionalNameLabel() 755QString Addressee::additionalNameLabel()
756{ 756{
757 return i18n("Additional Names"); 757 return i18n("Additional Names");
758} 758}
759 759
760 760
761void Addressee::setPrefix( const QString &prefix ) 761void Addressee::setPrefix( const QString &prefix )
762{ 762{
763 if ( prefix == mData->prefix ) return; 763 if ( prefix == mData->prefix ) return;
764 detach(); 764 detach();
765 mData->empty = false; 765 mData->empty = false;
766 mData->prefix = prefix; 766 mData->prefix = prefix;
767} 767}
768 768
769QString Addressee::prefix() const 769QString Addressee::prefix() const
770{ 770{
771 return mData->prefix; 771 return mData->prefix;
772} 772}
773 773
774QString Addressee::prefixLabel() 774QString Addressee::prefixLabel()
775{ 775{
776 return i18n("Honorific Prefixes"); 776 return i18n("Honorific Prefixes");
777} 777}
778 778
779 779
780void Addressee::setSuffix( const QString &suffix ) 780void Addressee::setSuffix( const QString &suffix )
781{ 781{
782 if ( suffix == mData->suffix ) return; 782 if ( suffix == mData->suffix ) return;
783 detach(); 783 detach();
784 mData->empty = false; 784 mData->empty = false;
785 mData->suffix = suffix; 785 mData->suffix = suffix;
786} 786}
787 787
788QString Addressee::suffix() const 788QString Addressee::suffix() const
789{ 789{
790 return mData->suffix; 790 return mData->suffix;
791} 791}
792 792
793QString Addressee::suffixLabel() 793QString Addressee::suffixLabel()
794{ 794{
795 return i18n("Honorific Suffixes"); 795 return i18n("Honorific Suffixes");
796} 796}
797 797
798 798
799void Addressee::setNickName( const QString &nickName ) 799void Addressee::setNickName( const QString &nickName )
800{ 800{
801 if ( nickName == mData->nickName ) return; 801 if ( nickName == mData->nickName ) return;
802 detach(); 802 detach();
803 mData->empty = false; 803 mData->empty = false;
804 mData->nickName = nickName; 804 mData->nickName = nickName;
805} 805}
806 806
807QString Addressee::nickName() const 807QString Addressee::nickName() const
808{ 808{
809 return mData->nickName; 809 return mData->nickName;
810} 810}
811 811
812QString Addressee::nickNameLabel() 812QString Addressee::nickNameLabel()
813{ 813{
814 return i18n("Nick Name"); 814 return i18n("Nick Name");
815} 815}
816 816
817 817
818void Addressee::setBirthday( const QDateTime &birthday ) 818void Addressee::setBirthday( const QDateTime &birthday )
819{ 819{
820 if ( birthday == mData->birthday ) return; 820 if ( birthday == mData->birthday ) return;
821 detach(); 821 detach();
822 mData->empty = false; 822 mData->empty = false;
823 mData->birthday = birthday; 823 mData->birthday = birthday;
824} 824}
825 825
826QDateTime Addressee::birthday() const 826QDateTime Addressee::birthday() const
827{ 827{
828 return mData->birthday; 828 return mData->birthday;
829} 829}
830 830
831QString Addressee::birthdayLabel() 831QString Addressee::birthdayLabel()
832{ 832{
833 return i18n("Birthday"); 833 return i18n("Birthday");
834} 834}
835 835
836 836
837QString Addressee::homeAddressStreetLabel() 837QString Addressee::homeAddressStreetLabel()
838{ 838{
839 return i18n("Home Address Street"); 839 return i18n("Home Address Street");
840} 840}
841 841
842 842
843QString Addressee::homeAddressLocalityLabel() 843QString Addressee::homeAddressLocalityLabel()
844{ 844{
845 return i18n("Home Address Locality"); 845 return i18n("Home Address Locality");
846} 846}
847 847
848 848
849QString Addressee::homeAddressRegionLabel() 849QString Addressee::homeAddressRegionLabel()
850{ 850{
851 return i18n("Home Address Region"); 851 return i18n("Home Address Region");
852} 852}
853 853
854 854
855QString Addressee::homeAddressPostalCodeLabel() 855QString Addressee::homeAddressPostalCodeLabel()
856{ 856{
857 return i18n("Home Address Postal Code"); 857 return i18n("Home Address Postal Code");
858} 858}
859 859
860 860
861QString Addressee::homeAddressCountryLabel() 861QString Addressee::homeAddressCountryLabel()
862{ 862{
863 return i18n("Home Address Country"); 863 return i18n("Home Address Country");
864} 864}
865 865
866 866
867QString Addressee::homeAddressLabelLabel() 867QString Addressee::homeAddressLabelLabel()
868{ 868{
869 return i18n("Home Address Label"); 869 return i18n("Home Address Label");
870} 870}
871 871
872 872
873QString Addressee::businessAddressStreetLabel() 873QString Addressee::businessAddressStreetLabel()
874{ 874{
875 return i18n("Business Address Street"); 875 return i18n("Business Address Street");
876} 876}
877 877
878 878
879QString Addressee::businessAddressLocalityLabel() 879QString Addressee::businessAddressLocalityLabel()
880{ 880{
881 return i18n("Business Address Locality"); 881 return i18n("Business Address Locality");
882} 882}
883 883
884 884
885QString Addressee::businessAddressRegionLabel() 885QString Addressee::businessAddressRegionLabel()
886{ 886{
887 return i18n("Business Address Region"); 887 return i18n("Business Address Region");
888} 888}
889 889
890 890
891QString Addressee::businessAddressPostalCodeLabel() 891QString Addressee::businessAddressPostalCodeLabel()
892{ 892{
893 return i18n("Business Address Postal Code"); 893 return i18n("Business Address Postal Code");
894} 894}
895 895
896 896
897QString Addressee::businessAddressCountryLabel() 897QString Addressee::businessAddressCountryLabel()
898{ 898{
899 return i18n("Business Address Country"); 899 return i18n("Business Address Country");
900} 900}
901 901
902 902
903QString Addressee::businessAddressLabelLabel() 903QString Addressee::businessAddressLabelLabel()
904{ 904{
905 return i18n("Business Address Label"); 905 return i18n("Business Address Label");
906} 906}
907 907
908 908
909QString Addressee::homePhoneLabel() 909QString Addressee::homePhoneLabel()
910{ 910{
911 return i18n("Home Phone"); 911 return i18n("Home Phone");
912} 912}
913 913
914 914
915QString Addressee::businessPhoneLabel() 915QString Addressee::businessPhoneLabel()
916{ 916{
917 return i18n("Business Phone"); 917 return i18n("Business Phone");
918} 918}
919 919
920 920
921QString Addressee::mobilePhoneLabel() 921QString Addressee::mobilePhoneLabel()
922{ 922{
923 return i18n("Mobile Phone"); 923 return i18n("Mobile Phone");
924} 924}
925 925
926 926
927QString Addressee::homeFaxLabel() 927QString Addressee::homeFaxLabel()
928{ 928{
929 return i18n("Home Fax"); 929 return i18n("Home Fax");
930} 930}
931 931
932 932
933QString Addressee::businessFaxLabel() 933QString Addressee::businessFaxLabel()
934{ 934{
935 return i18n("Business Fax"); 935 return i18n("Business Fax");
936} 936}
937 937
938 938
939QString Addressee::carPhoneLabel() 939QString Addressee::carPhoneLabel()
940{ 940{
941 return i18n("Car Phone"); 941 return i18n("Car Phone");
942} 942}
943 943
944 944
945QString Addressee::isdnLabel() 945QString Addressee::isdnLabel()
946{ 946{
947 return i18n("ISDN"); 947 return i18n("ISDN");
948} 948}
949 949
950 950
951QString Addressee::pagerLabel() 951QString Addressee::pagerLabel()
952{ 952{
953 return i18n("Pager"); 953 return i18n("Pager");
954} 954}
955 955
956QString Addressee::sipLabel() 956QString Addressee::sipLabel()
957{ 957{
958 return i18n("SIP"); 958 return i18n("SIP");
959} 959}
960 960
961QString Addressee::emailLabel() 961QString Addressee::emailLabel()
962{ 962{
963 return i18n("Email Address"); 963 return i18n("Email Address");
964} 964}
965 965
966 966
967void Addressee::setMailer( const QString &mailer ) 967void Addressee::setMailer( const QString &mailer )
968{ 968{
969 if ( mailer == mData->mailer ) return; 969 if ( mailer == mData->mailer ) return;
970 detach(); 970 detach();
971 mData->empty = false; 971 mData->empty = false;
972 mData->mailer = mailer; 972 mData->mailer = mailer;
973} 973}
974 974
975QString Addressee::mailer() const 975QString Addressee::mailer() const
976{ 976{
977 return mData->mailer; 977 return mData->mailer;
978} 978}
979 979
980QString Addressee::mailerLabel() 980QString Addressee::mailerLabel()
981{ 981{
982 return i18n("Mail Client"); 982 return i18n("Mail Client");
983} 983}
984 984
985 985
986void Addressee::setTimeZone( const TimeZone &timeZone ) 986void Addressee::setTimeZone( const TimeZone &timeZone )
987{ 987{
988 if ( timeZone == mData->timeZone ) return; 988 if ( timeZone == mData->timeZone ) return;
989 detach(); 989 detach();
990 mData->empty = false; 990 mData->empty = false;
991 mData->timeZone = timeZone; 991 mData->timeZone = timeZone;
992} 992}
993 993
994TimeZone Addressee::timeZone() const 994TimeZone Addressee::timeZone() const
995{ 995{
996 return mData->timeZone; 996 return mData->timeZone;
997} 997}
998 998
999QString Addressee::timeZoneLabel() 999QString Addressee::timeZoneLabel()
1000{ 1000{
1001 return i18n("Time Zone"); 1001 return i18n("Time Zone");
1002} 1002}
1003 1003
1004 1004
1005void Addressee::setGeo( const Geo &geo ) 1005void Addressee::setGeo( const Geo &geo )
1006{ 1006{
1007 if ( geo == mData->geo ) return; 1007 if ( geo == mData->geo ) return;
1008 detach(); 1008 detach();
1009 mData->empty = false; 1009 mData->empty = false;
1010 mData->geo = geo; 1010 mData->geo = geo;
1011} 1011}
1012 1012
1013Geo Addressee::geo() const 1013Geo Addressee::geo() const
1014{ 1014{
1015 return mData->geo; 1015 return mData->geo;
1016} 1016}
1017 1017
1018QString Addressee::geoLabel() 1018QString Addressee::geoLabel()
1019{ 1019{
1020 return i18n("Geographic Position"); 1020 return i18n("Geographic Position");
1021} 1021}
1022 1022
1023 1023
1024void Addressee::setTitle( const QString &title ) 1024void Addressee::setTitle( const QString &title )
1025{ 1025{
1026 if ( title == mData->title ) return; 1026 if ( title == mData->title ) return;
1027 detach(); 1027 detach();
1028 mData->empty = false; 1028 mData->empty = false;
1029 mData->title = title; 1029 mData->title = title;
1030} 1030}
1031 1031
1032QString Addressee::title() const 1032QString Addressee::title() const
1033{ 1033{
1034 return mData->title; 1034 return mData->title;
1035} 1035}
1036 1036
1037QString Addressee::titleLabel() 1037QString Addressee::titleLabel()
1038{ 1038{
1039 return i18n("Title"); 1039 return i18n("Title");
1040} 1040}
1041 1041
1042 1042
1043void Addressee::setRole( const QString &role ) 1043void Addressee::setRole( const QString &role )
1044{ 1044{
1045 if ( role == mData->role ) return; 1045 if ( role == mData->role ) return;
1046 detach(); 1046 detach();
1047 mData->empty = false; 1047 mData->empty = false;
1048 mData->role = role; 1048 mData->role = role;
1049} 1049}
1050 1050
1051QString Addressee::role() const 1051QString Addressee::role() const
1052{ 1052{
1053 return mData->role; 1053 return mData->role;
1054} 1054}
1055 1055
1056QString Addressee::roleLabel() 1056QString Addressee::roleLabel()
1057{ 1057{
1058 return i18n("Role"); 1058 return i18n("Role");
1059} 1059}
1060 1060
1061 1061
1062void Addressee::setOrganization( const QString &organization ) 1062void Addressee::setOrganization( const QString &organization )
1063{ 1063{
1064 if ( organization == mData->organization ) return; 1064 if ( organization == mData->organization ) return;
1065 detach(); 1065 detach();
1066 mData->empty = false; 1066 mData->empty = false;
1067 mData->organization = organization; 1067 mData->organization = organization;
1068} 1068}
1069 1069
1070QString Addressee::organization() const 1070QString Addressee::organization() const
1071{ 1071{
1072 return mData->organization; 1072 return mData->organization;
1073} 1073}
1074 1074
1075QString Addressee::organizationLabel() 1075QString Addressee::organizationLabel()
1076{ 1076{
1077 return i18n("Organization"); 1077 return i18n("Organization");
1078} 1078}
1079 1079
1080 1080
1081void Addressee::setNote( const QString &note ) 1081void Addressee::setNote( const QString &note )
1082{ 1082{
1083 if ( note == mData->note ) return; 1083 if ( note == mData->note ) return;
1084 detach(); 1084 detach();
1085 mData->empty = false; 1085 mData->empty = false;
1086 mData->note = note; 1086 mData->note = note;
1087} 1087}
1088 1088
1089QString Addressee::note() const 1089QString Addressee::note() const
1090{ 1090{
1091 return mData->note; 1091 return mData->note;
1092} 1092}
1093 1093
1094QString Addressee::noteLabel() 1094QString Addressee::noteLabel()
1095{ 1095{
1096 return i18n("Note"); 1096 return i18n("Note");
1097} 1097}
1098 1098
1099 1099
1100void Addressee::setProductId( const QString &productId ) 1100void Addressee::setProductId( const QString &productId )
1101{ 1101{
1102 if ( productId == mData->productId ) return; 1102 if ( productId == mData->productId ) return;
1103 detach(); 1103 detach();
1104 mData->empty = false; 1104 mData->empty = false;
1105 mData->productId = productId; 1105 mData->productId = productId;
1106} 1106}
1107 1107
1108QString Addressee::productId() const 1108QString Addressee::productId() const
1109{ 1109{
1110 return mData->productId; 1110 return mData->productId;
1111} 1111}
1112 1112
1113QString Addressee::productIdLabel() 1113QString Addressee::productIdLabel()
1114{ 1114{
1115 return i18n("Product Identifier"); 1115 return i18n("Product Identifier");
1116} 1116}
1117 1117
1118 1118
1119void Addressee::setRevision( const QDateTime &revision ) 1119void Addressee::setRevision( const QDateTime &revision )
1120{ 1120{
1121 if ( revision == mData->revision ) return; 1121 if ( revision == mData->revision ) return;
1122 detach(); 1122 detach();
1123 mData->empty = false; 1123 mData->empty = false;
1124 mData->revision = QDateTime( revision.date(), 1124 mData->revision = QDateTime( revision.date(),
1125 QTime (revision.time().hour(), 1125 QTime (revision.time().hour(),
1126 revision.time().minute(), 1126 revision.time().minute(),
1127 revision.time().second())); 1127 revision.time().second()));
1128} 1128}
1129 1129
1130QDateTime Addressee::revision() const 1130QDateTime Addressee::revision() const
1131{ 1131{
1132 return mData->revision; 1132 return mData->revision;
1133} 1133}
1134 1134
1135QString Addressee::revisionLabel() 1135QString Addressee::revisionLabel()
1136{ 1136{
1137 return i18n("Revision Date"); 1137 return i18n("Revision Date");
1138} 1138}
1139 1139
1140 1140
1141void Addressee::setSortString( const QString &sortString ) 1141void Addressee::setSortString( const QString &sortString )
1142{ 1142{
1143 if ( sortString == mData->sortString ) return; 1143 if ( sortString == mData->sortString ) return;
1144 detach(); 1144 detach();
1145 mData->empty = false; 1145 mData->empty = false;
1146 mData->sortString = sortString; 1146 mData->sortString = sortString;
1147} 1147}
1148 1148
1149QString Addressee::sortString() const 1149QString Addressee::sortString() const
1150{ 1150{
1151 return mData->sortString; 1151 return mData->sortString;
1152} 1152}
1153 1153
1154QString Addressee::sortStringLabel() 1154QString Addressee::sortStringLabel()
1155{ 1155{
1156 return i18n("Sort String"); 1156 return i18n("Sort String");
1157} 1157}
1158 1158
1159 1159
1160void Addressee::setUrl( const KURL &url ) 1160void Addressee::setUrl( const KURL &url )
1161{ 1161{
1162 if ( url == mData->url ) return; 1162 if ( url == mData->url ) return;
1163 detach(); 1163 detach();
1164 mData->empty = false; 1164 mData->empty = false;
1165 mData->url = url; 1165 mData->url = url;
1166} 1166}
1167 1167
1168KURL Addressee::url() const 1168KURL Addressee::url() const
1169{ 1169{
1170 return mData->url; 1170 return mData->url;
1171} 1171}
1172 1172
1173QString Addressee::urlLabel() 1173QString Addressee::urlLabel()
1174{ 1174{
1175 return i18n("URL"); 1175 return i18n("URL");
1176} 1176}
1177 1177
1178 1178
1179void Addressee::setSecrecy( const Secrecy &secrecy ) 1179void Addressee::setSecrecy( const Secrecy &secrecy )
1180{ 1180{
1181 if ( secrecy == mData->secrecy ) return; 1181 if ( secrecy == mData->secrecy ) return;
1182 detach(); 1182 detach();
1183 mData->empty = false; 1183 mData->empty = false;
1184 mData->secrecy = secrecy; 1184 mData->secrecy = secrecy;
1185} 1185}
1186 1186
1187Secrecy Addressee::secrecy() const 1187Secrecy Addressee::secrecy() const
1188{ 1188{
1189 return mData->secrecy; 1189 return mData->secrecy;
1190} 1190}
1191 1191
1192QString Addressee::secrecyLabel() 1192QString Addressee::secrecyLabel()
1193{ 1193{
1194 return i18n("Security Class"); 1194 return i18n("Security Class");
1195} 1195}
1196 1196
1197 1197
1198void Addressee::setLogo( const Picture &logo ) 1198void Addressee::setLogo( const Picture &logo )
1199{ 1199{
1200 if ( logo == mData->logo ) return; 1200 if ( logo == mData->logo ) return;
1201 detach(); 1201 detach();
1202 mData->empty = false; 1202 mData->empty = false;
1203 mData->logo = logo; 1203 mData->logo = logo;
1204} 1204}
1205 1205
1206Picture Addressee::logo() const 1206Picture Addressee::logo() const
1207{ 1207{
1208 return mData->logo; 1208 return mData->logo;
1209} 1209}
1210 1210
1211QString Addressee::logoLabel() 1211QString Addressee::logoLabel()
1212{ 1212{
1213 return i18n("Logo"); 1213 return i18n("Logo");
1214} 1214}
1215 1215
1216 1216
1217void Addressee::setPhoto( const Picture &photo ) 1217void Addressee::setPhoto( const Picture &photo )
1218{ 1218{
1219 if ( photo == mData->photo ) return; 1219 if ( photo == mData->photo ) return;
1220 detach(); 1220 detach();
1221 mData->empty = false; 1221 mData->empty = false;
1222 mData->photo = photo; 1222 mData->photo = photo;
1223} 1223}
1224 1224
1225Picture Addressee::photo() const 1225Picture Addressee::photo() const
1226{ 1226{
1227 return mData->photo; 1227 return mData->photo;
1228} 1228}
1229 1229
1230QString Addressee::photoLabel() 1230QString Addressee::photoLabel()
1231{ 1231{
1232 return i18n("Photo"); 1232 return i18n("Photo");
1233} 1233}
1234 1234
1235 1235
1236void Addressee::setSound( const Sound &sound ) 1236void Addressee::setSound( const Sound &sound )
1237{ 1237{
1238 if ( sound == mData->sound ) return; 1238 if ( sound == mData->sound ) return;
1239 detach(); 1239 detach();
1240 mData->empty = false; 1240 mData->empty = false;
1241 mData->sound = sound; 1241 mData->sound = sound;
1242} 1242}
1243 1243
1244Sound Addressee::sound() const 1244Sound Addressee::sound() const
1245{ 1245{
1246 return mData->sound; 1246 return mData->sound;
1247} 1247}
1248 1248
1249QString Addressee::soundLabel() 1249QString Addressee::soundLabel()
1250{ 1250{
1251 return i18n("Sound"); 1251 return i18n("Sound");
1252} 1252}
1253 1253
1254 1254
1255void Addressee::setAgent( const Agent &agent ) 1255void Addressee::setAgent( const Agent &agent )
1256{ 1256{
1257 if ( agent == mData->agent ) return; 1257 if ( agent == mData->agent ) return;
1258 detach(); 1258 detach();
1259 mData->empty = false; 1259 mData->empty = false;
1260 mData->agent = agent; 1260 mData->agent = agent;
1261} 1261}
1262 1262
1263Agent Addressee::agent() const 1263Agent Addressee::agent() const
1264{ 1264{
1265 return mData->agent; 1265 return mData->agent;
1266} 1266}
1267 1267
1268QString Addressee::agentLabel() 1268QString Addressee::agentLabel()
1269{ 1269{
1270 return i18n("Agent"); 1270 return i18n("Agent");
1271} 1271}
1272 1272
1273 1273
1274 1274
1275void Addressee::setNameFromString( const QString &str ) 1275void Addressee::setNameFromString( const QString &str )
1276{ 1276{
1277 setFormattedName( str ); 1277 setFormattedName( str );
1278 setName( str ); 1278 setName( str );
1279 1279
1280 static bool first = true; 1280 static bool first = true;
1281 static QStringList titles; 1281 static QStringList titles;
1282 static QStringList suffixes; 1282 static QStringList suffixes;
1283 static QStringList prefixes; 1283 static QStringList prefixes;
1284 1284
1285 if ( first ) { 1285 if ( first ) {
1286 first = false; 1286 first = false;
1287 titles += i18n( "Dr." ); 1287 titles += i18n( "Dr." );
1288 titles += i18n( "Miss" ); 1288 titles += i18n( "Miss" );
1289 titles += i18n( "Mr." ); 1289 titles += i18n( "Mr." );
1290 titles += i18n( "Mrs." ); 1290 titles += i18n( "Mrs." );
1291 titles += i18n( "Ms." ); 1291 titles += i18n( "Ms." );
1292 titles += i18n( "Prof." ); 1292 titles += i18n( "Prof." );
1293 1293
1294 suffixes += i18n( "I" ); 1294 suffixes += i18n( "I" );
1295 suffixes += i18n( "II" ); 1295 suffixes += i18n( "II" );
1296 suffixes += i18n( "III" ); 1296 suffixes += i18n( "III" );
1297 suffixes += i18n( "Jr." ); 1297 suffixes += i18n( "Jr." );
1298 suffixes += i18n( "Sr." ); 1298 suffixes += i18n( "Sr." );
1299 1299
1300 prefixes += "van"; 1300 prefixes += "van";
1301 prefixes += "von"; 1301 prefixes += "von";
1302 prefixes += "de"; 1302 prefixes += "de";
1303 1303
1304 KConfig config( locateLocal( "config", "kabcrc") ); 1304 KConfig config( locateLocal( "config", "kabcrc") );
1305 config.setGroup( "General" ); 1305 config.setGroup( "General" );
1306 titles += config.readListEntry( "Prefixes" ); 1306 titles += config.readListEntry( "Prefixes" );
1307 titles.remove( "" ); 1307 titles.remove( "" );
1308 prefixes += config.readListEntry( "Inclusions" ); 1308 prefixes += config.readListEntry( "Inclusions" );
1309 prefixes.remove( "" ); 1309 prefixes.remove( "" );
1310 suffixes += config.readListEntry( "Suffixes" ); 1310 suffixes += config.readListEntry( "Suffixes" );
1311 suffixes.remove( "" ); 1311 suffixes.remove( "" );
1312 } 1312 }
1313 1313
1314 // clear all name parts 1314 // clear all name parts
1315 setPrefix( "" ); 1315 setPrefix( "" );
1316 setGivenName( "" ); 1316 setGivenName( "" );
1317 setAdditionalName( "" ); 1317 setAdditionalName( "" );
1318 setFamilyName( "" ); 1318 setFamilyName( "" );
1319 setSuffix( "" ); 1319 setSuffix( "" );
1320 1320
1321 if ( str.isEmpty() ) 1321 if ( str.isEmpty() )
1322 return; 1322 return;
1323 1323
1324 int i = str.find(','); 1324 int i = str.find(',');
1325 if( i < 0 ) { 1325 if( i < 0 ) {
1326 QStringList parts = QStringList::split( " ", str ); 1326 QStringList parts = QStringList::split( " ", str );
1327 int leftOffset = 0; 1327 int leftOffset = 0;
1328 int rightOffset = parts.count() - 1; 1328 int rightOffset = parts.count() - 1;
1329 1329
1330 QString suffix; 1330 QString suffix;
1331 while ( rightOffset >= 0 ) { 1331 while ( rightOffset >= 0 ) {
1332 if ( suffixes.contains( parts[ rightOffset ] ) ) { 1332 if ( suffixes.contains( parts[ rightOffset ] ) ) {
1333 suffix.prepend(parts[ rightOffset ] + (suffix.isEmpty() ? "" : " ")); 1333 suffix.prepend(parts[ rightOffset ] + (suffix.isEmpty() ? "" : " "));
1334 rightOffset--; 1334 rightOffset--;
1335 } else 1335 } else
1336 break; 1336 break;
1337 } 1337 }
1338 setSuffix( suffix ); 1338 setSuffix( suffix );
1339 1339
1340 if ( rightOffset < 0 ) 1340 if ( rightOffset < 0 )
1341 return; 1341 return;
1342 1342
1343 if ( rightOffset - 1 >= 0 && prefixes.contains( parts[ rightOffset - 1 ].lower() ) ) { 1343 if ( rightOffset - 1 >= 0 && prefixes.contains( parts[ rightOffset - 1 ].lower() ) ) {
1344 setFamilyName( parts[ rightOffset - 1 ] + " " + parts[ rightOffset ] ); 1344 setFamilyName( parts[ rightOffset - 1 ] + " " + parts[ rightOffset ] );
1345 rightOffset--; 1345 rightOffset--;
1346 } else 1346 } else
1347 setFamilyName( parts[ rightOffset ] ); 1347 setFamilyName( parts[ rightOffset ] );
1348 1348
1349 QString prefix; 1349 QString prefix;
1350 while ( leftOffset < rightOffset ) { 1350 while ( leftOffset < rightOffset ) {
1351 if ( titles.contains( parts[ leftOffset ] ) ) { 1351 if ( titles.contains( parts[ leftOffset ] ) ) {
1352 prefix.append( ( prefix.isEmpty() ? "" : " ") + parts[ leftOffset ] ); 1352 prefix.append( ( prefix.isEmpty() ? "" : " ") + parts[ leftOffset ] );
1353 leftOffset++; 1353 leftOffset++;
1354 } else 1354 } else
1355 break; 1355 break;
1356 } 1356 }
1357 setPrefix( prefix ); 1357 setPrefix( prefix );
1358 1358
1359 if ( leftOffset < rightOffset ) { 1359 if ( leftOffset < rightOffset ) {
1360 setGivenName( parts[ leftOffset ] ); 1360 setGivenName( parts[ leftOffset ] );
1361 leftOffset++; 1361 leftOffset++;
1362 } 1362 }
1363 1363
1364 QString additionalName; 1364 QString additionalName;
1365 while ( leftOffset < rightOffset ) { 1365 while ( leftOffset < rightOffset ) {
1366 additionalName.append( ( additionalName.isEmpty() ? "" : " ") + parts[ leftOffset ] ); 1366 additionalName.append( ( additionalName.isEmpty() ? "" : " ") + parts[ leftOffset ] );
1367 leftOffset++; 1367 leftOffset++;
1368 } 1368 }
1369 setAdditionalName( additionalName ); 1369 setAdditionalName( additionalName );
1370 } else { 1370 } else {
1371 QString part1 = str.left( i ); 1371 QString part1 = str.left( i );
1372 QString part2 = str.mid( i + 1 ); 1372 QString part2 = str.mid( i + 1 );
1373 1373
1374 QStringList parts = QStringList::split( " ", part1 ); 1374 QStringList parts = QStringList::split( " ", part1 );
1375 int leftOffset = 0; 1375 int leftOffset = 0;
1376 int rightOffset = parts.count() - 1; 1376 int rightOffset = parts.count() - 1;
1377 1377
1378 QString suffix; 1378 QString suffix;
1379 while ( rightOffset >= 0 ) { 1379 while ( rightOffset >= 0 ) {
1380 if ( suffixes.contains( parts[ rightOffset ] ) ) { 1380 if ( suffixes.contains( parts[ rightOffset ] ) ) {
1381 suffix.prepend(parts[ rightOffset ] + (suffix.isEmpty() ? "" : " ")); 1381 suffix.prepend(parts[ rightOffset ] + (suffix.isEmpty() ? "" : " "));
1382 rightOffset--; 1382 rightOffset--;
1383 } else 1383 } else
1384 break; 1384 break;
1385 } 1385 }
1386 setSuffix( suffix ); 1386 setSuffix( suffix );
1387 1387
1388 if ( rightOffset - 1 >= 0 && prefixes.contains( parts[ rightOffset - 1 ].lower() ) ) { 1388 if ( rightOffset - 1 >= 0 && prefixes.contains( parts[ rightOffset - 1 ].lower() ) ) {
1389 setFamilyName( parts[ rightOffset - 1 ] + " " + parts[ rightOffset ] ); 1389 setFamilyName( parts[ rightOffset - 1 ] + " " + parts[ rightOffset ] );
1390 rightOffset--; 1390 rightOffset--;
1391 } else 1391 } else
1392 setFamilyName( parts[ rightOffset ] ); 1392 setFamilyName( parts[ rightOffset ] );
1393 1393
1394 QString prefix; 1394 QString prefix;
1395 while ( leftOffset < rightOffset ) { 1395 while ( leftOffset < rightOffset ) {
1396 if ( titles.contains( parts[ leftOffset ] ) ) { 1396 if ( titles.contains( parts[ leftOffset ] ) ) {
1397 prefix.append( ( prefix.isEmpty() ? "" : " ") + parts[ leftOffset ] ); 1397 prefix.append( ( prefix.isEmpty() ? "" : " ") + parts[ leftOffset ] );
1398 leftOffset++; 1398 leftOffset++;
1399 } else 1399 } else
1400 break; 1400 break;
1401 } 1401 }
1402 1402
1403 parts = QStringList::split( " ", part2 ); 1403 parts = QStringList::split( " ", part2 );
1404 1404
1405 leftOffset = 0; 1405 leftOffset = 0;
1406 rightOffset = parts.count(); 1406 rightOffset = parts.count();
1407 1407
1408 while ( leftOffset < rightOffset ) { 1408 while ( leftOffset < rightOffset ) {
1409 if ( titles.contains( parts[ leftOffset ] ) ) { 1409 if ( titles.contains( parts[ leftOffset ] ) ) {
1410 prefix.append( ( prefix.isEmpty() ? "" : " ") + parts[ leftOffset ] ); 1410 prefix.append( ( prefix.isEmpty() ? "" : " ") + parts[ leftOffset ] );
1411 leftOffset++; 1411 leftOffset++;
1412 } else 1412 } else
1413 break; 1413 break;
1414 } 1414 }
1415 setPrefix( prefix ); 1415 setPrefix( prefix );
1416 1416
1417 if ( leftOffset < rightOffset ) { 1417 if ( leftOffset < rightOffset ) {
1418 setGivenName( parts[ leftOffset ] ); 1418 setGivenName( parts[ leftOffset ] );
1419 leftOffset++; 1419 leftOffset++;
1420 } 1420 }
1421 1421
1422 QString additionalName; 1422 QString additionalName;
1423 while ( leftOffset < rightOffset ) { 1423 while ( leftOffset < rightOffset ) {
1424 additionalName.append( ( additionalName.isEmpty() ? "" : " ") + parts[ leftOffset ] ); 1424 additionalName.append( ( additionalName.isEmpty() ? "" : " ") + parts[ leftOffset ] );
1425 leftOffset++; 1425 leftOffset++;
1426 } 1426 }
1427 setAdditionalName( additionalName ); 1427 setAdditionalName( additionalName );
1428 } 1428 }
1429} 1429}
1430 1430
1431QString Addressee::realName() const 1431QString Addressee::realName() const
1432{ 1432{
1433 if ( !formattedName().isEmpty() ) 1433 if ( !formattedName().isEmpty() )
1434 return formattedName(); 1434 return formattedName();
1435 1435
1436 QString n = assembledName(); 1436 QString n = assembledName();
1437 1437
1438 if ( n.isEmpty() ) 1438 if ( n.isEmpty() )
1439 n = name(); 1439 n = name();
1440 1440
1441 return n; 1441 return n;
1442} 1442}
1443 1443
1444QString Addressee::assembledName() const 1444QString Addressee::assembledName() const
1445{ 1445{
1446 QString name = prefix() + " " + givenName() + " " + additionalName() + " " + 1446 QString name = prefix() + " " + givenName() + " " + additionalName() + " " +
1447 familyName() + " " + suffix(); 1447 familyName() + " " + suffix();
1448 1448
1449 return name.simplifyWhiteSpace(); 1449 return name.simplifyWhiteSpace();
1450} 1450}
1451 1451
1452QString Addressee::fullEmail( const QString &email ) const 1452QString Addressee::fullEmail( const QString &email ) const
1453{ 1453{
1454 QString e; 1454 QString e;
1455 if ( email.isNull() ) { 1455 if ( email.isNull() ) {
1456 e = preferredEmail(); 1456 e = preferredEmail();
1457 } else { 1457 } else {
1458 e = email; 1458 e = email;
1459 } 1459 }
1460 if ( e.isEmpty() ) return QString::null; 1460 if ( e.isEmpty() ) return QString::null;
1461 1461
1462 QString text; 1462 QString text;
1463 if ( realName().isEmpty() ) 1463 if ( realName().isEmpty() )
1464 text = e; 1464 text = e;
1465 else 1465 else
1466 text = assembledName() + " <" + e + ">"; 1466 text = assembledName() + " <" + e + ">";
1467 1467
1468 return text; 1468 return text;
1469} 1469}
1470 1470
1471void Addressee::insertEmail( const QString &email, bool preferred ) 1471void Addressee::insertEmail( const QString &email, bool preferred )
1472{ 1472{
1473 detach(); 1473 detach();
1474 1474
1475 QStringList::Iterator it = mData->emails.find( email ); 1475 QStringList::Iterator it = mData->emails.find( email );
1476 1476
1477 if ( it != mData->emails.end() ) { 1477 if ( it != mData->emails.end() ) {
1478 if ( !preferred || it == mData->emails.begin() ) return; 1478 if ( !preferred || it == mData->emails.begin() ) return;
1479 mData->emails.remove( it ); 1479 mData->emails.remove( it );
1480 mData->emails.prepend( email ); 1480 mData->emails.prepend( email );
1481 } else { 1481 } else {
1482 if ( preferred ) { 1482 if ( preferred ) {
1483 mData->emails.prepend( email ); 1483 mData->emails.prepend( email );
1484 } else { 1484 } else {
1485 mData->emails.append( email ); 1485 mData->emails.append( email );
1486 } 1486 }
1487 } 1487 }
1488} 1488}
1489 1489
1490void Addressee::removeEmail( const QString &email ) 1490void Addressee::removeEmail( const QString &email )
1491{ 1491{
1492 detach(); 1492 detach();
1493 1493
1494 QStringList::Iterator it = mData->emails.find( email ); 1494 QStringList::Iterator it = mData->emails.find( email );
1495 if ( it == mData->emails.end() ) return; 1495 if ( it == mData->emails.end() ) return;
1496 1496
1497 mData->emails.remove( it ); 1497 mData->emails.remove( it );
1498} 1498}
1499 1499
1500QString Addressee::preferredEmail() const 1500QString Addressee::preferredEmail() const
1501{ 1501{
1502 if ( mData->emails.count() == 0 ) return QString::null; 1502 if ( mData->emails.count() == 0 ) return QString::null;
1503 else return mData->emails.first(); 1503 else return mData->emails.first();
1504} 1504}
1505 1505
1506QStringList Addressee::emails() const 1506QStringList Addressee::emails() const
1507{ 1507{
1508 return mData->emails; 1508 return mData->emails;
1509} 1509}
1510void Addressee::setEmails( const QStringList& emails ) { 1510void Addressee::setEmails( const QStringList& emails ) {
1511 detach(); 1511 detach();
1512 mData->emails = emails; 1512 mData->emails = emails;
1513} 1513}
1514void Addressee::insertPhoneNumber( const PhoneNumber &phoneNumber ) 1514void Addressee::insertPhoneNumber( const PhoneNumber &phoneNumber )
1515{ 1515{
1516 detach(); 1516 detach();
1517 mData->empty = false; 1517 mData->empty = false;
1518 1518
1519 PhoneNumber::List::Iterator it; 1519 PhoneNumber::List::Iterator it;
1520 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) { 1520 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) {
1521 if ( (*it).id() == phoneNumber.id() ) { 1521 if ( (*it).id() == phoneNumber.id() ) {
1522 *it = phoneNumber; 1522 *it = phoneNumber;
1523 return; 1523 return;
1524 } 1524 }
1525 } 1525 }
1526 mData->phoneNumbers.append( phoneNumber ); 1526 mData->phoneNumbers.append( phoneNumber );
1527} 1527}
1528 1528
1529void Addressee::removePhoneNumber( const PhoneNumber &phoneNumber ) 1529void Addressee::removePhoneNumber( const PhoneNumber &phoneNumber )
1530{ 1530{
1531 detach(); 1531 detach();
1532 1532
1533 PhoneNumber::List::Iterator it; 1533 PhoneNumber::List::Iterator it;
1534 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) { 1534 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) {
1535 if ( (*it).id() == phoneNumber.id() ) { 1535 if ( (*it).id() == phoneNumber.id() ) {
1536 mData->phoneNumbers.remove( it ); 1536 mData->phoneNumbers.remove( it );
1537 return; 1537 return;
1538 } 1538 }
1539 } 1539 }
1540} 1540}
1541 1541
1542PhoneNumber Addressee::phoneNumber( int type ) const 1542PhoneNumber Addressee::phoneNumber( int type ) const
1543{ 1543{
1544 PhoneNumber phoneNumber( "", type ); 1544 PhoneNumber phoneNumber( "", type );
1545 PhoneNumber::List::ConstIterator it; 1545 PhoneNumber::List::ConstIterator it;
1546 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) { 1546 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) {
1547 if ( matchBinaryPatternP( (*it).type(), type ) ) { 1547 if ( matchBinaryPatternP( (*it).type(), type ) ) {
1548 if ( (*it).type() & PhoneNumber::Pref ) 1548 if ( (*it).type() & PhoneNumber::Pref )
1549 return (*it); 1549 return (*it);
1550 else if ( phoneNumber.number().isEmpty() ) 1550 else if ( phoneNumber.number().isEmpty() )
1551 phoneNumber = (*it); 1551 phoneNumber = (*it);
1552 } 1552 }
1553 } 1553 }
1554 1554
1555 return phoneNumber; 1555 return phoneNumber;
1556} 1556}
1557 1557
1558PhoneNumber::List Addressee::phoneNumbers() const 1558PhoneNumber::List Addressee::phoneNumbers() const
1559{ 1559{
1560 return mData->phoneNumbers; 1560 return mData->phoneNumbers;
1561} 1561}
1562 1562
1563PhoneNumber::List Addressee::phoneNumbers( int type ) const 1563PhoneNumber::List Addressee::phoneNumbers( int type ) const
1564{ 1564{
1565 PhoneNumber::List list; 1565 PhoneNumber::List list;
1566 1566
1567 PhoneNumber::List::ConstIterator it; 1567 PhoneNumber::List::ConstIterator it;
1568 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) { 1568 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) {
1569 if ( matchBinaryPattern( (*it).type(), type ) ) { 1569 if ( matchBinaryPattern( (*it).type(), type ) ) {
1570 list.append( *it ); 1570 list.append( *it );
1571 } 1571 }
1572 } 1572 }
1573 return list; 1573 return list;
1574} 1574}
1575 1575
1576PhoneNumber Addressee::findPhoneNumber( const QString &id ) const 1576PhoneNumber Addressee::findPhoneNumber( const QString &id ) const
1577{ 1577{
1578 PhoneNumber::List::ConstIterator it; 1578 PhoneNumber::List::ConstIterator it;
1579 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) { 1579 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) {
1580 if ( (*it).id() == id ) { 1580 if ( (*it).id() == id ) {
1581 return *it; 1581 return *it;
1582 } 1582 }
1583 } 1583 }
1584 return PhoneNumber(); 1584 return PhoneNumber();
1585} 1585}
1586 1586
1587void Addressee::insertKey( const Key &key ) 1587void Addressee::insertKey( const Key &key )
1588{ 1588{
1589 detach(); 1589 detach();
1590 mData->empty = false; 1590 mData->empty = false;
1591 1591
1592 Key::List::Iterator it; 1592 Key::List::Iterator it;
1593 for( it = mData->keys.begin(); it != mData->keys.end(); ++it ) { 1593 for( it = mData->keys.begin(); it != mData->keys.end(); ++it ) {
1594 if ( (*it).id() == key.id() ) { 1594 if ( (*it).id() == key.id() ) {
1595 *it = key; 1595 *it = key;
1596 return; 1596 return;
1597 } 1597 }
1598 } 1598 }
1599 mData->keys.append( key ); 1599 mData->keys.append( key );
1600} 1600}
1601 1601
1602void Addressee::removeKey( const Key &key ) 1602void Addressee::removeKey( const Key &key )
1603{ 1603{
1604 detach(); 1604 detach();
1605 1605
1606 Key::List::Iterator it; 1606 Key::List::Iterator it;
1607 for( it = mData->keys.begin(); it != mData->keys.end(); ++it ) { 1607 for( it = mData->keys.begin(); it != mData->keys.end(); ++it ) {
1608 if ( (*it).id() == key.id() ) { 1608 if ( (*it).id() == key.id() ) {
1609 mData->keys.remove( key ); 1609 mData->keys.remove( key );
1610 return; 1610 return;
1611 } 1611 }
1612 } 1612 }
1613} 1613}
1614 1614
1615Key Addressee::key( int type, QString customTypeString ) const 1615Key Addressee::key( int type, QString customTypeString ) const
1616{ 1616{
1617 Key::List::ConstIterator it; 1617 Key::List::ConstIterator it;
1618 for( it = mData->keys.begin(); it != mData->keys.end(); ++it ) { 1618 for( it = mData->keys.begin(); it != mData->keys.end(); ++it ) {
1619 if ( (*it).type() == type ) { 1619 if ( (*it).type() == type ) {
1620 if ( type == Key::Custom ) { 1620 if ( type == Key::Custom ) {
1621 if ( customTypeString.isEmpty() ) { 1621 if ( customTypeString.isEmpty() ) {
1622 return *it; 1622 return *it;
1623 } else { 1623 } else {
1624 if ( (*it).customTypeString() == customTypeString ) 1624 if ( (*it).customTypeString() == customTypeString )
1625 return (*it); 1625 return (*it);
1626 } 1626 }
1627 } else { 1627 } else {
1628 return *it; 1628 return *it;
1629 } 1629 }
1630 } 1630 }
1631 } 1631 }
1632 return Key( QString(), type ); 1632 return Key( QString(), type );
1633} 1633}
1634void Addressee::setKeys( const Key::List& list ) { 1634void Addressee::setKeys( const Key::List& list ) {
1635 detach(); 1635 detach();
1636 mData->keys = list; 1636 mData->keys = list;
1637} 1637}
1638 1638
1639Key::List Addressee::keys() const 1639Key::List Addressee::keys() const
1640{ 1640{
1641 return mData->keys; 1641 return mData->keys;
1642} 1642}
1643 1643
1644Key::List Addressee::keys( int type, QString customTypeString ) const 1644Key::List Addressee::keys( int type, QString customTypeString ) const
1645{ 1645{
1646 Key::List list; 1646 Key::List list;
1647 1647
1648 Key::List::ConstIterator it; 1648 Key::List::ConstIterator it;
1649 for( it = mData->keys.begin(); it != mData->keys.end(); ++it ) { 1649 for( it = mData->keys.begin(); it != mData->keys.end(); ++it ) {
1650 if ( (*it).type() == type ) { 1650 if ( (*it).type() == type ) {
1651 if ( type == Key::Custom ) { 1651 if ( type == Key::Custom ) {
1652 if ( customTypeString.isEmpty() ) { 1652 if ( customTypeString.isEmpty() ) {
1653 list.append(*it); 1653 list.append(*it);
1654 } else { 1654 } else {
1655 if ( (*it).customTypeString() == customTypeString ) 1655 if ( (*it).customTypeString() == customTypeString )
1656 list.append(*it); 1656 list.append(*it);
1657 } 1657 }
1658 } else { 1658 } else {
1659 list.append(*it); 1659 list.append(*it);
1660 } 1660 }
1661 } 1661 }
1662 } 1662 }
1663 return list; 1663 return list;
1664} 1664}
1665 1665
1666Key Addressee::findKey( const QString &id ) const 1666Key Addressee::findKey( const QString &id ) const
1667{ 1667{
1668 Key::List::ConstIterator it; 1668 Key::List::ConstIterator it;
1669 for( it = mData->keys.begin(); it != mData->keys.end(); ++it ) { 1669 for( it = mData->keys.begin(); it != mData->keys.end(); ++it ) {
1670 if ( (*it).id() == id ) { 1670 if ( (*it).id() == id ) {
1671 return *it; 1671 return *it;
1672 } 1672 }
1673 } 1673 }
1674 return Key(); 1674 return Key();
1675} 1675}
1676 1676
1677QString Addressee::asString() const 1677QString Addressee::asString() const
1678{ 1678{
1679 return "Smith, agent Smith..."; 1679 return "Smith, agent Smith...";
1680} 1680}
1681 1681
1682void Addressee::dump() const 1682void Addressee::dump() const
1683{ 1683{
1684 return; 1684 return;
1685 kdDebug(5700) << "Addressee {" << endl; 1685 kdDebug(5700) << "Addressee {" << endl;
1686 1686
1687 kdDebug(5700) << " Uid: '" << uid() << "'" << endl; 1687 kdDebug(5700) << " Uid: '" << uid() << "'" << endl;
1688 1688
1689 kdDebug(5700) << " Name: '" << name() << "'" << endl; 1689 kdDebug(5700) << " Name: '" << name() << "'" << endl;
1690 kdDebug(5700) << " FormattedName: '" << formattedName() << "'" << endl; 1690 kdDebug(5700) << " FormattedName: '" << formattedName() << "'" << endl;
1691 kdDebug(5700) << " FamilyName: '" << familyName() << "'" << endl; 1691 kdDebug(5700) << " FamilyName: '" << familyName() << "'" << endl;
1692 kdDebug(5700) << " GivenName: '" << givenName() << "'" << endl; 1692 kdDebug(5700) << " GivenName: '" << givenName() << "'" << endl;
1693 kdDebug(5700) << " AdditionalName: '" << additionalName() << "'" << endl; 1693 kdDebug(5700) << " AdditionalName: '" << additionalName() << "'" << endl;
1694 kdDebug(5700) << " Prefix: '" << prefix() << "'" << endl; 1694 kdDebug(5700) << " Prefix: '" << prefix() << "'" << endl;
1695 kdDebug(5700) << " Suffix: '" << suffix() << "'" << endl; 1695 kdDebug(5700) << " Suffix: '" << suffix() << "'" << endl;
1696 kdDebug(5700) << " NickName: '" << nickName() << "'" << endl; 1696 kdDebug(5700) << " NickName: '" << nickName() << "'" << endl;
1697 kdDebug(5700) << " Birthday: '" << birthday().toString() << "'" << endl; 1697 kdDebug(5700) << " Birthday: '" << birthday().toString() << "'" << endl;
1698 kdDebug(5700) << " Mailer: '" << mailer() << "'" << endl; 1698 kdDebug(5700) << " Mailer: '" << mailer() << "'" << endl;
1699 kdDebug(5700) << " TimeZone: '" << timeZone().asString() << "'" << endl; 1699 kdDebug(5700) << " TimeZone: '" << timeZone().asString() << "'" << endl;
1700 kdDebug(5700) << " Geo: '" << geo().asString() << "'" << endl; 1700 kdDebug(5700) << " Geo: '" << geo().asString() << "'" << endl;
1701 kdDebug(5700) << " Title: '" << title() << "'" << endl; 1701 kdDebug(5700) << " Title: '" << title() << "'" << endl;
1702 kdDebug(5700) << " Role: '" << role() << "'" << endl; 1702 kdDebug(5700) << " Role: '" << role() << "'" << endl;
1703 kdDebug(5700) << " Organization: '" << organization() << "'" << endl; 1703 kdDebug(5700) << " Organization: '" << organization() << "'" << endl;
1704 kdDebug(5700) << " Note: '" << note() << "'" << endl; 1704 kdDebug(5700) << " Note: '" << note() << "'" << endl;
1705 kdDebug(5700) << " ProductId: '" << productId() << "'" << endl; 1705 kdDebug(5700) << " ProductId: '" << productId() << "'" << endl;
1706 kdDebug(5700) << " Revision: '" << revision().toString() << "'" << endl; 1706 kdDebug(5700) << " Revision: '" << revision().toString() << "'" << endl;
1707 kdDebug(5700) << " SortString: '" << sortString() << "'" << endl; 1707 kdDebug(5700) << " SortString: '" << sortString() << "'" << endl;
1708 kdDebug(5700) << " Url: '" << url().url() << "'" << endl; 1708 kdDebug(5700) << " Url: '" << url().url() << "'" << endl;
1709 kdDebug(5700) << " Secrecy: '" << secrecy().asString() << "'" << endl; 1709 kdDebug(5700) << " Secrecy: '" << secrecy().asString() << "'" << endl;
1710 kdDebug(5700) << " Logo: '" << logo().asString() << "'" << endl; 1710 kdDebug(5700) << " Logo: '" << logo().asString() << "'" << endl;
1711 kdDebug(5700) << " Photo: '" << photo().asString() << "'" << endl; 1711 kdDebug(5700) << " Photo: '" << photo().asString() << "'" << endl;
1712 kdDebug(5700) << " Sound: '" << sound().asString() << "'" << endl; 1712 kdDebug(5700) << " Sound: '" << sound().asString() << "'" << endl;
1713 kdDebug(5700) << " Agent: '" << agent().asString() << "'" << endl; 1713 kdDebug(5700) << " Agent: '" << agent().asString() << "'" << endl;
1714 1714
1715 kdDebug(5700) << " Emails {" << endl; 1715 kdDebug(5700) << " Emails {" << endl;
1716 QStringList e = emails(); 1716 QStringList e = emails();
1717 QStringList::ConstIterator it; 1717 QStringList::ConstIterator it;
1718 for( it = e.begin(); it != e.end(); ++it ) { 1718 for( it = e.begin(); it != e.end(); ++it ) {
1719 kdDebug(5700) << " " << (*it) << endl; 1719 kdDebug(5700) << " " << (*it) << endl;
1720 } 1720 }
1721 kdDebug(5700) << " }" << endl; 1721 kdDebug(5700) << " }" << endl;
1722 1722
1723 kdDebug(5700) << " PhoneNumbers {" << endl; 1723 kdDebug(5700) << " PhoneNumbers {" << endl;
1724 PhoneNumber::List p = phoneNumbers(); 1724 PhoneNumber::List p = phoneNumbers();
1725 PhoneNumber::List::ConstIterator it2; 1725 PhoneNumber::List::ConstIterator it2;
1726 for( it2 = p.begin(); it2 != p.end(); ++it2 ) { 1726 for( it2 = p.begin(); it2 != p.end(); ++it2 ) {
1727 kdDebug(5700) << " Type: " << int((*it2).type()) << " Number: " << (*it2).number() << endl; 1727 kdDebug(5700) << " Type: " << int((*it2).type()) << " Number: " << (*it2).number() << endl;
1728 } 1728 }
1729 kdDebug(5700) << " }" << endl; 1729 kdDebug(5700) << " }" << endl;
1730 1730
1731 Address::List a = addresses(); 1731 Address::List a = addresses();
1732 Address::List::ConstIterator it3; 1732 Address::List::ConstIterator it3;
1733 for( it3 = a.begin(); it3 != a.end(); ++it3 ) { 1733 for( it3 = a.begin(); it3 != a.end(); ++it3 ) {
1734 (*it3).dump(); 1734 (*it3).dump();
1735 } 1735 }
1736 1736
1737 kdDebug(5700) << " Keys {" << endl; 1737 kdDebug(5700) << " Keys {" << endl;
1738 Key::List k = keys(); 1738 Key::List k = keys();
1739 Key::List::ConstIterator it4; 1739 Key::List::ConstIterator it4;
1740 for( it4 = k.begin(); it4 != k.end(); ++it4 ) { 1740 for( it4 = k.begin(); it4 != k.end(); ++it4 ) {
1741 kdDebug(5700) << " Type: " << int((*it4).type()) << 1741 kdDebug(5700) << " Type: " << int((*it4).type()) <<
1742 " Key: " << (*it4).textData() << 1742 " Key: " << (*it4).textData() <<
1743 " CustomString: " << (*it4).customTypeString() << endl; 1743 " CustomString: " << (*it4).customTypeString() << endl;
1744 } 1744 }
1745 kdDebug(5700) << " }" << endl; 1745 kdDebug(5700) << " }" << endl;
1746 1746
1747 kdDebug(5700) << "}" << endl; 1747 kdDebug(5700) << "}" << endl;
1748} 1748}
1749 1749
1750 1750
1751void Addressee::insertAddress( const Address &address ) 1751void Addressee::insertAddress( const Address &address )
1752{ 1752{
1753 detach(); 1753 detach();
1754 mData->empty = false; 1754 mData->empty = false;
1755 1755
1756 Address::List::Iterator it; 1756 Address::List::Iterator it;
1757 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) { 1757 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) {
1758 if ( (*it).id() == address.id() ) { 1758 if ( (*it).id() == address.id() ) {
1759 *it = address; 1759 *it = address;
1760 return; 1760 return;
1761 } 1761 }
1762 } 1762 }
1763 mData->addresses.append( address ); 1763 mData->addresses.append( address );
1764} 1764}
1765 1765
1766void Addressee::removeAddress( const Address &address ) 1766void Addressee::removeAddress( const Address &address )
1767{ 1767{
1768 detach(); 1768 detach();
1769 1769
1770 Address::List::Iterator it; 1770 Address::List::Iterator it;
1771 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) { 1771 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) {
1772 if ( (*it).id() == address.id() ) { 1772 if ( (*it).id() == address.id() ) {
1773 mData->addresses.remove( it ); 1773 mData->addresses.remove( it );
1774 return; 1774 return;
1775 } 1775 }
1776 } 1776 }
1777} 1777}
1778 1778
1779Address Addressee::address( int type ) const 1779Address Addressee::address( int type ) const
1780{ 1780{
1781 Address address( type ); 1781 Address address( type );
1782 Address::List::ConstIterator it; 1782 Address::List::ConstIterator it;
1783 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) { 1783 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) {
1784 if ( matchBinaryPatternA( (*it).type(), type ) ) { 1784 if ( matchBinaryPatternA( (*it).type(), type ) ) {
1785 if ( (*it).type() & Address::Pref ) 1785 if ( (*it).type() & Address::Pref )
1786 return (*it); 1786 return (*it);
1787 else if ( address.isEmpty() ) 1787 else if ( address.isEmpty() )
1788 address = (*it); 1788 address = (*it);
1789 } 1789 }
1790 } 1790 }
1791 1791
1792 return address; 1792 return address;
1793} 1793}
1794 1794
1795Address::List Addressee::addresses() const 1795Address::List Addressee::addresses() const
1796{ 1796{
1797 return mData->addresses; 1797 return mData->addresses;
1798} 1798}
1799 1799
1800Address::List Addressee::addresses( int type ) const 1800Address::List Addressee::addresses( int type ) const
1801{ 1801{
1802 Address::List list; 1802 Address::List list;
1803 1803
1804 Address::List::ConstIterator it; 1804 Address::List::ConstIterator it;
1805 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) { 1805 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) {
1806 if ( matchBinaryPattern( (*it).type(), type ) ) { 1806 if ( matchBinaryPattern( (*it).type(), type ) ) {
1807 list.append( *it ); 1807 list.append( *it );
1808 } 1808 }
1809 } 1809 }
1810 1810
1811 return list; 1811 return list;
1812} 1812}
1813 1813
1814Address Addressee::findAddress( const QString &id ) const 1814Address Addressee::findAddress( const QString &id ) const
1815{ 1815{
1816 Address::List::ConstIterator it; 1816 Address::List::ConstIterator it;
1817 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) { 1817 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) {
1818 if ( (*it).id() == id ) { 1818 if ( (*it).id() == id ) {
1819 return *it; 1819 return *it;
1820 } 1820 }
1821 } 1821 }
1822 return Address(); 1822 return Address();
1823} 1823}
1824 1824
1825void Addressee::insertCategory( const QString &c ) 1825void Addressee::insertCategory( const QString &c )
1826{ 1826{
1827 detach(); 1827 detach();
1828 mData->empty = false; 1828 mData->empty = false;
1829 1829
1830 if ( mData->categories.contains( c ) ) return; 1830 if ( mData->categories.contains( c ) ) return;
1831 1831
1832 mData->categories.append( c ); 1832 mData->categories.append( c );
1833} 1833}
1834 1834
1835void Addressee::removeCategory( const QString &c ) 1835void Addressee::removeCategory( const QString &c )
1836{ 1836{
1837 detach(); 1837 detach();
1838 1838
1839 QStringList::Iterator it = mData->categories.find( c ); 1839 QStringList::Iterator it = mData->categories.find( c );
1840 if ( it == mData->categories.end() ) return; 1840 if ( it == mData->categories.end() ) return;
1841 1841
1842 mData->categories.remove( it ); 1842 mData->categories.remove( it );
1843} 1843}
1844 1844
1845bool Addressee::hasCategory( const QString &c ) const 1845bool Addressee::hasCategory( const QString &c ) const
1846{ 1846{
1847 return ( mData->categories.contains( c ) ); 1847 return ( mData->categories.contains( c ) );
1848} 1848}
1849 1849
1850void Addressee::setCategories( const QStringList &c ) 1850void Addressee::setCategories( const QStringList &c )
1851{ 1851{
1852 detach(); 1852 detach();
1853 mData->empty = false; 1853 mData->empty = false;
1854 1854
1855 mData->categories = c; 1855 mData->categories = c;
1856} 1856}
1857 1857
1858QStringList Addressee::categories() const 1858QStringList Addressee::categories() const
1859{ 1859{
1860 return mData->categories; 1860 return mData->categories;
1861} 1861}
1862 1862
1863void Addressee::insertCustom( const QString &app, const QString &name, 1863void Addressee::insertCustom( const QString &app, const QString &name,
1864 const QString &value ) 1864 const QString &value )
1865{ 1865{
1866 if ( value.isNull() || name.isEmpty() || app.isEmpty() ) return; 1866 if ( value.isNull() || name.isEmpty() || app.isEmpty() ) return;
1867 1867
1868 detach(); 1868 detach();
1869 mData->empty = false; 1869 mData->empty = false;
1870 1870
1871 QString qualifiedName = app + "-" + name + ":"; 1871 QString qualifiedName = app + "-" + name + ":";
1872 1872
1873 QStringList::Iterator it; 1873 QStringList::Iterator it;
1874 for( it = mData->custom.begin(); it != mData->custom.end(); ++it ) { 1874 for( it = mData->custom.begin(); it != mData->custom.end(); ++it ) {
1875 if ( (*it).startsWith( qualifiedName ) ) { 1875 if ( (*it).startsWith( qualifiedName ) ) {
1876 (*it) = qualifiedName + value; 1876 (*it) = qualifiedName + value;
1877 return; 1877 return;
1878 } 1878 }
1879 } 1879 }
1880 mData->custom.append( qualifiedName + value ); 1880 mData->custom.append( qualifiedName + value );
1881} 1881}
1882 1882
1883void Addressee::removeCustom( const QString &app, const QString &name) 1883void Addressee::removeCustom( const QString &app, const QString &name)
1884{ 1884{
1885 detach(); 1885 detach();
1886 1886
1887 QString qualifiedName = app + "-" + name + ":"; 1887 QString qualifiedName = app + "-" + name + ":";
1888 1888
1889 QStringList::Iterator it; 1889 QStringList::Iterator it;
1890 for( it = mData->custom.begin(); it != mData->custom.end(); ++it ) { 1890 for( it = mData->custom.begin(); it != mData->custom.end(); ++it ) {
1891 if ( (*it).startsWith( qualifiedName ) ) { 1891 if ( (*it).startsWith( qualifiedName ) ) {
1892 mData->custom.remove( it ); 1892 mData->custom.remove( it );
1893 return; 1893 return;
1894 } 1894 }
1895 } 1895 }
1896} 1896}
1897 1897
1898QString Addressee::custom( const QString &app, const QString &name ) const 1898QString Addressee::custom( const QString &app, const QString &name ) const
1899{ 1899{
1900 QString qualifiedName = app + "-" + name + ":"; 1900 QString qualifiedName = app + "-" + name + ":";
1901 QString value; 1901 QString value;
1902 1902
1903 QStringList::ConstIterator it; 1903 QStringList::ConstIterator it;
1904 for( it = mData->custom.begin(); it != mData->custom.end(); ++it ) { 1904 for( it = mData->custom.begin(); it != mData->custom.end(); ++it ) {
1905 if ( (*it).startsWith( qualifiedName ) ) { 1905 if ( (*it).startsWith( qualifiedName ) ) {
1906 value = (*it).mid( (*it).find( ":" ) + 1 ); 1906 value = (*it).mid( (*it).find( ":" ) + 1 );
1907 break; 1907 break;
1908 } 1908 }
1909 } 1909 }
1910 1910
1911 return value; 1911 return value;
1912} 1912}
1913 1913
1914void Addressee::setCustoms( const QStringList &l ) 1914void Addressee::setCustoms( const QStringList &l )
1915{ 1915{
1916 detach(); 1916 detach();
1917 mData->empty = false; 1917 mData->empty = false;
1918 1918
1919 mData->custom = l; 1919 mData->custom = l;
1920} 1920}
1921 1921
1922QStringList Addressee::customs() const 1922QStringList Addressee::customs() const
1923{ 1923{
1924 return mData->custom; 1924 return mData->custom;
1925} 1925}
1926 1926
1927void Addressee::parseEmailAddress( const QString &rawEmail, QString &fullName, 1927void Addressee::parseEmailAddress( const QString &rawEmail, QString &fullName,
1928 QString &email) 1928 QString &email)
1929{ 1929{
1930 int startPos, endPos, len; 1930 int startPos, endPos, len;
1931 QString partA, partB, result; 1931 QString partA, partB, result;
1932 char endCh = '>'; 1932 char endCh = '>';
1933 1933
1934 startPos = rawEmail.find('<'); 1934 startPos = rawEmail.find('<');
1935 if (startPos < 0) 1935 if (startPos < 0)
1936 { 1936 {
1937 startPos = rawEmail.find('('); 1937 startPos = rawEmail.find('(');
1938 endCh = ')'; 1938 endCh = ')';
1939 } 1939 }
1940 if (startPos < 0) 1940 if (startPos < 0)
1941 { 1941 {
1942 // We couldn't find any separators, so we assume the whole string 1942 // We couldn't find any separators, so we assume the whole string
1943 // is the email address 1943 // is the email address
1944 email = rawEmail; 1944 email = rawEmail;
1945 fullName = ""; 1945 fullName = "";
1946 } 1946 }
1947 else 1947 else
1948 { 1948 {
1949 // We have a start position, try to find an end 1949 // We have a start position, try to find an end
1950 endPos = rawEmail.find(endCh, startPos+1); 1950 endPos = rawEmail.find(endCh, startPos+1);
1951 1951
1952 if (endPos < 0) 1952 if (endPos < 0)
1953 { 1953 {
1954 // We couldn't find the end of the email address. We can only 1954 // We couldn't find the end of the email address. We can only
1955 // assume the entire string is the email address. 1955 // assume the entire string is the email address.
1956 email = rawEmail; 1956 email = rawEmail;
1957 fullName = ""; 1957 fullName = "";
1958 } 1958 }
1959 else 1959 else
1960 { 1960 {
1961 // We have a start and end to the email address 1961 // We have a start and end to the email address
1962 1962
1963 // Grab the name part 1963 // Grab the name part
1964 fullName = rawEmail.left(startPos).stripWhiteSpace(); 1964 fullName = rawEmail.left(startPos).stripWhiteSpace();
1965 1965
1966 // grab the email part 1966 // grab the email part
1967 email = rawEmail.mid(startPos+1, endPos-startPos-1).stripWhiteSpace(); 1967 email = rawEmail.mid(startPos+1, endPos-startPos-1).stripWhiteSpace();
1968 1968
1969 // Check that we do not have any extra characters on the end of the 1969 // Check that we do not have any extra characters on the end of the
1970 // strings 1970 // strings
1971 len = fullName.length(); 1971 len = fullName.length();
1972 if (fullName[0]=='"' && fullName[len-1]=='"') 1972 if (fullName[0]=='"' && fullName[len-1]=='"')
1973 fullName = fullName.mid(1, len-2); 1973 fullName = fullName.mid(1, len-2);
1974 else if (fullName[0]=='<' && fullName[len-1]=='>') 1974 else if (fullName[0]=='<' && fullName[len-1]=='>')
1975 fullName = fullName.mid(1, len-2); 1975 fullName = fullName.mid(1, len-2);
1976 else if (fullName[0]=='(' && fullName[len-1]==')') 1976 else if (fullName[0]=='(' && fullName[len-1]==')')
1977 fullName = fullName.mid(1, len-2); 1977 fullName = fullName.mid(1, len-2);
1978 } 1978 }
1979 } 1979 }
1980} 1980}
1981 1981
1982void Addressee::setResource( Resource *resource ) 1982void Addressee::setResource( Resource *resource )
1983{ 1983{
1984 detach(); 1984 detach();
1985 mData->resource = resource; 1985 mData->resource = resource;
1986} 1986}
1987 1987
1988Resource *Addressee::resource() const 1988Resource *Addressee::resource() const
1989{ 1989{
1990 return mData->resource; 1990 return mData->resource;
1991} 1991}
1992 1992
1993//US 1993//US
1994QString Addressee::resourceLabel() 1994QString Addressee::resourceLabel()
1995{ 1995{
1996 return i18n("Resource"); 1996 return i18n("Resource");
1997} 1997}
1998 1998
1999void Addressee::setChanged( bool value ) 1999void Addressee::setChanged( bool value )
2000{ 2000{
2001 detach(); 2001 detach();
2002 mData->changed = value; 2002 mData->changed = value;
2003} 2003}
2004 2004
2005bool Addressee::changed() const 2005bool Addressee::changed() const
2006{ 2006{
2007 return mData->changed; 2007 return mData->changed;
2008} 2008}
2009 2009
2010void Addressee::setTagged( bool value ) 2010void Addressee::setTagged( bool value )
2011{ 2011{
2012 detach(); 2012 detach();
2013 mData->tagged = value; 2013 mData->tagged = value;
2014} 2014}
2015 2015
2016bool Addressee::tagged() const 2016bool Addressee::tagged() const
2017{ 2017{
2018 return mData->tagged; 2018 return mData->tagged;
2019} 2019}
2020 2020
2021QDataStream &KABC::operator<<( QDataStream &s, const Addressee &a ) 2021QDataStream &KABC::operator<<( QDataStream &s, const Addressee &a )
2022{ 2022{
2023 if (!a.mData) return s; 2023 if (!a.mData) return s;
2024 2024
2025 s << a.uid(); 2025 s << a.uid();
2026 2026
2027 s << a.mData->name; 2027 s << a.mData->name;
2028 s << a.mData->formattedName; 2028 s << a.mData->formattedName;
2029 s << a.mData->familyName; 2029 s << a.mData->familyName;
2030 s << a.mData->givenName; 2030 s << a.mData->givenName;
2031 s << a.mData->additionalName; 2031 s << a.mData->additionalName;
2032 s << a.mData->prefix; 2032 s << a.mData->prefix;
2033 s << a.mData->suffix; 2033 s << a.mData->suffix;
2034 s << a.mData->nickName; 2034 s << a.mData->nickName;
2035 s << a.mData->birthday; 2035 s << a.mData->birthday;
2036 s << a.mData->mailer; 2036 s << a.mData->mailer;
2037 s << a.mData->timeZone; 2037 s << a.mData->timeZone;
2038 s << a.mData->geo; 2038 s << a.mData->geo;
2039 s << a.mData->title; 2039 s << a.mData->title;
2040 s << a.mData->role; 2040 s << a.mData->role;
2041 s << a.mData->organization; 2041 s << a.mData->organization;
2042 s << a.mData->note; 2042 s << a.mData->note;
2043 s << a.mData->productId; 2043 s << a.mData->productId;
2044 s << a.mData->revision; 2044 s << a.mData->revision;
2045 s << a.mData->sortString; 2045 s << a.mData->sortString;
2046 s << a.mData->url; 2046 s << a.mData->url;
2047 s << a.mData->secrecy; 2047 s << a.mData->secrecy;
2048 s << a.mData->logo; 2048 s << a.mData->logo;
2049 s << a.mData->photo; 2049 s << a.mData->photo;
2050 s << a.mData->sound; 2050 s << a.mData->sound;
2051 s << a.mData->agent; 2051 s << a.mData->agent;
2052 s << a.mData->phoneNumbers; 2052 s << a.mData->phoneNumbers;
2053 s << a.mData->addresses; 2053 s << a.mData->addresses;
2054 s << a.mData->emails; 2054 s << a.mData->emails;
2055 s << a.mData->categories; 2055 s << a.mData->categories;
2056 s << a.mData->custom; 2056 s << a.mData->custom;
2057 s << a.mData->keys; 2057 s << a.mData->keys;
2058 return s; 2058 return s;
2059} 2059}
2060 2060
2061QDataStream &KABC::operator>>( QDataStream &s, Addressee &a ) 2061QDataStream &KABC::operator>>( QDataStream &s, Addressee &a )
2062{ 2062{
2063 if (!a.mData) return s; 2063 if (!a.mData) return s;
2064 2064
2065 s >> a.mData->uid; 2065 s >> a.mData->uid;
2066 2066
2067 s >> a.mData->name; 2067 s >> a.mData->name;
2068 s >> a.mData->formattedName; 2068 s >> a.mData->formattedName;
2069 s >> a.mData->familyName; 2069 s >> a.mData->familyName;
2070 s >> a.mData->givenName; 2070 s >> a.mData->givenName;
2071 s >> a.mData->additionalName; 2071 s >> a.mData->additionalName;
2072 s >> a.mData->prefix; 2072 s >> a.mData->prefix;
2073 s >> a.mData->suffix; 2073 s >> a.mData->suffix;
2074 s >> a.mData->nickName; 2074 s >> a.mData->nickName;
2075 s >> a.mData->birthday; 2075 s >> a.mData->birthday;
2076 s >> a.mData->mailer; 2076 s >> a.mData->mailer;
2077 s >> a.mData->timeZone; 2077 s >> a.mData->timeZone;
2078 s >> a.mData->geo; 2078 s >> a.mData->geo;
2079 s >> a.mData->title; 2079 s >> a.mData->title;
2080 s >> a.mData->role; 2080 s >> a.mData->role;
2081 s >> a.mData->organization; 2081 s >> a.mData->organization;
2082 s >> a.mData->note; 2082 s >> a.mData->note;
2083 s >> a.mData->productId; 2083 s >> a.mData->productId;
2084 s >> a.mData->revision; 2084 s >> a.mData->revision;
2085 s >> a.mData->sortString; 2085 s >> a.mData->sortString;
2086 s >> a.mData->url; 2086 s >> a.mData->url;
2087 s >> a.mData->secrecy; 2087 s >> a.mData->secrecy;
2088 s >> a.mData->logo; 2088 s >> a.mData->logo;
2089 s >> a.mData->photo; 2089 s >> a.mData->photo;
2090 s >> a.mData->sound; 2090 s >> a.mData->sound;
2091 s >> a.mData->agent; 2091 s >> a.mData->agent;
2092 s >> a.mData->phoneNumbers; 2092 s >> a.mData->phoneNumbers;
2093 s >> a.mData->addresses; 2093 s >> a.mData->addresses;
2094 s >> a.mData->emails; 2094 s >> a.mData->emails;
2095 s >> a.mData->categories; 2095 s >> a.mData->categories;
2096 s >> a.mData->custom; 2096 s >> a.mData->custom;
2097 s >> a.mData->keys; 2097 s >> a.mData->keys;
2098 2098
2099 a.mData->empty = false; 2099 a.mData->empty = false;
2100 2100
2101 return s; 2101 return s;
2102} 2102}
2103bool matchBinaryPattern( int value, int pattern ) 2103bool matchBinaryPattern( int value, int pattern )
2104{ 2104{
2105 /** 2105 /**
2106 We want to match all telephonnumbers/addresses which have the bits in the 2106 We want to match all telephonnumbers/addresses which have the bits in the
2107 pattern set. More are allowed. 2107 pattern set. More are allowed.
2108 if pattern == 0 we have a special handling, then we want only those with 2108 if pattern == 0 we have a special handling, then we want only those with
2109 exactly no bit set. 2109 exactly no bit set.
2110 */ 2110 */
2111 if ( pattern == 0 ) 2111 if ( pattern == 0 )
2112 return ( value == 0 ); 2112 return ( value == 0 );
2113 else 2113 else
2114 return ( pattern == ( pattern & value ) ); 2114 return ( pattern == ( pattern & value ) );
2115} 2115}
2116 2116
2117bool matchBinaryPatternP( int value, int pattern ) 2117bool matchBinaryPatternP( int value, int pattern )
2118{ 2118{
2119 2119
2120 if ( pattern == 0 ) 2120 if ( pattern == 0 )
2121 return ( value == 0 ); 2121 return ( value == 0 );
2122 else 2122 else
2123 return ( (pattern |PhoneNumber::Pref ) == ( value |PhoneNumber::Pref ) ); 2123 return ( (pattern |PhoneNumber::Pref ) == ( value |PhoneNumber::Pref ) );
2124} 2124}
2125bool matchBinaryPatternA( int value, int pattern ) 2125bool matchBinaryPatternA( int value, int pattern )
2126{ 2126{
2127 2127
2128 if ( pattern == 0 ) 2128 if ( pattern == 0 )
2129 return ( value == 0 ); 2129 return ( value == 0 );
2130 else 2130 else
2131 return ( (pattern | Address::Pref) == ( value | Address::Pref ) ); 2131 return ( (pattern | Address::Pref) == ( value | Address::Pref ) );
2132} 2132}