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