summaryrefslogtreecommitdiffabout
path: root/kabc/addressee.cpp
Unidiff
Diffstat (limited to 'kabc/addressee.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--kabc/addressee.cpp1
1 files changed, 1 insertions, 0 deletions
diff --git a/kabc/addressee.cpp b/kabc/addressee.cpp
index fb32f6e..7f04d8f 100644
--- a/kabc/addressee.cpp
+++ b/kabc/addressee.cpp
@@ -1,1682 +1,1683 @@
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 );
46 46
47struct Addressee::AddresseeData : public KShared 47struct Addressee::AddresseeData : public KShared
48{ 48{
49 QString uid; 49 QString uid;
50 QString name; 50 QString name;
51 QString formattedName; 51 QString formattedName;
52 QString familyName; 52 QString familyName;
53 QString givenName; 53 QString givenName;
54 QString additionalName; 54 QString additionalName;
55 QString prefix; 55 QString prefix;
56 QString suffix; 56 QString suffix;
57 QString nickName; 57 QString nickName;
58 QDateTime birthday; 58 QDateTime birthday;
59 QString mailer; 59 QString mailer;
60 TimeZone timeZone; 60 TimeZone timeZone;
61 Geo geo; 61 Geo geo;
62 QString title; 62 QString title;
63 QString role; 63 QString role;
64 QString organization; 64 QString organization;
65 QString note; 65 QString note;
66 QString productId; 66 QString productId;
67 QDateTime revision; 67 QDateTime revision;
68 QString sortString; 68 QString sortString;
69 KURL url; 69 KURL url;
70 Secrecy secrecy; 70 Secrecy secrecy;
71 Picture logo; 71 Picture logo;
72 Picture photo; 72 Picture photo;
73 Sound sound; 73 Sound sound;
74 Agent agent; 74 Agent agent;
75 QString mExternalId; 75 QString mExternalId;
76 PhoneNumber::List phoneNumbers; 76 PhoneNumber::List phoneNumbers;
77 Address::List addresses; 77 Address::List addresses;
78 Key::List keys; 78 Key::List keys;
79 QStringList emails; 79 QStringList emails;
80 QStringList categories; 80 QStringList categories;
81 QStringList custom; 81 QStringList custom;
82 82
83 Resource *resource; 83 Resource *resource;
84 84
85 bool empty :1; 85 bool empty :1;
86 bool changed :1; 86 bool changed :1;
87}; 87};
88 88
89Addressee::Addressee() 89Addressee::Addressee()
90{ 90{
91 mData = new AddresseeData; 91 mData = new AddresseeData;
92 mData->empty = true; 92 mData->empty = true;
93 mData->changed = false; 93 mData->changed = false;
94 mData->resource = 0; 94 mData->resource = 0;
95 mData->mExternalId = ":"; 95 mData->mExternalId = ":";
96 mData->revision = QDateTime ( QDate( 2004,1,1));
96 mTempSyncStat = SYNC_TEMPSTATE_INITIAL; 97 mTempSyncStat = SYNC_TEMPSTATE_INITIAL;
97} 98}
98 99
99Addressee::~Addressee() 100Addressee::~Addressee()
100{ 101{
101} 102}
102 103
103Addressee::Addressee( const Addressee &a ) 104Addressee::Addressee( const Addressee &a )
104{ 105{
105 mData = a.mData; 106 mData = a.mData;
106 mTempSyncStat = SYNC_TEMPSTATE_INITIAL; 107 mTempSyncStat = SYNC_TEMPSTATE_INITIAL;
107} 108}
108 109
109Addressee &Addressee::operator=( const Addressee &a ) 110Addressee &Addressee::operator=( const Addressee &a )
110{ 111{
111 mData = a.mData; 112 mData = a.mData;
112 return (*this); 113 return (*this);
113} 114}
114 115
115Addressee Addressee::copy() 116Addressee Addressee::copy()
116{ 117{
117 Addressee a; 118 Addressee a;
118 *(a.mData) = *mData; 119 *(a.mData) = *mData;
119 return a; 120 return a;
120} 121}
121 122
122void Addressee::detach() 123void Addressee::detach()
123{ 124{
124 if ( mData.count() == 1 ) return; 125 if ( mData.count() == 1 ) return;
125 *this = copy(); 126 *this = copy();
126} 127}
127 128
128bool Addressee::operator==( const Addressee &a ) const 129bool Addressee::operator==( const Addressee &a ) const
129{ 130{
130 if ( uid() != a.uid() ) return false; 131 if ( uid() != a.uid() ) return false;
131 if ( mData->name != a.mData->name ) return false; 132 if ( mData->name != a.mData->name ) return false;
132 if ( mData->formattedName != a.mData->formattedName ) return false; 133 if ( mData->formattedName != a.mData->formattedName ) return false;
133 if ( mData->familyName != a.mData->familyName ) return false; 134 if ( mData->familyName != a.mData->familyName ) return false;
134 if ( mData->givenName != a.mData->givenName ) return false; 135 if ( mData->givenName != a.mData->givenName ) return false;
135 if ( mData->additionalName != a.mData->additionalName ) return false; 136 if ( mData->additionalName != a.mData->additionalName ) return false;
136 if ( mData->prefix != a.mData->prefix ) return false; 137 if ( mData->prefix != a.mData->prefix ) return false;
137 if ( mData->suffix != a.mData->suffix ) return false; 138 if ( mData->suffix != a.mData->suffix ) return false;
138 if ( mData->nickName != a.mData->nickName ) return false; 139 if ( mData->nickName != a.mData->nickName ) return false;
139 if ( mData->birthday != a.mData->birthday ) return false; 140 if ( mData->birthday != a.mData->birthday ) return false;
140 if ( mData->mailer != a.mData->mailer ) return false; 141 if ( mData->mailer != a.mData->mailer ) return false;
141 if ( mData->timeZone != a.mData->timeZone ) return false; 142 if ( mData->timeZone != a.mData->timeZone ) return false;
142 if ( mData->geo != a.mData->geo ) return false; 143 if ( mData->geo != a.mData->geo ) return false;
143 if ( mData->title != a.mData->title ) return false; 144 if ( mData->title != a.mData->title ) return false;
144 if ( mData->role != a.mData->role ) return false; 145 if ( mData->role != a.mData->role ) return false;
145 if ( mData->organization != a.mData->organization ) return false; 146 if ( mData->organization != a.mData->organization ) return false;
146 if ( mData->note != a.mData->note ) return false; 147 if ( mData->note != a.mData->note ) return false;
147 if ( mData->productId != a.mData->productId ) return false; 148 if ( mData->productId != a.mData->productId ) return false;
148 if ( mData->revision != a.mData->revision ) return false; 149 if ( mData->revision != a.mData->revision ) return false;
149 if ( mData->sortString != a.mData->sortString ) return false; 150 if ( mData->sortString != a.mData->sortString ) return false;
150 if ( mData->secrecy != a.mData->secrecy ) return false; 151 if ( mData->secrecy != a.mData->secrecy ) return false;
151 if ( mData->logo != a.mData->logo ) return false; 152 if ( mData->logo != a.mData->logo ) return false;
152 if ( mData->photo != a.mData->photo ) return false; 153 if ( mData->photo != a.mData->photo ) return false;
153 if ( mData->sound != a.mData->sound ) return false; 154 if ( mData->sound != a.mData->sound ) return false;
154 if ( mData->agent != a.mData->agent ) return false; 155 if ( mData->agent != a.mData->agent ) return false;
155 if ( ( mData->url.isValid() || a.mData->url.isValid() ) && 156 if ( ( mData->url.isValid() || a.mData->url.isValid() ) &&
156 ( mData->url != a.mData->url ) ) return false; 157 ( mData->url != a.mData->url ) ) return false;
157 if ( mData->phoneNumbers != a.mData->phoneNumbers ) return false; 158 if ( mData->phoneNumbers != a.mData->phoneNumbers ) return false;
158 if ( mData->addresses != a.mData->addresses ) return false; 159 if ( mData->addresses != a.mData->addresses ) return false;
159 if ( mData->keys != a.mData->keys ) return false; 160 if ( mData->keys != a.mData->keys ) return false;
160 if ( mData->emails != a.mData->emails ) return false; 161 if ( mData->emails != a.mData->emails ) return false;
161 if ( mData->categories != a.mData->categories ) return false; 162 if ( mData->categories != a.mData->categories ) return false;
162 if ( mData->custom != a.mData->custom ) return false; 163 if ( mData->custom != a.mData->custom ) return false;
163 164
164 return true; 165 return true;
165} 166}
166 167
167bool Addressee::operator!=( const Addressee &a ) const 168bool Addressee::operator!=( const Addressee &a ) const
168{ 169{
169 return !( a == *this ); 170 return !( a == *this );
170} 171}
171 172
172bool Addressee::isEmpty() const 173bool Addressee::isEmpty() const
173{ 174{
174 return mData->empty; 175 return mData->empty;
175} 176}
176void Addressee::removeID(const QString &prof) 177void Addressee::removeID(const QString &prof)
177{ 178{
178 detach(); 179 detach();
179 mData->mExternalId = KIdManager::removeId ( mData->mExternalId, prof); 180 mData->mExternalId = KIdManager::removeId ( mData->mExternalId, prof);
180 181
181} 182}
182void Addressee::setID( const QString & prof , const QString & id ) 183void Addressee::setID( const QString & prof , const QString & id )
183{ 184{
184 detach(); 185 detach();
185 mData->mExternalId = KIdManager::setId ( mData->mExternalId, prof, id ); 186 mData->mExternalId = KIdManager::setId ( mData->mExternalId, prof, id );
186} 187}
187void Addressee::setTempSyncStat( int id ) 188void Addressee::setTempSyncStat( int id )
188{ 189{
189 mTempSyncStat = id; 190 mTempSyncStat = id;
190} 191}
191int Addressee::tempSyncStat() const 192int Addressee::tempSyncStat() const
192{ 193{
193 return mTempSyncStat; 194 return mTempSyncStat;
194} 195}
195 196
196QString Addressee::getID( const QString & prof) 197QString Addressee::getID( const QString & prof)
197{ 198{
198 return KIdManager::getId ( mData->mExternalId, prof ); 199 return KIdManager::getId ( mData->mExternalId, prof );
199} 200}
200 201
201void Addressee::setCsum( const QString & prof , const QString & id ) 202void Addressee::setCsum( const QString & prof , const QString & id )
202{ 203{
203 detach(); 204 detach();
204 mData->mExternalId = KIdManager::setCsum ( mData->mExternalId, prof, id ); 205 mData->mExternalId = KIdManager::setCsum ( mData->mExternalId, prof, id );
205} 206}
206 207
207QString Addressee::getCsum( const QString & prof) 208QString Addressee::getCsum( const QString & prof)
208{ 209{
209 return KIdManager::getCsum ( mData->mExternalId, prof ); 210 return KIdManager::getCsum ( mData->mExternalId, prof );
210} 211}
211 212
212void Addressee::setIDStr( const QString & s ) 213void Addressee::setIDStr( const QString & s )
213{ 214{
214 detach(); 215 detach();
215 mData->mExternalId = s; 216 mData->mExternalId = s;
216} 217}
217 218
218QString Addressee::IDStr() const 219QString Addressee::IDStr() const
219{ 220{
220 return mData->mExternalId; 221 return mData->mExternalId;
221} 222}
222 223
223 224
224void Addressee::setUid( const QString &id ) 225void Addressee::setUid( const QString &id )
225{ 226{
226 if ( id == mData->uid ) return; 227 if ( id == mData->uid ) return;
227 detach(); 228 detach();
228 mData->empty = false; 229 mData->empty = false;
229 mData->uid = id; 230 mData->uid = id;
230} 231}
231 232
232QString Addressee::uid() const 233QString Addressee::uid() const
233{ 234{
234 if ( mData->uid.isEmpty() ) 235 if ( mData->uid.isEmpty() )
235 mData->uid = KApplication::randomString( 10 ); 236 mData->uid = KApplication::randomString( 10 );
236 237
237 return mData->uid; 238 return mData->uid;
238} 239}
239 240
240QString Addressee::uidLabel() 241QString Addressee::uidLabel()
241{ 242{
242 return i18n("Unique Identifier"); 243 return i18n("Unique Identifier");
243} 244}
244 245
245void Addressee::setName( const QString &name ) 246void Addressee::setName( const QString &name )
246{ 247{
247 if ( name == mData->name ) return; 248 if ( name == mData->name ) return;
248 detach(); 249 detach();
249 mData->empty = false; 250 mData->empty = false;
250 mData->name = name; 251 mData->name = name;
251} 252}
252 253
253QString Addressee::name() const 254QString Addressee::name() const
254{ 255{
255 return mData->name; 256 return mData->name;
256} 257}
257 258
258QString Addressee::nameLabel() 259QString Addressee::nameLabel()
259{ 260{
260 return i18n("Name"); 261 return i18n("Name");
261} 262}
262 263
263 264
264void Addressee::setFormattedName( const QString &formattedName ) 265void Addressee::setFormattedName( const QString &formattedName )
265{ 266{
266 if ( formattedName == mData->formattedName ) return; 267 if ( formattedName == mData->formattedName ) return;
267 detach(); 268 detach();
268 mData->empty = false; 269 mData->empty = false;
269 mData->formattedName = formattedName; 270 mData->formattedName = formattedName;
270} 271}
271 272
272QString Addressee::formattedName() const 273QString Addressee::formattedName() const
273{ 274{
274 return mData->formattedName; 275 return mData->formattedName;
275} 276}
276 277
277QString Addressee::formattedNameLabel() 278QString Addressee::formattedNameLabel()
278{ 279{
279 return i18n("Formatted Name"); 280 return i18n("Formatted Name");
280} 281}
281 282
282 283
283void Addressee::setFamilyName( const QString &familyName ) 284void Addressee::setFamilyName( const QString &familyName )
284{ 285{
285 if ( familyName == mData->familyName ) return; 286 if ( familyName == mData->familyName ) return;
286 detach(); 287 detach();
287 mData->empty = false; 288 mData->empty = false;
288 mData->familyName = familyName; 289 mData->familyName = familyName;
289} 290}
290 291
291QString Addressee::familyName() const 292QString Addressee::familyName() const
292{ 293{
293 return mData->familyName; 294 return mData->familyName;
294} 295}
295 296
296QString Addressee::familyNameLabel() 297QString Addressee::familyNameLabel()
297{ 298{
298 return i18n("Family Name"); 299 return i18n("Family Name");
299} 300}
300 301
301 302
302void Addressee::setGivenName( const QString &givenName ) 303void Addressee::setGivenName( const QString &givenName )
303{ 304{
304 if ( givenName == mData->givenName ) return; 305 if ( givenName == mData->givenName ) return;
305 detach(); 306 detach();
306 mData->empty = false; 307 mData->empty = false;
307 mData->givenName = givenName; 308 mData->givenName = givenName;
308} 309}
309 310
310QString Addressee::givenName() const 311QString Addressee::givenName() const
311{ 312{
312 return mData->givenName; 313 return mData->givenName;
313} 314}
314 315
315QString Addressee::givenNameLabel() 316QString Addressee::givenNameLabel()
316{ 317{
317 return i18n("Given Name"); 318 return i18n("Given Name");
318} 319}
319 320
320 321
321void Addressee::setAdditionalName( const QString &additionalName ) 322void Addressee::setAdditionalName( const QString &additionalName )
322{ 323{
323 if ( additionalName == mData->additionalName ) return; 324 if ( additionalName == mData->additionalName ) return;
324 detach(); 325 detach();
325 mData->empty = false; 326 mData->empty = false;
326 mData->additionalName = additionalName; 327 mData->additionalName = additionalName;
327} 328}
328 329
329QString Addressee::additionalName() const 330QString Addressee::additionalName() const
330{ 331{
331 return mData->additionalName; 332 return mData->additionalName;
332} 333}
333 334
334QString Addressee::additionalNameLabel() 335QString Addressee::additionalNameLabel()
335{ 336{
336 return i18n("Additional Names"); 337 return i18n("Additional Names");
337} 338}
338 339
339 340
340void Addressee::setPrefix( const QString &prefix ) 341void Addressee::setPrefix( const QString &prefix )
341{ 342{
342 if ( prefix == mData->prefix ) return; 343 if ( prefix == mData->prefix ) return;
343 detach(); 344 detach();
344 mData->empty = false; 345 mData->empty = false;
345 mData->prefix = prefix; 346 mData->prefix = prefix;
346} 347}
347 348
348QString Addressee::prefix() const 349QString Addressee::prefix() const
349{ 350{
350 return mData->prefix; 351 return mData->prefix;
351} 352}
352 353
353QString Addressee::prefixLabel() 354QString Addressee::prefixLabel()
354{ 355{
355 return i18n("Honorific Prefixes"); 356 return i18n("Honorific Prefixes");
356} 357}
357 358
358 359
359void Addressee::setSuffix( const QString &suffix ) 360void Addressee::setSuffix( const QString &suffix )
360{ 361{
361 if ( suffix == mData->suffix ) return; 362 if ( suffix == mData->suffix ) return;
362 detach(); 363 detach();
363 mData->empty = false; 364 mData->empty = false;
364 mData->suffix = suffix; 365 mData->suffix = suffix;
365} 366}
366 367
367QString Addressee::suffix() const 368QString Addressee::suffix() const
368{ 369{
369 return mData->suffix; 370 return mData->suffix;
370} 371}
371 372
372QString Addressee::suffixLabel() 373QString Addressee::suffixLabel()
373{ 374{
374 return i18n("Honorific Suffixes"); 375 return i18n("Honorific Suffixes");
375} 376}
376 377
377 378
378void Addressee::setNickName( const QString &nickName ) 379void Addressee::setNickName( const QString &nickName )
379{ 380{
380 if ( nickName == mData->nickName ) return; 381 if ( nickName == mData->nickName ) return;
381 detach(); 382 detach();
382 mData->empty = false; 383 mData->empty = false;
383 mData->nickName = nickName; 384 mData->nickName = nickName;
384} 385}
385 386
386QString Addressee::nickName() const 387QString Addressee::nickName() const
387{ 388{
388 return mData->nickName; 389 return mData->nickName;
389} 390}
390 391
391QString Addressee::nickNameLabel() 392QString Addressee::nickNameLabel()
392{ 393{
393 return i18n("Nick Name"); 394 return i18n("Nick Name");
394} 395}
395 396
396 397
397void Addressee::setBirthday( const QDateTime &birthday ) 398void Addressee::setBirthday( const QDateTime &birthday )
398{ 399{
399 if ( birthday == mData->birthday ) return; 400 if ( birthday == mData->birthday ) return;
400 detach(); 401 detach();
401 mData->empty = false; 402 mData->empty = false;
402 mData->birthday = birthday; 403 mData->birthday = birthday;
403} 404}
404 405
405QDateTime Addressee::birthday() const 406QDateTime Addressee::birthday() const
406{ 407{
407 return mData->birthday; 408 return mData->birthday;
408} 409}
409 410
410QString Addressee::birthdayLabel() 411QString Addressee::birthdayLabel()
411{ 412{
412 return i18n("Birthday"); 413 return i18n("Birthday");
413} 414}
414 415
415 416
416QString Addressee::homeAddressStreetLabel() 417QString Addressee::homeAddressStreetLabel()
417{ 418{
418 return i18n("Home Address Street"); 419 return i18n("Home Address Street");
419} 420}
420 421
421 422
422QString Addressee::homeAddressLocalityLabel() 423QString Addressee::homeAddressLocalityLabel()
423{ 424{
424 return i18n("Home Address Locality"); 425 return i18n("Home Address Locality");
425} 426}
426 427
427 428
428QString Addressee::homeAddressRegionLabel() 429QString Addressee::homeAddressRegionLabel()
429{ 430{
430 return i18n("Home Address Region"); 431 return i18n("Home Address Region");
431} 432}
432 433
433 434
434QString Addressee::homeAddressPostalCodeLabel() 435QString Addressee::homeAddressPostalCodeLabel()
435{ 436{
436 return i18n("Home Address Postal Code"); 437 return i18n("Home Address Postal Code");
437} 438}
438 439
439 440
440QString Addressee::homeAddressCountryLabel() 441QString Addressee::homeAddressCountryLabel()
441{ 442{
442 return i18n("Home Address Country"); 443 return i18n("Home Address Country");
443} 444}
444 445
445 446
446QString Addressee::homeAddressLabelLabel() 447QString Addressee::homeAddressLabelLabel()
447{ 448{
448 return i18n("Home Address Label"); 449 return i18n("Home Address Label");
449} 450}
450 451
451 452
452QString Addressee::businessAddressStreetLabel() 453QString Addressee::businessAddressStreetLabel()
453{ 454{
454 return i18n("Business Address Street"); 455 return i18n("Business Address Street");
455} 456}
456 457
457 458
458QString Addressee::businessAddressLocalityLabel() 459QString Addressee::businessAddressLocalityLabel()
459{ 460{
460 return i18n("Business Address Locality"); 461 return i18n("Business Address Locality");
461} 462}
462 463
463 464
464QString Addressee::businessAddressRegionLabel() 465QString Addressee::businessAddressRegionLabel()
465{ 466{
466 return i18n("Business Address Region"); 467 return i18n("Business Address Region");
467} 468}
468 469
469 470
470QString Addressee::businessAddressPostalCodeLabel() 471QString Addressee::businessAddressPostalCodeLabel()
471{ 472{
472 return i18n("Business Address Postal Code"); 473 return i18n("Business Address Postal Code");
473} 474}
474 475
475 476
476QString Addressee::businessAddressCountryLabel() 477QString Addressee::businessAddressCountryLabel()
477{ 478{
478 return i18n("Business Address Country"); 479 return i18n("Business Address Country");
479} 480}
480 481
481 482
482QString Addressee::businessAddressLabelLabel() 483QString Addressee::businessAddressLabelLabel()
483{ 484{
484 return i18n("Business Address Label"); 485 return i18n("Business Address Label");
485} 486}
486 487
487 488
488QString Addressee::homePhoneLabel() 489QString Addressee::homePhoneLabel()
489{ 490{
490 return i18n("Home Phone"); 491 return i18n("Home Phone");
491} 492}
492 493
493 494
494QString Addressee::businessPhoneLabel() 495QString Addressee::businessPhoneLabel()
495{ 496{
496 return i18n("Business Phone"); 497 return i18n("Business Phone");
497} 498}
498 499
499 500
500QString Addressee::mobilePhoneLabel() 501QString Addressee::mobilePhoneLabel()
501{ 502{
502 return i18n("Mobile Phone"); 503 return i18n("Mobile Phone");
503} 504}
504 505
505 506
506QString Addressee::homeFaxLabel() 507QString Addressee::homeFaxLabel()
507{ 508{
508 return i18n("Home Fax"); 509 return i18n("Home Fax");
509} 510}
510 511
511 512
512QString Addressee::businessFaxLabel() 513QString Addressee::businessFaxLabel()
513{ 514{
514 return i18n("Business Fax"); 515 return i18n("Business Fax");
515} 516}
516 517
517 518
518QString Addressee::carPhoneLabel() 519QString Addressee::carPhoneLabel()
519{ 520{
520 return i18n("Car Phone"); 521 return i18n("Car Phone");
521} 522}
522 523
523 524
524QString Addressee::isdnLabel() 525QString Addressee::isdnLabel()
525{ 526{
526 return i18n("ISDN"); 527 return i18n("ISDN");
527} 528}
528 529
529 530
530QString Addressee::pagerLabel() 531QString Addressee::pagerLabel()
531{ 532{
532 return i18n("Pager"); 533 return i18n("Pager");
533} 534}
534 535
535QString Addressee::sipLabel() 536QString Addressee::sipLabel()
536{ 537{
537 return i18n("SIP"); 538 return i18n("SIP");
538} 539}
539 540
540QString Addressee::emailLabel() 541QString Addressee::emailLabel()
541{ 542{
542 return i18n("Email Address"); 543 return i18n("Email Address");
543} 544}
544 545
545 546
546void Addressee::setMailer( const QString &mailer ) 547void Addressee::setMailer( const QString &mailer )
547{ 548{
548 if ( mailer == mData->mailer ) return; 549 if ( mailer == mData->mailer ) return;
549 detach(); 550 detach();
550 mData->empty = false; 551 mData->empty = false;
551 mData->mailer = mailer; 552 mData->mailer = mailer;
552} 553}
553 554
554QString Addressee::mailer() const 555QString Addressee::mailer() const
555{ 556{
556 return mData->mailer; 557 return mData->mailer;
557} 558}
558 559
559QString Addressee::mailerLabel() 560QString Addressee::mailerLabel()
560{ 561{
561 return i18n("Mail Client"); 562 return i18n("Mail Client");
562} 563}
563 564
564 565
565void Addressee::setTimeZone( const TimeZone &timeZone ) 566void Addressee::setTimeZone( const TimeZone &timeZone )
566{ 567{
567 if ( timeZone == mData->timeZone ) return; 568 if ( timeZone == mData->timeZone ) return;
568 detach(); 569 detach();
569 mData->empty = false; 570 mData->empty = false;
570 mData->timeZone = timeZone; 571 mData->timeZone = timeZone;
571} 572}
572 573
573TimeZone Addressee::timeZone() const 574TimeZone Addressee::timeZone() const
574{ 575{
575 return mData->timeZone; 576 return mData->timeZone;
576} 577}
577 578
578QString Addressee::timeZoneLabel() 579QString Addressee::timeZoneLabel()
579{ 580{
580 return i18n("Time Zone"); 581 return i18n("Time Zone");
581} 582}
582 583
583 584
584void Addressee::setGeo( const Geo &geo ) 585void Addressee::setGeo( const Geo &geo )
585{ 586{
586 if ( geo == mData->geo ) return; 587 if ( geo == mData->geo ) return;
587 detach(); 588 detach();
588 mData->empty = false; 589 mData->empty = false;
589 mData->geo = geo; 590 mData->geo = geo;
590} 591}
591 592
592Geo Addressee::geo() const 593Geo Addressee::geo() const
593{ 594{
594 return mData->geo; 595 return mData->geo;
595} 596}
596 597
597QString Addressee::geoLabel() 598QString Addressee::geoLabel()
598{ 599{
599 return i18n("Geographic Position"); 600 return i18n("Geographic Position");
600} 601}
601 602
602 603
603void Addressee::setTitle( const QString &title ) 604void Addressee::setTitle( const QString &title )
604{ 605{
605 if ( title == mData->title ) return; 606 if ( title == mData->title ) return;
606 detach(); 607 detach();
607 mData->empty = false; 608 mData->empty = false;
608 mData->title = title; 609 mData->title = title;
609} 610}
610 611
611QString Addressee::title() const 612QString Addressee::title() const
612{ 613{
613 return mData->title; 614 return mData->title;
614} 615}
615 616
616QString Addressee::titleLabel() 617QString Addressee::titleLabel()
617{ 618{
618 return i18n("Title"); 619 return i18n("Title");
619} 620}
620 621
621 622
622void Addressee::setRole( const QString &role ) 623void Addressee::setRole( const QString &role )
623{ 624{
624 if ( role == mData->role ) return; 625 if ( role == mData->role ) return;
625 detach(); 626 detach();
626 mData->empty = false; 627 mData->empty = false;
627 mData->role = role; 628 mData->role = role;
628} 629}
629 630
630QString Addressee::role() const 631QString Addressee::role() const
631{ 632{
632 return mData->role; 633 return mData->role;
633} 634}
634 635
635QString Addressee::roleLabel() 636QString Addressee::roleLabel()
636{ 637{
637 return i18n("Role"); 638 return i18n("Role");
638} 639}
639 640
640 641
641void Addressee::setOrganization( const QString &organization ) 642void Addressee::setOrganization( const QString &organization )
642{ 643{
643 if ( organization == mData->organization ) return; 644 if ( organization == mData->organization ) return;
644 detach(); 645 detach();
645 mData->empty = false; 646 mData->empty = false;
646 mData->organization = organization; 647 mData->organization = organization;
647} 648}
648 649
649QString Addressee::organization() const 650QString Addressee::organization() const
650{ 651{
651 return mData->organization; 652 return mData->organization;
652} 653}
653 654
654QString Addressee::organizationLabel() 655QString Addressee::organizationLabel()
655{ 656{
656 return i18n("Organization"); 657 return i18n("Organization");
657} 658}
658 659
659 660
660void Addressee::setNote( const QString &note ) 661void Addressee::setNote( const QString &note )
661{ 662{
662 if ( note == mData->note ) return; 663 if ( note == mData->note ) return;
663 detach(); 664 detach();
664 mData->empty = false; 665 mData->empty = false;
665 mData->note = note; 666 mData->note = note;
666} 667}
667 668
668QString Addressee::note() const 669QString Addressee::note() const
669{ 670{
670 return mData->note; 671 return mData->note;
671} 672}
672 673
673QString Addressee::noteLabel() 674QString Addressee::noteLabel()
674{ 675{
675 return i18n("Note"); 676 return i18n("Note");
676} 677}
677 678
678 679
679void Addressee::setProductId( const QString &productId ) 680void Addressee::setProductId( const QString &productId )
680{ 681{
681 if ( productId == mData->productId ) return; 682 if ( productId == mData->productId ) return;
682 detach(); 683 detach();
683 mData->empty = false; 684 mData->empty = false;
684 mData->productId = productId; 685 mData->productId = productId;
685} 686}
686 687
687QString Addressee::productId() const 688QString Addressee::productId() const
688{ 689{
689 return mData->productId; 690 return mData->productId;
690} 691}
691 692
692QString Addressee::productIdLabel() 693QString Addressee::productIdLabel()
693{ 694{
694 return i18n("Product Identifier"); 695 return i18n("Product Identifier");
695} 696}
696 697
697 698
698void Addressee::setRevision( const QDateTime &revision ) 699void Addressee::setRevision( const QDateTime &revision )
699{ 700{
700 if ( revision == mData->revision ) return; 701 if ( revision == mData->revision ) return;
701 detach(); 702 detach();
702 mData->empty = false; 703 mData->empty = false;
703 mData->revision = revision; 704 mData->revision = revision;
704} 705}
705 706
706QDateTime Addressee::revision() const 707QDateTime Addressee::revision() const
707{ 708{
708 return mData->revision; 709 return mData->revision;
709} 710}
710 711
711QString Addressee::revisionLabel() 712QString Addressee::revisionLabel()
712{ 713{
713 return i18n("Revision Date"); 714 return i18n("Revision Date");
714} 715}
715 716
716 717
717void Addressee::setSortString( const QString &sortString ) 718void Addressee::setSortString( const QString &sortString )
718{ 719{
719 if ( sortString == mData->sortString ) return; 720 if ( sortString == mData->sortString ) return;
720 detach(); 721 detach();
721 mData->empty = false; 722 mData->empty = false;
722 mData->sortString = sortString; 723 mData->sortString = sortString;
723} 724}
724 725
725QString Addressee::sortString() const 726QString Addressee::sortString() const
726{ 727{
727 return mData->sortString; 728 return mData->sortString;
728} 729}
729 730
730QString Addressee::sortStringLabel() 731QString Addressee::sortStringLabel()
731{ 732{
732 return i18n("Sort String"); 733 return i18n("Sort String");
733} 734}
734 735
735 736
736void Addressee::setUrl( const KURL &url ) 737void Addressee::setUrl( const KURL &url )
737{ 738{
738 if ( url == mData->url ) return; 739 if ( url == mData->url ) return;
739 detach(); 740 detach();
740 mData->empty = false; 741 mData->empty = false;
741 mData->url = url; 742 mData->url = url;
742} 743}
743 744
744KURL Addressee::url() const 745KURL Addressee::url() const
745{ 746{
746 return mData->url; 747 return mData->url;
747} 748}
748 749
749QString Addressee::urlLabel() 750QString Addressee::urlLabel()
750{ 751{
751 return i18n("URL"); 752 return i18n("URL");
752} 753}
753 754
754 755
755void Addressee::setSecrecy( const Secrecy &secrecy ) 756void Addressee::setSecrecy( const Secrecy &secrecy )
756{ 757{
757 if ( secrecy == mData->secrecy ) return; 758 if ( secrecy == mData->secrecy ) return;
758 detach(); 759 detach();
759 mData->empty = false; 760 mData->empty = false;
760 mData->secrecy = secrecy; 761 mData->secrecy = secrecy;
761} 762}
762 763
763Secrecy Addressee::secrecy() const 764Secrecy Addressee::secrecy() const
764{ 765{
765 return mData->secrecy; 766 return mData->secrecy;
766} 767}
767 768
768QString Addressee::secrecyLabel() 769QString Addressee::secrecyLabel()
769{ 770{
770 return i18n("Security Class"); 771 return i18n("Security Class");
771} 772}
772 773
773 774
774void Addressee::setLogo( const Picture &logo ) 775void Addressee::setLogo( const Picture &logo )
775{ 776{
776 if ( logo == mData->logo ) return; 777 if ( logo == mData->logo ) return;
777 detach(); 778 detach();
778 mData->empty = false; 779 mData->empty = false;
779 mData->logo = logo; 780 mData->logo = logo;
780} 781}
781 782
782Picture Addressee::logo() const 783Picture Addressee::logo() const
783{ 784{
784 return mData->logo; 785 return mData->logo;
785} 786}
786 787
787QString Addressee::logoLabel() 788QString Addressee::logoLabel()
788{ 789{
789 return i18n("Logo"); 790 return i18n("Logo");
790} 791}
791 792
792 793
793void Addressee::setPhoto( const Picture &photo ) 794void Addressee::setPhoto( const Picture &photo )
794{ 795{
795 if ( photo == mData->photo ) return; 796 if ( photo == mData->photo ) return;
796 detach(); 797 detach();
797 mData->empty = false; 798 mData->empty = false;
798 mData->photo = photo; 799 mData->photo = photo;
799} 800}
800 801
801Picture Addressee::photo() const 802Picture Addressee::photo() const
802{ 803{
803 return mData->photo; 804 return mData->photo;
804} 805}
805 806
806QString Addressee::photoLabel() 807QString Addressee::photoLabel()
807{ 808{
808 return i18n("Photo"); 809 return i18n("Photo");
809} 810}
810 811
811 812
812void Addressee::setSound( const Sound &sound ) 813void Addressee::setSound( const Sound &sound )
813{ 814{
814 if ( sound == mData->sound ) return; 815 if ( sound == mData->sound ) return;
815 detach(); 816 detach();
816 mData->empty = false; 817 mData->empty = false;
817 mData->sound = sound; 818 mData->sound = sound;
818} 819}
819 820
820Sound Addressee::sound() const 821Sound Addressee::sound() const
821{ 822{
822 return mData->sound; 823 return mData->sound;
823} 824}
824 825
825QString Addressee::soundLabel() 826QString Addressee::soundLabel()
826{ 827{
827 return i18n("Sound"); 828 return i18n("Sound");
828} 829}
829 830
830 831
831void Addressee::setAgent( const Agent &agent ) 832void Addressee::setAgent( const Agent &agent )
832{ 833{
833 if ( agent == mData->agent ) return; 834 if ( agent == mData->agent ) return;
834 detach(); 835 detach();
835 mData->empty = false; 836 mData->empty = false;
836 mData->agent = agent; 837 mData->agent = agent;
837} 838}
838 839
839Agent Addressee::agent() const 840Agent Addressee::agent() const
840{ 841{
841 return mData->agent; 842 return mData->agent;
842} 843}
843 844
844QString Addressee::agentLabel() 845QString Addressee::agentLabel()
845{ 846{
846 return i18n("Agent"); 847 return i18n("Agent");
847} 848}
848 849
849 850
850 851
851void Addressee::setNameFromString( const QString &str ) 852void Addressee::setNameFromString( const QString &str )
852{ 853{
853 setFormattedName( str ); 854 setFormattedName( str );
854 setName( str ); 855 setName( str );
855 856
856 static bool first = true; 857 static bool first = true;
857 static QStringList titles; 858 static QStringList titles;
858 static QStringList suffixes; 859 static QStringList suffixes;
859 static QStringList prefixes; 860 static QStringList prefixes;
860 861
861 if ( first ) { 862 if ( first ) {
862 first = false; 863 first = false;
863 titles += i18n( "Dr." ); 864 titles += i18n( "Dr." );
864 titles += i18n( "Miss" ); 865 titles += i18n( "Miss" );
865 titles += i18n( "Mr." ); 866 titles += i18n( "Mr." );
866 titles += i18n( "Mrs." ); 867 titles += i18n( "Mrs." );
867 titles += i18n( "Ms." ); 868 titles += i18n( "Ms." );
868 titles += i18n( "Prof." ); 869 titles += i18n( "Prof." );
869 870
870 suffixes += i18n( "I" ); 871 suffixes += i18n( "I" );
871 suffixes += i18n( "II" ); 872 suffixes += i18n( "II" );
872 suffixes += i18n( "III" ); 873 suffixes += i18n( "III" );
873 suffixes += i18n( "Jr." ); 874 suffixes += i18n( "Jr." );
874 suffixes += i18n( "Sr." ); 875 suffixes += i18n( "Sr." );
875 876
876 prefixes += "van"; 877 prefixes += "van";
877 prefixes += "von"; 878 prefixes += "von";
878 prefixes += "de"; 879 prefixes += "de";
879 880
880 KConfig config( locateLocal( "config", "kabcrc") ); 881 KConfig config( locateLocal( "config", "kabcrc") );
881 config.setGroup( "General" ); 882 config.setGroup( "General" );
882 titles += config.readListEntry( "Prefixes" ); 883 titles += config.readListEntry( "Prefixes" );
883 titles.remove( "" ); 884 titles.remove( "" );
884 prefixes += config.readListEntry( "Inclusions" ); 885 prefixes += config.readListEntry( "Inclusions" );
885 prefixes.remove( "" ); 886 prefixes.remove( "" );
886 suffixes += config.readListEntry( "Suffixes" ); 887 suffixes += config.readListEntry( "Suffixes" );
887 suffixes.remove( "" ); 888 suffixes.remove( "" );
888 } 889 }
889 890
890 // clear all name parts 891 // clear all name parts
891 setPrefix( "" ); 892 setPrefix( "" );
892 setGivenName( "" ); 893 setGivenName( "" );
893 setAdditionalName( "" ); 894 setAdditionalName( "" );
894 setFamilyName( "" ); 895 setFamilyName( "" );
895 setSuffix( "" ); 896 setSuffix( "" );
896 897
897 if ( str.isEmpty() ) 898 if ( str.isEmpty() )
898 return; 899 return;
899 900
900 int i = str.find(','); 901 int i = str.find(',');
901 if( i < 0 ) { 902 if( i < 0 ) {
902 QStringList parts = QStringList::split( " ", str ); 903 QStringList parts = QStringList::split( " ", str );
903 int leftOffset = 0; 904 int leftOffset = 0;
904 int rightOffset = parts.count() - 1; 905 int rightOffset = parts.count() - 1;
905 906
906 QString suffix; 907 QString suffix;
907 while ( rightOffset >= 0 ) { 908 while ( rightOffset >= 0 ) {
908 if ( suffixes.contains( parts[ rightOffset ] ) ) { 909 if ( suffixes.contains( parts[ rightOffset ] ) ) {
909 suffix.prepend(parts[ rightOffset ] + (suffix.isEmpty() ? "" : " ")); 910 suffix.prepend(parts[ rightOffset ] + (suffix.isEmpty() ? "" : " "));
910 rightOffset--; 911 rightOffset--;
911 } else 912 } else
912 break; 913 break;
913 } 914 }
914 setSuffix( suffix ); 915 setSuffix( suffix );
915 916
916 if ( rightOffset < 0 ) 917 if ( rightOffset < 0 )
917 return; 918 return;
918 919
919 if ( rightOffset - 1 >= 0 && prefixes.contains( parts[ rightOffset - 1 ].lower() ) ) { 920 if ( rightOffset - 1 >= 0 && prefixes.contains( parts[ rightOffset - 1 ].lower() ) ) {
920 setFamilyName( parts[ rightOffset - 1 ] + " " + parts[ rightOffset ] ); 921 setFamilyName( parts[ rightOffset - 1 ] + " " + parts[ rightOffset ] );
921 rightOffset--; 922 rightOffset--;
922 } else 923 } else
923 setFamilyName( parts[ rightOffset ] ); 924 setFamilyName( parts[ rightOffset ] );
924 925
925 QString prefix; 926 QString prefix;
926 while ( leftOffset < rightOffset ) { 927 while ( leftOffset < rightOffset ) {
927 if ( titles.contains( parts[ leftOffset ] ) ) { 928 if ( titles.contains( parts[ leftOffset ] ) ) {
928 prefix.append( ( prefix.isEmpty() ? "" : " ") + parts[ leftOffset ] ); 929 prefix.append( ( prefix.isEmpty() ? "" : " ") + parts[ leftOffset ] );
929 leftOffset++; 930 leftOffset++;
930 } else 931 } else
931 break; 932 break;
932 } 933 }
933 setPrefix( prefix ); 934 setPrefix( prefix );
934 935
935 if ( leftOffset < rightOffset ) { 936 if ( leftOffset < rightOffset ) {
936 setGivenName( parts[ leftOffset ] ); 937 setGivenName( parts[ leftOffset ] );
937 leftOffset++; 938 leftOffset++;
938 } 939 }
939 940
940 QString additionalName; 941 QString additionalName;
941 while ( leftOffset < rightOffset ) { 942 while ( leftOffset < rightOffset ) {
942 additionalName.append( ( additionalName.isEmpty() ? "" : " ") + parts[ leftOffset ] ); 943 additionalName.append( ( additionalName.isEmpty() ? "" : " ") + parts[ leftOffset ] );
943 leftOffset++; 944 leftOffset++;
944 } 945 }
945 setAdditionalName( additionalName ); 946 setAdditionalName( additionalName );
946 } else { 947 } else {
947 QString part1 = str.left( i ); 948 QString part1 = str.left( i );
948 QString part2 = str.mid( i + 1 ); 949 QString part2 = str.mid( i + 1 );
949 950
950 QStringList parts = QStringList::split( " ", part1 ); 951 QStringList parts = QStringList::split( " ", part1 );
951 int leftOffset = 0; 952 int leftOffset = 0;
952 int rightOffset = parts.count() - 1; 953 int rightOffset = parts.count() - 1;
953 954
954 QString suffix; 955 QString suffix;
955 while ( rightOffset >= 0 ) { 956 while ( rightOffset >= 0 ) {
956 if ( suffixes.contains( parts[ rightOffset ] ) ) { 957 if ( suffixes.contains( parts[ rightOffset ] ) ) {
957 suffix.prepend(parts[ rightOffset ] + (suffix.isEmpty() ? "" : " ")); 958 suffix.prepend(parts[ rightOffset ] + (suffix.isEmpty() ? "" : " "));
958 rightOffset--; 959 rightOffset--;
959 } else 960 } else
960 break; 961 break;
961 } 962 }
962 setSuffix( suffix ); 963 setSuffix( suffix );
963 964
964 if ( rightOffset - 1 >= 0 && prefixes.contains( parts[ rightOffset - 1 ].lower() ) ) { 965 if ( rightOffset - 1 >= 0 && prefixes.contains( parts[ rightOffset - 1 ].lower() ) ) {
965 setFamilyName( parts[ rightOffset - 1 ] + " " + parts[ rightOffset ] ); 966 setFamilyName( parts[ rightOffset - 1 ] + " " + parts[ rightOffset ] );
966 rightOffset--; 967 rightOffset--;
967 } else 968 } else
968 setFamilyName( parts[ rightOffset ] ); 969 setFamilyName( parts[ rightOffset ] );
969 970
970 QString prefix; 971 QString prefix;
971 while ( leftOffset < rightOffset ) { 972 while ( leftOffset < rightOffset ) {
972 if ( titles.contains( parts[ leftOffset ] ) ) { 973 if ( titles.contains( parts[ leftOffset ] ) ) {
973 prefix.append( ( prefix.isEmpty() ? "" : " ") + parts[ leftOffset ] ); 974 prefix.append( ( prefix.isEmpty() ? "" : " ") + parts[ leftOffset ] );
974 leftOffset++; 975 leftOffset++;
975 } else 976 } else
976 break; 977 break;
977 } 978 }
978 979
979 parts = QStringList::split( " ", part2 ); 980 parts = QStringList::split( " ", part2 );
980 981
981 leftOffset = 0; 982 leftOffset = 0;
982 rightOffset = parts.count(); 983 rightOffset = parts.count();
983 984
984 while ( leftOffset < rightOffset ) { 985 while ( leftOffset < rightOffset ) {
985 if ( titles.contains( parts[ leftOffset ] ) ) { 986 if ( titles.contains( parts[ leftOffset ] ) ) {
986 prefix.append( ( prefix.isEmpty() ? "" : " ") + parts[ leftOffset ] ); 987 prefix.append( ( prefix.isEmpty() ? "" : " ") + parts[ leftOffset ] );
987 leftOffset++; 988 leftOffset++;
988 } else 989 } else
989 break; 990 break;
990 } 991 }
991 setPrefix( prefix ); 992 setPrefix( prefix );
992 993
993 if ( leftOffset < rightOffset ) { 994 if ( leftOffset < rightOffset ) {
994 setGivenName( parts[ leftOffset ] ); 995 setGivenName( parts[ leftOffset ] );
995 leftOffset++; 996 leftOffset++;
996 } 997 }
997 998
998 QString additionalName; 999 QString additionalName;
999 while ( leftOffset < rightOffset ) { 1000 while ( leftOffset < rightOffset ) {
1000 additionalName.append( ( additionalName.isEmpty() ? "" : " ") + parts[ leftOffset ] ); 1001 additionalName.append( ( additionalName.isEmpty() ? "" : " ") + parts[ leftOffset ] );
1001 leftOffset++; 1002 leftOffset++;
1002 } 1003 }
1003 setAdditionalName( additionalName ); 1004 setAdditionalName( additionalName );
1004 } 1005 }
1005} 1006}
1006 1007
1007QString Addressee::realName() const 1008QString Addressee::realName() const
1008{ 1009{
1009 if ( !formattedName().isEmpty() ) 1010 if ( !formattedName().isEmpty() )
1010 return formattedName(); 1011 return formattedName();
1011 1012
1012 QString n = assembledName(); 1013 QString n = assembledName();
1013 1014
1014 if ( n.isEmpty() ) 1015 if ( n.isEmpty() )
1015 n = name(); 1016 n = name();
1016 1017
1017 return n; 1018 return n;
1018} 1019}
1019 1020
1020QString Addressee::assembledName() const 1021QString Addressee::assembledName() const
1021{ 1022{
1022 QString name = prefix() + " " + givenName() + " " + additionalName() + " " + 1023 QString name = prefix() + " " + givenName() + " " + additionalName() + " " +
1023 familyName() + " " + suffix(); 1024 familyName() + " " + suffix();
1024 1025
1025 return name.simplifyWhiteSpace(); 1026 return name.simplifyWhiteSpace();
1026} 1027}
1027 1028
1028QString Addressee::fullEmail( const QString &email ) const 1029QString Addressee::fullEmail( const QString &email ) const
1029{ 1030{
1030 QString e; 1031 QString e;
1031 if ( email.isNull() ) { 1032 if ( email.isNull() ) {
1032 e = preferredEmail(); 1033 e = preferredEmail();
1033 } else { 1034 } else {
1034 e = email; 1035 e = email;
1035 } 1036 }
1036 if ( e.isEmpty() ) return QString::null; 1037 if ( e.isEmpty() ) return QString::null;
1037 1038
1038 QString text; 1039 QString text;
1039 if ( realName().isEmpty() ) 1040 if ( realName().isEmpty() )
1040 text = e; 1041 text = e;
1041 else 1042 else
1042 text = assembledName() + " <" + e + ">"; 1043 text = assembledName() + " <" + e + ">";
1043 1044
1044 return text; 1045 return text;
1045} 1046}
1046 1047
1047void Addressee::insertEmail( const QString &email, bool preferred ) 1048void Addressee::insertEmail( const QString &email, bool preferred )
1048{ 1049{
1049 detach(); 1050 detach();
1050 1051
1051 QStringList::Iterator it = mData->emails.find( email ); 1052 QStringList::Iterator it = mData->emails.find( email );
1052 1053
1053 if ( it != mData->emails.end() ) { 1054 if ( it != mData->emails.end() ) {
1054 if ( !preferred || it == mData->emails.begin() ) return; 1055 if ( !preferred || it == mData->emails.begin() ) return;
1055 mData->emails.remove( it ); 1056 mData->emails.remove( it );
1056 mData->emails.prepend( email ); 1057 mData->emails.prepend( email );
1057 } else { 1058 } else {
1058 if ( preferred ) { 1059 if ( preferred ) {
1059 mData->emails.prepend( email ); 1060 mData->emails.prepend( email );
1060 } else { 1061 } else {
1061 mData->emails.append( email ); 1062 mData->emails.append( email );
1062 } 1063 }
1063 } 1064 }
1064} 1065}
1065 1066
1066void Addressee::removeEmail( const QString &email ) 1067void Addressee::removeEmail( const QString &email )
1067{ 1068{
1068 detach(); 1069 detach();
1069 1070
1070 QStringList::Iterator it = mData->emails.find( email ); 1071 QStringList::Iterator it = mData->emails.find( email );
1071 if ( it == mData->emails.end() ) return; 1072 if ( it == mData->emails.end() ) return;
1072 1073
1073 mData->emails.remove( it ); 1074 mData->emails.remove( it );
1074} 1075}
1075 1076
1076QString Addressee::preferredEmail() const 1077QString Addressee::preferredEmail() const
1077{ 1078{
1078 if ( mData->emails.count() == 0 ) return QString::null; 1079 if ( mData->emails.count() == 0 ) return QString::null;
1079 else return mData->emails.first(); 1080 else return mData->emails.first();
1080} 1081}
1081 1082
1082QStringList Addressee::emails() const 1083QStringList Addressee::emails() const
1083{ 1084{
1084 return mData->emails; 1085 return mData->emails;
1085} 1086}
1086void Addressee::setEmails( const QStringList& emails ) { 1087void Addressee::setEmails( const QStringList& emails ) {
1087 detach(); 1088 detach();
1088 mData->emails = emails; 1089 mData->emails = emails;
1089} 1090}
1090void Addressee::insertPhoneNumber( const PhoneNumber &phoneNumber ) 1091void Addressee::insertPhoneNumber( const PhoneNumber &phoneNumber )
1091{ 1092{
1092 detach(); 1093 detach();
1093 mData->empty = false; 1094 mData->empty = false;
1094 1095
1095 PhoneNumber::List::Iterator it; 1096 PhoneNumber::List::Iterator it;
1096 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) { 1097 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) {
1097 if ( (*it).id() == phoneNumber.id() ) { 1098 if ( (*it).id() == phoneNumber.id() ) {
1098 *it = phoneNumber; 1099 *it = phoneNumber;
1099 return; 1100 return;
1100 } 1101 }
1101 } 1102 }
1102 mData->phoneNumbers.append( phoneNumber ); 1103 mData->phoneNumbers.append( phoneNumber );
1103} 1104}
1104 1105
1105void Addressee::removePhoneNumber( const PhoneNumber &phoneNumber ) 1106void Addressee::removePhoneNumber( const PhoneNumber &phoneNumber )
1106{ 1107{
1107 detach(); 1108 detach();
1108 1109
1109 PhoneNumber::List::Iterator it; 1110 PhoneNumber::List::Iterator it;
1110 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) { 1111 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) {
1111 if ( (*it).id() == phoneNumber.id() ) { 1112 if ( (*it).id() == phoneNumber.id() ) {
1112 mData->phoneNumbers.remove( it ); 1113 mData->phoneNumbers.remove( it );
1113 return; 1114 return;
1114 } 1115 }
1115 } 1116 }
1116} 1117}
1117 1118
1118PhoneNumber Addressee::phoneNumber( int type ) const 1119PhoneNumber Addressee::phoneNumber( int type ) const
1119{ 1120{
1120 PhoneNumber phoneNumber( "", type ); 1121 PhoneNumber phoneNumber( "", type );
1121 PhoneNumber::List::ConstIterator it; 1122 PhoneNumber::List::ConstIterator it;
1122 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) { 1123 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) {
1123 if ( matchBinaryPattern( (*it).type(), type ) ) { 1124 if ( matchBinaryPattern( (*it).type(), type ) ) {
1124 if ( (*it).type() & PhoneNumber::Pref ) 1125 if ( (*it).type() & PhoneNumber::Pref )
1125 return (*it); 1126 return (*it);
1126 else if ( phoneNumber.number().isEmpty() ) 1127 else if ( phoneNumber.number().isEmpty() )
1127 phoneNumber = (*it); 1128 phoneNumber = (*it);
1128 } 1129 }
1129 } 1130 }
1130 1131
1131 return phoneNumber; 1132 return phoneNumber;
1132} 1133}
1133 1134
1134PhoneNumber::List Addressee::phoneNumbers() const 1135PhoneNumber::List Addressee::phoneNumbers() const
1135{ 1136{
1136 return mData->phoneNumbers; 1137 return mData->phoneNumbers;
1137} 1138}
1138 1139
1139PhoneNumber::List Addressee::phoneNumbers( int type ) const 1140PhoneNumber::List Addressee::phoneNumbers( int type ) const
1140{ 1141{
1141 PhoneNumber::List list; 1142 PhoneNumber::List list;
1142 1143
1143 PhoneNumber::List::ConstIterator it; 1144 PhoneNumber::List::ConstIterator it;
1144 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) { 1145 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) {
1145 if ( matchBinaryPattern( (*it).type(), type ) ) { 1146 if ( matchBinaryPattern( (*it).type(), type ) ) {
1146 list.append( *it ); 1147 list.append( *it );
1147 } 1148 }
1148 } 1149 }
1149 return list; 1150 return list;
1150} 1151}
1151 1152
1152PhoneNumber Addressee::findPhoneNumber( const QString &id ) const 1153PhoneNumber Addressee::findPhoneNumber( const QString &id ) const
1153{ 1154{
1154 PhoneNumber::List::ConstIterator it; 1155 PhoneNumber::List::ConstIterator it;
1155 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) { 1156 for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) {
1156 if ( (*it).id() == id ) { 1157 if ( (*it).id() == id ) {
1157 return *it; 1158 return *it;
1158 } 1159 }
1159 } 1160 }
1160 return PhoneNumber(); 1161 return PhoneNumber();
1161} 1162}
1162 1163
1163void Addressee::insertKey( const Key &key ) 1164void Addressee::insertKey( const Key &key )
1164{ 1165{
1165 detach(); 1166 detach();
1166 mData->empty = false; 1167 mData->empty = false;
1167 1168
1168 Key::List::Iterator it; 1169 Key::List::Iterator it;
1169 for( it = mData->keys.begin(); it != mData->keys.end(); ++it ) { 1170 for( it = mData->keys.begin(); it != mData->keys.end(); ++it ) {
1170 if ( (*it).id() == key.id() ) { 1171 if ( (*it).id() == key.id() ) {
1171 *it = key; 1172 *it = key;
1172 return; 1173 return;
1173 } 1174 }
1174 } 1175 }
1175 mData->keys.append( key ); 1176 mData->keys.append( key );
1176} 1177}
1177 1178
1178void Addressee::removeKey( const Key &key ) 1179void Addressee::removeKey( const Key &key )
1179{ 1180{
1180 detach(); 1181 detach();
1181 1182
1182 Key::List::Iterator it; 1183 Key::List::Iterator it;
1183 for( it = mData->keys.begin(); it != mData->keys.end(); ++it ) { 1184 for( it = mData->keys.begin(); it != mData->keys.end(); ++it ) {
1184 if ( (*it).id() == key.id() ) { 1185 if ( (*it).id() == key.id() ) {
1185 mData->keys.remove( key ); 1186 mData->keys.remove( key );
1186 return; 1187 return;
1187 } 1188 }
1188 } 1189 }
1189} 1190}
1190 1191
1191Key Addressee::key( int type, QString customTypeString ) const 1192Key Addressee::key( int type, QString customTypeString ) const
1192{ 1193{
1193 Key::List::ConstIterator it; 1194 Key::List::ConstIterator it;
1194 for( it = mData->keys.begin(); it != mData->keys.end(); ++it ) { 1195 for( it = mData->keys.begin(); it != mData->keys.end(); ++it ) {
1195 if ( (*it).type() == type ) { 1196 if ( (*it).type() == type ) {
1196 if ( type == Key::Custom ) { 1197 if ( type == Key::Custom ) {
1197 if ( customTypeString.isEmpty() ) { 1198 if ( customTypeString.isEmpty() ) {
1198 return *it; 1199 return *it;
1199 } else { 1200 } else {
1200 if ( (*it).customTypeString() == customTypeString ) 1201 if ( (*it).customTypeString() == customTypeString )
1201 return (*it); 1202 return (*it);
1202 } 1203 }
1203 } else { 1204 } else {
1204 return *it; 1205 return *it;
1205 } 1206 }
1206 } 1207 }
1207 } 1208 }
1208 return Key( QString(), type ); 1209 return Key( QString(), type );
1209} 1210}
1210void Addressee::setKeys( const Key::List& list ) { 1211void Addressee::setKeys( const Key::List& list ) {
1211 detach(); 1212 detach();
1212 mData->keys = list; 1213 mData->keys = list;
1213} 1214}
1214 1215
1215Key::List Addressee::keys() const 1216Key::List Addressee::keys() const
1216{ 1217{
1217 return mData->keys; 1218 return mData->keys;
1218} 1219}
1219 1220
1220Key::List Addressee::keys( int type, QString customTypeString ) const 1221Key::List Addressee::keys( int type, QString customTypeString ) const
1221{ 1222{
1222 Key::List list; 1223 Key::List list;
1223 1224
1224 Key::List::ConstIterator it; 1225 Key::List::ConstIterator it;
1225 for( it = mData->keys.begin(); it != mData->keys.end(); ++it ) { 1226 for( it = mData->keys.begin(); it != mData->keys.end(); ++it ) {
1226 if ( (*it).type() == type ) { 1227 if ( (*it).type() == type ) {
1227 if ( type == Key::Custom ) { 1228 if ( type == Key::Custom ) {
1228 if ( customTypeString.isEmpty() ) { 1229 if ( customTypeString.isEmpty() ) {
1229 list.append(*it); 1230 list.append(*it);
1230 } else { 1231 } else {
1231 if ( (*it).customTypeString() == customTypeString ) 1232 if ( (*it).customTypeString() == customTypeString )
1232 list.append(*it); 1233 list.append(*it);
1233 } 1234 }
1234 } else { 1235 } else {
1235 list.append(*it); 1236 list.append(*it);
1236 } 1237 }
1237 } 1238 }
1238 } 1239 }
1239 return list; 1240 return list;
1240} 1241}
1241 1242
1242Key Addressee::findKey( const QString &id ) const 1243Key Addressee::findKey( const QString &id ) const
1243{ 1244{
1244 Key::List::ConstIterator it; 1245 Key::List::ConstIterator it;
1245 for( it = mData->keys.begin(); it != mData->keys.end(); ++it ) { 1246 for( it = mData->keys.begin(); it != mData->keys.end(); ++it ) {
1246 if ( (*it).id() == id ) { 1247 if ( (*it).id() == id ) {
1247 return *it; 1248 return *it;
1248 } 1249 }
1249 } 1250 }
1250 return Key(); 1251 return Key();
1251} 1252}
1252 1253
1253QString Addressee::asString() const 1254QString Addressee::asString() const
1254{ 1255{
1255 return "Smith, agent Smith..."; 1256 return "Smith, agent Smith...";
1256} 1257}
1257 1258
1258void Addressee::dump() const 1259void Addressee::dump() const
1259{ 1260{
1260 return; 1261 return;
1261 kdDebug(5700) << "Addressee {" << endl; 1262 kdDebug(5700) << "Addressee {" << endl;
1262 1263
1263 kdDebug(5700) << " Uid: '" << uid() << "'" << endl; 1264 kdDebug(5700) << " Uid: '" << uid() << "'" << endl;
1264 1265
1265 kdDebug(5700) << " Name: '" << name() << "'" << endl; 1266 kdDebug(5700) << " Name: '" << name() << "'" << endl;
1266 kdDebug(5700) << " FormattedName: '" << formattedName() << "'" << endl; 1267 kdDebug(5700) << " FormattedName: '" << formattedName() << "'" << endl;
1267 kdDebug(5700) << " FamilyName: '" << familyName() << "'" << endl; 1268 kdDebug(5700) << " FamilyName: '" << familyName() << "'" << endl;
1268 kdDebug(5700) << " GivenName: '" << givenName() << "'" << endl; 1269 kdDebug(5700) << " GivenName: '" << givenName() << "'" << endl;
1269 kdDebug(5700) << " AdditionalName: '" << additionalName() << "'" << endl; 1270 kdDebug(5700) << " AdditionalName: '" << additionalName() << "'" << endl;
1270 kdDebug(5700) << " Prefix: '" << prefix() << "'" << endl; 1271 kdDebug(5700) << " Prefix: '" << prefix() << "'" << endl;
1271 kdDebug(5700) << " Suffix: '" << suffix() << "'" << endl; 1272 kdDebug(5700) << " Suffix: '" << suffix() << "'" << endl;
1272 kdDebug(5700) << " NickName: '" << nickName() << "'" << endl; 1273 kdDebug(5700) << " NickName: '" << nickName() << "'" << endl;
1273 kdDebug(5700) << " Birthday: '" << birthday().toString() << "'" << endl; 1274 kdDebug(5700) << " Birthday: '" << birthday().toString() << "'" << endl;
1274 kdDebug(5700) << " Mailer: '" << mailer() << "'" << endl; 1275 kdDebug(5700) << " Mailer: '" << mailer() << "'" << endl;
1275 kdDebug(5700) << " TimeZone: '" << timeZone().asString() << "'" << endl; 1276 kdDebug(5700) << " TimeZone: '" << timeZone().asString() << "'" << endl;
1276 kdDebug(5700) << " Geo: '" << geo().asString() << "'" << endl; 1277 kdDebug(5700) << " Geo: '" << geo().asString() << "'" << endl;
1277 kdDebug(5700) << " Title: '" << title() << "'" << endl; 1278 kdDebug(5700) << " Title: '" << title() << "'" << endl;
1278 kdDebug(5700) << " Role: '" << role() << "'" << endl; 1279 kdDebug(5700) << " Role: '" << role() << "'" << endl;
1279 kdDebug(5700) << " Organization: '" << organization() << "'" << endl; 1280 kdDebug(5700) << " Organization: '" << organization() << "'" << endl;
1280 kdDebug(5700) << " Note: '" << note() << "'" << endl; 1281 kdDebug(5700) << " Note: '" << note() << "'" << endl;
1281 kdDebug(5700) << " ProductId: '" << productId() << "'" << endl; 1282 kdDebug(5700) << " ProductId: '" << productId() << "'" << endl;
1282 kdDebug(5700) << " Revision: '" << revision().toString() << "'" << endl; 1283 kdDebug(5700) << " Revision: '" << revision().toString() << "'" << endl;
1283 kdDebug(5700) << " SortString: '" << sortString() << "'" << endl; 1284 kdDebug(5700) << " SortString: '" << sortString() << "'" << endl;
1284 kdDebug(5700) << " Url: '" << url().url() << "'" << endl; 1285 kdDebug(5700) << " Url: '" << url().url() << "'" << endl;
1285 kdDebug(5700) << " Secrecy: '" << secrecy().asString() << "'" << endl; 1286 kdDebug(5700) << " Secrecy: '" << secrecy().asString() << "'" << endl;
1286 kdDebug(5700) << " Logo: '" << logo().asString() << "'" << endl; 1287 kdDebug(5700) << " Logo: '" << logo().asString() << "'" << endl;
1287 kdDebug(5700) << " Photo: '" << photo().asString() << "'" << endl; 1288 kdDebug(5700) << " Photo: '" << photo().asString() << "'" << endl;
1288 kdDebug(5700) << " Sound: '" << sound().asString() << "'" << endl; 1289 kdDebug(5700) << " Sound: '" << sound().asString() << "'" << endl;
1289 kdDebug(5700) << " Agent: '" << agent().asString() << "'" << endl; 1290 kdDebug(5700) << " Agent: '" << agent().asString() << "'" << endl;
1290 1291
1291 kdDebug(5700) << " Emails {" << endl; 1292 kdDebug(5700) << " Emails {" << endl;
1292 QStringList e = emails(); 1293 QStringList e = emails();
1293 QStringList::ConstIterator it; 1294 QStringList::ConstIterator it;
1294 for( it = e.begin(); it != e.end(); ++it ) { 1295 for( it = e.begin(); it != e.end(); ++it ) {
1295 kdDebug(5700) << " " << (*it) << endl; 1296 kdDebug(5700) << " " << (*it) << endl;
1296 } 1297 }
1297 kdDebug(5700) << " }" << endl; 1298 kdDebug(5700) << " }" << endl;
1298 1299
1299 kdDebug(5700) << " PhoneNumbers {" << endl; 1300 kdDebug(5700) << " PhoneNumbers {" << endl;
1300 PhoneNumber::List p = phoneNumbers(); 1301 PhoneNumber::List p = phoneNumbers();
1301 PhoneNumber::List::ConstIterator it2; 1302 PhoneNumber::List::ConstIterator it2;
1302 for( it2 = p.begin(); it2 != p.end(); ++it2 ) { 1303 for( it2 = p.begin(); it2 != p.end(); ++it2 ) {
1303 kdDebug(5700) << " Type: " << int((*it2).type()) << " Number: " << (*it2).number() << endl; 1304 kdDebug(5700) << " Type: " << int((*it2).type()) << " Number: " << (*it2).number() << endl;
1304 } 1305 }
1305 kdDebug(5700) << " }" << endl; 1306 kdDebug(5700) << " }" << endl;
1306 1307
1307 Address::List a = addresses(); 1308 Address::List a = addresses();
1308 Address::List::ConstIterator it3; 1309 Address::List::ConstIterator it3;
1309 for( it3 = a.begin(); it3 != a.end(); ++it3 ) { 1310 for( it3 = a.begin(); it3 != a.end(); ++it3 ) {
1310 (*it3).dump(); 1311 (*it3).dump();
1311 } 1312 }
1312 1313
1313 kdDebug(5700) << " Keys {" << endl; 1314 kdDebug(5700) << " Keys {" << endl;
1314 Key::List k = keys(); 1315 Key::List k = keys();
1315 Key::List::ConstIterator it4; 1316 Key::List::ConstIterator it4;
1316 for( it4 = k.begin(); it4 != k.end(); ++it4 ) { 1317 for( it4 = k.begin(); it4 != k.end(); ++it4 ) {
1317 kdDebug(5700) << " Type: " << int((*it4).type()) << 1318 kdDebug(5700) << " Type: " << int((*it4).type()) <<
1318 " Key: " << (*it4).textData() << 1319 " Key: " << (*it4).textData() <<
1319 " CustomString: " << (*it4).customTypeString() << endl; 1320 " CustomString: " << (*it4).customTypeString() << endl;
1320 } 1321 }
1321 kdDebug(5700) << " }" << endl; 1322 kdDebug(5700) << " }" << endl;
1322 1323
1323 kdDebug(5700) << "}" << endl; 1324 kdDebug(5700) << "}" << endl;
1324} 1325}
1325 1326
1326 1327
1327void Addressee::insertAddress( const Address &address ) 1328void Addressee::insertAddress( const Address &address )
1328{ 1329{
1329 detach(); 1330 detach();
1330 mData->empty = false; 1331 mData->empty = false;
1331 1332
1332 Address::List::Iterator it; 1333 Address::List::Iterator it;
1333 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) { 1334 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) {
1334 if ( (*it).id() == address.id() ) { 1335 if ( (*it).id() == address.id() ) {
1335 *it = address; 1336 *it = address;
1336 return; 1337 return;
1337 } 1338 }
1338 } 1339 }
1339 mData->addresses.append( address ); 1340 mData->addresses.append( address );
1340} 1341}
1341 1342
1342void Addressee::removeAddress( const Address &address ) 1343void Addressee::removeAddress( const Address &address )
1343{ 1344{
1344 detach(); 1345 detach();
1345 1346
1346 Address::List::Iterator it; 1347 Address::List::Iterator it;
1347 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) { 1348 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) {
1348 if ( (*it).id() == address.id() ) { 1349 if ( (*it).id() == address.id() ) {
1349 mData->addresses.remove( it ); 1350 mData->addresses.remove( it );
1350 return; 1351 return;
1351 } 1352 }
1352 } 1353 }
1353} 1354}
1354 1355
1355Address Addressee::address( int type ) const 1356Address Addressee::address( int type ) const
1356{ 1357{
1357 Address address( type ); 1358 Address address( type );
1358 Address::List::ConstIterator it; 1359 Address::List::ConstIterator it;
1359 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) { 1360 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) {
1360 if ( matchBinaryPattern( (*it).type(), type ) ) { 1361 if ( matchBinaryPattern( (*it).type(), type ) ) {
1361 if ( (*it).type() & Address::Pref ) 1362 if ( (*it).type() & Address::Pref )
1362 return (*it); 1363 return (*it);
1363 else if ( address.isEmpty() ) 1364 else if ( address.isEmpty() )
1364 address = (*it); 1365 address = (*it);
1365 } 1366 }
1366 } 1367 }
1367 1368
1368 return address; 1369 return address;
1369} 1370}
1370 1371
1371Address::List Addressee::addresses() const 1372Address::List Addressee::addresses() const
1372{ 1373{
1373 return mData->addresses; 1374 return mData->addresses;
1374} 1375}
1375 1376
1376Address::List Addressee::addresses( int type ) const 1377Address::List Addressee::addresses( int type ) const
1377{ 1378{
1378 Address::List list; 1379 Address::List list;
1379 1380
1380 Address::List::ConstIterator it; 1381 Address::List::ConstIterator it;
1381 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) { 1382 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) {
1382 if ( matchBinaryPattern( (*it).type(), type ) ) { 1383 if ( matchBinaryPattern( (*it).type(), type ) ) {
1383 list.append( *it ); 1384 list.append( *it );
1384 } 1385 }
1385 } 1386 }
1386 1387
1387 return list; 1388 return list;
1388} 1389}
1389 1390
1390Address Addressee::findAddress( const QString &id ) const 1391Address Addressee::findAddress( const QString &id ) const
1391{ 1392{
1392 Address::List::ConstIterator it; 1393 Address::List::ConstIterator it;
1393 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) { 1394 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) {
1394 if ( (*it).id() == id ) { 1395 if ( (*it).id() == id ) {
1395 return *it; 1396 return *it;
1396 } 1397 }
1397 } 1398 }
1398 return Address(); 1399 return Address();
1399} 1400}
1400 1401
1401void Addressee::insertCategory( const QString &c ) 1402void Addressee::insertCategory( const QString &c )
1402{ 1403{
1403 detach(); 1404 detach();
1404 mData->empty = false; 1405 mData->empty = false;
1405 1406
1406 if ( mData->categories.contains( c ) ) return; 1407 if ( mData->categories.contains( c ) ) return;
1407 1408
1408 mData->categories.append( c ); 1409 mData->categories.append( c );
1409} 1410}
1410 1411
1411void Addressee::removeCategory( const QString &c ) 1412void Addressee::removeCategory( const QString &c )
1412{ 1413{
1413 detach(); 1414 detach();
1414 1415
1415 QStringList::Iterator it = mData->categories.find( c ); 1416 QStringList::Iterator it = mData->categories.find( c );
1416 if ( it == mData->categories.end() ) return; 1417 if ( it == mData->categories.end() ) return;
1417 1418
1418 mData->categories.remove( it ); 1419 mData->categories.remove( it );
1419} 1420}
1420 1421
1421bool Addressee::hasCategory( const QString &c ) const 1422bool Addressee::hasCategory( const QString &c ) const
1422{ 1423{
1423 return ( mData->categories.contains( c ) ); 1424 return ( mData->categories.contains( c ) );
1424} 1425}
1425 1426
1426void Addressee::setCategories( const QStringList &c ) 1427void Addressee::setCategories( const QStringList &c )
1427{ 1428{
1428 detach(); 1429 detach();
1429 mData->empty = false; 1430 mData->empty = false;
1430 1431
1431 mData->categories = c; 1432 mData->categories = c;
1432} 1433}
1433 1434
1434QStringList Addressee::categories() const 1435QStringList Addressee::categories() const
1435{ 1436{
1436 return mData->categories; 1437 return mData->categories;
1437} 1438}
1438 1439
1439void Addressee::insertCustom( const QString &app, const QString &name, 1440void Addressee::insertCustom( const QString &app, const QString &name,
1440 const QString &value ) 1441 const QString &value )
1441{ 1442{
1442 if ( value.isNull() || name.isEmpty() || app.isEmpty() ) return; 1443 if ( value.isNull() || name.isEmpty() || app.isEmpty() ) return;
1443 1444
1444 detach(); 1445 detach();
1445 mData->empty = false; 1446 mData->empty = false;
1446 1447
1447 QString qualifiedName = app + "-" + name + ":"; 1448 QString qualifiedName = app + "-" + name + ":";
1448 1449
1449 QStringList::Iterator it; 1450 QStringList::Iterator it;
1450 for( it = mData->custom.begin(); it != mData->custom.end(); ++it ) { 1451 for( it = mData->custom.begin(); it != mData->custom.end(); ++it ) {
1451 if ( (*it).startsWith( qualifiedName ) ) { 1452 if ( (*it).startsWith( qualifiedName ) ) {
1452 (*it) = qualifiedName + value; 1453 (*it) = qualifiedName + value;
1453 return; 1454 return;
1454 } 1455 }
1455 } 1456 }
1456 1457
1457 mData->custom.append( qualifiedName + value ); 1458 mData->custom.append( qualifiedName + value );
1458} 1459}
1459 1460
1460void Addressee::removeCustom( const QString &app, const QString &name) 1461void Addressee::removeCustom( const QString &app, const QString &name)
1461{ 1462{
1462 detach(); 1463 detach();
1463 1464
1464 QString qualifiedName = app + "-" + name + ":"; 1465 QString qualifiedName = app + "-" + name + ":";
1465 1466
1466 QStringList::Iterator it; 1467 QStringList::Iterator it;
1467 for( it = mData->custom.begin(); it != mData->custom.end(); ++it ) { 1468 for( it = mData->custom.begin(); it != mData->custom.end(); ++it ) {
1468 if ( (*it).startsWith( qualifiedName ) ) { 1469 if ( (*it).startsWith( qualifiedName ) ) {
1469 mData->custom.remove( it ); 1470 mData->custom.remove( it );
1470 return; 1471 return;
1471 } 1472 }
1472 } 1473 }
1473} 1474}
1474 1475
1475QString Addressee::custom( const QString &app, const QString &name ) const 1476QString Addressee::custom( const QString &app, const QString &name ) const
1476{ 1477{
1477 QString qualifiedName = app + "-" + name + ":"; 1478 QString qualifiedName = app + "-" + name + ":";
1478 QString value; 1479 QString value;
1479 1480
1480 QStringList::ConstIterator it; 1481 QStringList::ConstIterator it;
1481 for( it = mData->custom.begin(); it != mData->custom.end(); ++it ) { 1482 for( it = mData->custom.begin(); it != mData->custom.end(); ++it ) {
1482 if ( (*it).startsWith( qualifiedName ) ) { 1483 if ( (*it).startsWith( qualifiedName ) ) {
1483 value = (*it).mid( (*it).find( ":" ) + 1 ); 1484 value = (*it).mid( (*it).find( ":" ) + 1 );
1484 break; 1485 break;
1485 } 1486 }
1486 } 1487 }
1487 1488
1488 return value; 1489 return value;
1489} 1490}
1490 1491
1491void Addressee::setCustoms( const QStringList &l ) 1492void Addressee::setCustoms( const QStringList &l )
1492{ 1493{
1493 detach(); 1494 detach();
1494 mData->empty = false; 1495 mData->empty = false;
1495 1496
1496 mData->custom = l; 1497 mData->custom = l;
1497} 1498}
1498 1499
1499QStringList Addressee::customs() const 1500QStringList Addressee::customs() const
1500{ 1501{
1501 return mData->custom; 1502 return mData->custom;
1502} 1503}
1503 1504
1504void Addressee::parseEmailAddress( const QString &rawEmail, QString &fullName, 1505void Addressee::parseEmailAddress( const QString &rawEmail, QString &fullName,
1505 QString &email) 1506 QString &email)
1506{ 1507{
1507 int startPos, endPos, len; 1508 int startPos, endPos, len;
1508 QString partA, partB, result; 1509 QString partA, partB, result;
1509 char endCh = '>'; 1510 char endCh = '>';
1510 1511
1511 startPos = rawEmail.find('<'); 1512 startPos = rawEmail.find('<');
1512 if (startPos < 0) 1513 if (startPos < 0)
1513 { 1514 {
1514 startPos = rawEmail.find('('); 1515 startPos = rawEmail.find('(');
1515 endCh = ')'; 1516 endCh = ')';
1516 } 1517 }
1517 if (startPos < 0) 1518 if (startPos < 0)
1518 { 1519 {
1519 // We couldn't find any separators, so we assume the whole string 1520 // We couldn't find any separators, so we assume the whole string
1520 // is the email address 1521 // is the email address
1521 email = rawEmail; 1522 email = rawEmail;
1522 fullName = ""; 1523 fullName = "";
1523 } 1524 }
1524 else 1525 else
1525 { 1526 {
1526 // We have a start position, try to find an end 1527 // We have a start position, try to find an end
1527 endPos = rawEmail.find(endCh, startPos+1); 1528 endPos = rawEmail.find(endCh, startPos+1);
1528 1529
1529 if (endPos < 0) 1530 if (endPos < 0)
1530 { 1531 {
1531 // We couldn't find the end of the email address. We can only 1532 // We couldn't find the end of the email address. We can only
1532 // assume the entire string is the email address. 1533 // assume the entire string is the email address.
1533 email = rawEmail; 1534 email = rawEmail;
1534 fullName = ""; 1535 fullName = "";
1535 } 1536 }
1536 else 1537 else
1537 { 1538 {
1538 // We have a start and end to the email address 1539 // We have a start and end to the email address
1539 1540
1540 // Grab the name part 1541 // Grab the name part
1541 fullName = rawEmail.left(startPos).stripWhiteSpace(); 1542 fullName = rawEmail.left(startPos).stripWhiteSpace();
1542 1543
1543 // grab the email part 1544 // grab the email part
1544 email = rawEmail.mid(startPos+1, endPos-startPos-1).stripWhiteSpace(); 1545 email = rawEmail.mid(startPos+1, endPos-startPos-1).stripWhiteSpace();
1545 1546
1546 // Check that we do not have any extra characters on the end of the 1547 // Check that we do not have any extra characters on the end of the
1547 // strings 1548 // strings
1548 len = fullName.length(); 1549 len = fullName.length();
1549 if (fullName[0]=='"' && fullName[len-1]=='"') 1550 if (fullName[0]=='"' && fullName[len-1]=='"')
1550 fullName = fullName.mid(1, len-2); 1551 fullName = fullName.mid(1, len-2);
1551 else if (fullName[0]=='<' && fullName[len-1]=='>') 1552 else if (fullName[0]=='<' && fullName[len-1]=='>')
1552 fullName = fullName.mid(1, len-2); 1553 fullName = fullName.mid(1, len-2);
1553 else if (fullName[0]=='(' && fullName[len-1]==')') 1554 else if (fullName[0]=='(' && fullName[len-1]==')')
1554 fullName = fullName.mid(1, len-2); 1555 fullName = fullName.mid(1, len-2);
1555 } 1556 }
1556 } 1557 }
1557} 1558}
1558 1559
1559void Addressee::setResource( Resource *resource ) 1560void Addressee::setResource( Resource *resource )
1560{ 1561{
1561 detach(); 1562 detach();
1562 mData->resource = resource; 1563 mData->resource = resource;
1563} 1564}
1564 1565
1565Resource *Addressee::resource() const 1566Resource *Addressee::resource() const
1566{ 1567{
1567 return mData->resource; 1568 return mData->resource;
1568} 1569}
1569 1570
1570//US 1571//US
1571QString Addressee::resourceLabel() 1572QString Addressee::resourceLabel()
1572{ 1573{
1573 return i18n("Resource"); 1574 return i18n("Resource");
1574} 1575}
1575 1576
1576void Addressee::setChanged( bool value ) 1577void Addressee::setChanged( bool value )
1577{ 1578{
1578 detach(); 1579 detach();
1579 mData->changed = value; 1580 mData->changed = value;
1580} 1581}
1581 1582
1582bool Addressee::changed() const 1583bool Addressee::changed() const
1583{ 1584{
1584 return mData->changed; 1585 return mData->changed;
1585} 1586}
1586 1587
1587QDataStream &KABC::operator<<( QDataStream &s, const Addressee &a ) 1588QDataStream &KABC::operator<<( QDataStream &s, const Addressee &a )
1588{ 1589{
1589 if (!a.mData) return s; 1590 if (!a.mData) return s;
1590 1591
1591 s << a.uid(); 1592 s << a.uid();
1592 1593
1593 s << a.mData->name; 1594 s << a.mData->name;
1594 s << a.mData->formattedName; 1595 s << a.mData->formattedName;
1595 s << a.mData->familyName; 1596 s << a.mData->familyName;
1596 s << a.mData->givenName; 1597 s << a.mData->givenName;
1597 s << a.mData->additionalName; 1598 s << a.mData->additionalName;
1598 s << a.mData->prefix; 1599 s << a.mData->prefix;
1599 s << a.mData->suffix; 1600 s << a.mData->suffix;
1600 s << a.mData->nickName; 1601 s << a.mData->nickName;
1601 s << a.mData->birthday; 1602 s << a.mData->birthday;
1602 s << a.mData->mailer; 1603 s << a.mData->mailer;
1603 s << a.mData->timeZone; 1604 s << a.mData->timeZone;
1604 s << a.mData->geo; 1605 s << a.mData->geo;
1605 s << a.mData->title; 1606 s << a.mData->title;
1606 s << a.mData->role; 1607 s << a.mData->role;
1607 s << a.mData->organization; 1608 s << a.mData->organization;
1608 s << a.mData->note; 1609 s << a.mData->note;
1609 s << a.mData->productId; 1610 s << a.mData->productId;
1610 s << a.mData->revision; 1611 s << a.mData->revision;
1611 s << a.mData->sortString; 1612 s << a.mData->sortString;
1612 s << a.mData->url; 1613 s << a.mData->url;
1613 s << a.mData->secrecy; 1614 s << a.mData->secrecy;
1614 s << a.mData->logo; 1615 s << a.mData->logo;
1615 s << a.mData->photo; 1616 s << a.mData->photo;
1616 s << a.mData->sound; 1617 s << a.mData->sound;
1617 s << a.mData->agent; 1618 s << a.mData->agent;
1618 s << a.mData->phoneNumbers; 1619 s << a.mData->phoneNumbers;
1619 s << a.mData->addresses; 1620 s << a.mData->addresses;
1620 s << a.mData->emails; 1621 s << a.mData->emails;
1621 s << a.mData->categories; 1622 s << a.mData->categories;
1622 s << a.mData->custom; 1623 s << a.mData->custom;
1623 s << a.mData->keys; 1624 s << a.mData->keys;
1624 return s; 1625 return s;
1625} 1626}
1626 1627
1627QDataStream &KABC::operator>>( QDataStream &s, Addressee &a ) 1628QDataStream &KABC::operator>>( QDataStream &s, Addressee &a )
1628{ 1629{
1629 if (!a.mData) return s; 1630 if (!a.mData) return s;
1630 1631
1631 s >> a.mData->uid; 1632 s >> a.mData->uid;
1632 1633
1633 s >> a.mData->name; 1634 s >> a.mData->name;
1634 s >> a.mData->formattedName; 1635 s >> a.mData->formattedName;
1635 s >> a.mData->familyName; 1636 s >> a.mData->familyName;
1636 s >> a.mData->givenName; 1637 s >> a.mData->givenName;
1637 s >> a.mData->additionalName; 1638 s >> a.mData->additionalName;
1638 s >> a.mData->prefix; 1639 s >> a.mData->prefix;
1639 s >> a.mData->suffix; 1640 s >> a.mData->suffix;
1640 s >> a.mData->nickName; 1641 s >> a.mData->nickName;
1641 s >> a.mData->birthday; 1642 s >> a.mData->birthday;
1642 s >> a.mData->mailer; 1643 s >> a.mData->mailer;
1643 s >> a.mData->timeZone; 1644 s >> a.mData->timeZone;
1644 s >> a.mData->geo; 1645 s >> a.mData->geo;
1645 s >> a.mData->title; 1646 s >> a.mData->title;
1646 s >> a.mData->role; 1647 s >> a.mData->role;
1647 s >> a.mData->organization; 1648 s >> a.mData->organization;
1648 s >> a.mData->note; 1649 s >> a.mData->note;
1649 s >> a.mData->productId; 1650 s >> a.mData->productId;
1650 s >> a.mData->revision; 1651 s >> a.mData->revision;
1651 s >> a.mData->sortString; 1652 s >> a.mData->sortString;
1652 s >> a.mData->url; 1653 s >> a.mData->url;
1653 s >> a.mData->secrecy; 1654 s >> a.mData->secrecy;
1654 s >> a.mData->logo; 1655 s >> a.mData->logo;
1655 s >> a.mData->photo; 1656 s >> a.mData->photo;
1656 s >> a.mData->sound; 1657 s >> a.mData->sound;
1657 s >> a.mData->agent; 1658 s >> a.mData->agent;
1658 s >> a.mData->phoneNumbers; 1659 s >> a.mData->phoneNumbers;
1659 s >> a.mData->addresses; 1660 s >> a.mData->addresses;
1660 s >> a.mData->emails; 1661 s >> a.mData->emails;
1661 s >> a.mData->categories; 1662 s >> a.mData->categories;
1662 s >> a.mData->custom; 1663 s >> a.mData->custom;
1663 s >> a.mData->keys; 1664 s >> a.mData->keys;
1664 1665
1665 a.mData->empty = false; 1666 a.mData->empty = false;
1666 1667
1667 return s; 1668 return s;
1668} 1669}
1669 1670
1670bool matchBinaryPattern( int value, int pattern ) 1671bool matchBinaryPattern( int value, int pattern )
1671{ 1672{
1672 /** 1673 /**
1673 We want to match all telephonnumbers/addresses which have the bits in the 1674 We want to match all telephonnumbers/addresses which have the bits in the
1674 pattern set. More are allowed. 1675 pattern set. More are allowed.
1675 if pattern == 0 we have a special handling, then we want only those with 1676 if pattern == 0 we have a special handling, then we want only those with
1676 exactly no bit set. 1677 exactly no bit set.
1677 */ 1678 */
1678 if ( pattern == 0 ) 1679 if ( pattern == 0 )
1679 return ( value == 0 ); 1680 return ( value == 0 );
1680 else 1681 else
1681 return ( pattern == ( pattern & value ) ); 1682 return ( pattern == ( pattern & value ) );
1682} 1683}