summaryrefslogtreecommitdiff
path: root/library/backend/contact.cpp
Unidiff
Diffstat (limited to 'library/backend/contact.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--library/backend/contact.cpp107
1 files changed, 61 insertions, 46 deletions
diff --git a/library/backend/contact.cpp b/library/backend/contact.cpp
index a5f10ab..b10b19a 100644
--- a/library/backend/contact.cpp
+++ b/library/backend/contact.cpp
@@ -1,119 +1,121 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2001 Trolltech AS. All rights reserved. 2** Copyright (C) 2001 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of Qtopia Environment. 4** This file is part of Qtopia Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20 20
21#define QTOPIA_INTERNAL_CONTACT_MRE
22
21#include "contact.h" 23#include "contact.h"
22#include "vobject_p.h" 24#include "vobject_p.h"
23#include "qfiledirect_p.h" 25#include "qfiledirect_p.h"
24 26
25#include <qpe/stringutil.h> 27#include <qpe/stringutil.h>
26#include <qpe/timeconversion.h> 28#include <qpe/timeconversion.h>
27 29
28#include <qobject.h> 30#include <qobject.h>
29#include <qregexp.h> 31#include <qregexp.h>
30#include <qstylesheet.h> 32#include <qstylesheet.h>
31#include <qfileinfo.h> 33#include <qfileinfo.h>
32 34
33#include <stdio.h> 35#include <stdio.h>
34 36
35Qtopia::UidGen Contact::sUidGen( Qtopia::UidGen::Qtopia ); 37Qtopia::UidGen Contact::sUidGen( Qtopia::UidGen::Qtopia );
36 38
37Contact::Contact() 39Contact::Contact()
38 : Record(), mMap(), d( 0 ) 40 : Record(), mMap(), d( 0 )
39{ 41{
40} 42}
41 43
42Contact::Contact( const QMap<int, QString> &fromMap ) : 44Contact::Contact( const QMap<int, QString> &fromMap ) :
43 Record(), mMap( fromMap ), d( 0 ) 45 Record(), mMap( fromMap ), d( 0 )
44{ 46{
45 QString cats = mMap[ Qtopia::AddressCategory ]; 47 QString cats = mMap[ Qtopia::AddressCategory ];
46 if ( !cats.isEmpty() ) 48 if ( !cats.isEmpty() )
47 setCategories( idsFromString( cats ) ); 49 setCategories( idsFromString( cats ) );
48 QString uidStr = find( Qtopia::AddressUid ); 50 QString uidStr = find( Qtopia::AddressUid );
49 if ( uidStr.isEmpty() ) 51 if ( uidStr.isEmpty() )
50 setUid( uidGen().generate() ); 52 setUid( uidGen().generate() );
51 else 53 else
52 setUid( uidStr.toInt() ); 54 setUid( uidStr.toInt() );
53} 55}
54 56
55Contact::~Contact() 57Contact::~Contact()
56{ 58{
57} 59}
58 60
59QMap<int, QString> Contact::toMap() const 61QMap<int, QString> Contact::toMap() const
60{ 62{
61 QMap<int, QString> map = mMap; 63 QMap<int, QString> map = mMap;
62 map.insert( Qtopia::AddressCategory, idsToString( categories() )); 64 map.insert( Qtopia::AddressCategory, idsToString( categories() ));
63 return map; 65 return map;
64} 66}
65 67
66/*! 68/*!
67 Returns a rich text formatted QString of the Contact. 69 Returns a rich text formatted QString of the Contact.
68*/ 70*/
69QString Contact::toRichText() const 71QString Contact::toRichText() const
70{ 72{
71 QString text; 73 QString text;
72 QString value, comp, state; 74 QString value, comp, state;
73 75
74 // name, jobtitle and company 76 // name, jobtitle and company
75 if ( !(value = fullName()).isEmpty() ) 77 if ( !(value = fullName()).isEmpty() )
76 text += "<b>" + Qtopia::escapeString(value) + "</b><br>"; 78 text += "<b>" + Qtopia::escapeString(value) + "</b><br>";
77 if ( !(value = jobTitle()).isEmpty() ) 79 if ( !(value = jobTitle()).isEmpty() )
78 text += Qtopia::escapeString(value) + "<br>"; 80 text += Qtopia::escapeString(value) + "<br>";
79 81
80 comp = company(); 82 comp = company();
81 if ( !(value = department()).isEmpty() ) { 83 if ( !(value = department()).isEmpty() ) {
82 text += Qtopia::escapeString(value); 84 text += Qtopia::escapeString(value);
83 if ( comp ) 85 if ( comp )
84 text += ", "; 86 text += ", ";
85 else 87 else
86 text += "<br>"; 88 text += "<br>";
87 } 89 }
88 if ( !comp.isEmpty() ) 90 if ( !comp.isEmpty() )
89 text += Qtopia::escapeString(comp) + "<br>"; 91 text += Qtopia::escapeString(comp) + "<br>";
90 92
91 // business address 93 // business address
92 if ( !businessStreet().isEmpty() || !businessCity().isEmpty() || 94 if ( !businessStreet().isEmpty() || !businessCity().isEmpty() ||
93 !businessZip().isEmpty() || !businessCountry().isEmpty() ) { 95 !businessZip().isEmpty() || !businessCountry().isEmpty() ) {
94 text += "<br>"; 96 text += "<br>";
95 text += QObject::tr( "<b>Work Address:</b>" ); 97 text += QObject::tr( "<b>Work Address:</b>" );
96 text += "<br>"; 98 text += "<br>";
97 } 99 }
98 100
99 if ( !(value = businessStreet()).isEmpty() ) 101 if ( !(value = businessStreet()).isEmpty() )
100 text += Qtopia::escapeString(value) + "<br>"; 102 text += Qtopia::escapeString(value) + "<br>";
101 state = businessState(); 103 state = businessState();
102 if ( !(value = businessCity()).isEmpty() ) { 104 if ( !(value = businessCity()).isEmpty() ) {
103 text += Qtopia::escapeString(value); 105 text += Qtopia::escapeString(value);
104 if ( state ) 106 if ( state )
105 text += ", " + Qtopia::escapeString(state); 107 text += ", " + Qtopia::escapeString(state);
106 text += "<br>"; 108 text += "<br>";
107 } else if ( !state.isEmpty() ) 109 } else if ( !state.isEmpty() )
108 text += Qtopia::escapeString(state) + "<br>"; 110 text += Qtopia::escapeString(state) + "<br>";
109 if ( !(value = businessZip()).isEmpty() ) 111 if ( !(value = businessZip()).isEmpty() )
110 text += Qtopia::escapeString(value) + "<br>"; 112 text += Qtopia::escapeString(value) + "<br>";
111 if ( !(value = businessCountry()).isEmpty() ) 113 if ( !(value = businessCountry()).isEmpty() )
112 text += Qtopia::escapeString(value) + "<br>"; 114 text += Qtopia::escapeString(value) + "<br>";
113 115
114 // home address 116 // home address
115 if ( !homeStreet().isEmpty() || !homeCity().isEmpty() || 117 if ( !homeStreet().isEmpty() || !homeCity().isEmpty() ||
116 !homeZip().isEmpty() || !homeCountry().isEmpty() ) { 118 !homeZip().isEmpty() || !homeCountry().isEmpty() ) {
117 text += "<br>"; 119 text += "<br>";
118 text += QObject::tr( "<b>Home Address:</b>" ); 120 text += QObject::tr( "<b>Home Address:</b>" );
119 text += "<br>"; 121 text += "<br>";
@@ -293,617 +295,630 @@ QString Contact::fullName() const
293 QString title = find( Qtopia::Title ); 295 QString title = find( Qtopia::Title );
294 QString firstName = find( Qtopia::FirstName ); 296 QString firstName = find( Qtopia::FirstName );
295 QString middleName = find( Qtopia::MiddleName ); 297 QString middleName = find( Qtopia::MiddleName );
296 QString lastName = find( Qtopia::LastName ); 298 QString lastName = find( Qtopia::LastName );
297 QString suffix = find( Qtopia::Suffix ); 299 QString suffix = find( Qtopia::Suffix );
298 300
299 QString name = title; 301 QString name = title;
300 if ( !firstName.isEmpty() ) { 302 if ( !firstName.isEmpty() ) {
301 if ( !name.isEmpty() ) 303 if ( !name.isEmpty() )
302 name += " "; 304 name += " ";
303 name += firstName; 305 name += firstName;
304 } 306 }
305 if ( !middleName.isEmpty() ) { 307 if ( !middleName.isEmpty() ) {
306 if ( !name.isEmpty() ) 308 if ( !name.isEmpty() )
307 name += " "; 309 name += " ";
308 name += middleName; 310 name += middleName;
309 } 311 }
310 if ( !lastName.isEmpty() ) { 312 if ( !lastName.isEmpty() ) {
311 if ( !name.isEmpty() ) 313 if ( !name.isEmpty() )
312 name += " "; 314 name += " ";
313 name += lastName; 315 name += lastName;
314 } 316 }
315 if ( !suffix.isEmpty() ) { 317 if ( !suffix.isEmpty() ) {
316 if ( !name.isEmpty() ) 318 if ( !name.isEmpty() )
317 name += " "; 319 name += " ";
318 name += suffix; 320 name += suffix;
319 } 321 }
320 return name.simplifyWhiteSpace(); 322 return name.simplifyWhiteSpace();
321} 323}
322 324
323QStringList Contact::childrenList() const 325QStringList Contact::childrenList() const
324{ 326{
325 return QStringList::split( " ", find( Qtopia::Children ) ); 327 return QStringList::split( " ", find( Qtopia::Children ) );
326} 328}
327 329
328QStringList Contact::emailList() const 330QStringList Contact::emailList() const
329{ 331{
330 return QStringList::split( ";", find( Qtopia::Emails ) ); 332 return QStringList::split( ";", find( Qtopia::Emails ) );
331} 333}
332 334
333void Contact::setFileAs() 335void Contact::setFileAs()
334{ 336{
335 QString lastName, firstName, middleName, fileas; 337 QString lastName, firstName, middleName, fileas;
336 338
337 lastName = find( Qtopia::LastName ); 339 lastName = find( Qtopia::LastName );
338 firstName = find( Qtopia::FirstName ); 340 firstName = find( Qtopia::FirstName );
339 middleName = find( Qtopia::MiddleName ); 341 middleName = find( Qtopia::MiddleName );
340 if ( !lastName.isEmpty() && !firstName.isEmpty() 342 if ( !lastName.isEmpty() && !firstName.isEmpty()
341 && !middleName.isEmpty() ) 343 && !middleName.isEmpty() )
342 fileas = lastName + ", " + firstName + " " + middleName; 344 fileas = lastName + ", " + firstName + " " + middleName;
343 else if ( !lastName.isEmpty() && !firstName.isEmpty() ) 345 else if ( !lastName.isEmpty() && !firstName.isEmpty() )
344 fileas = lastName + ", " + firstName; 346 fileas = lastName + ", " + firstName;
345 else if ( !lastName.isEmpty() || !firstName.isEmpty() || 347 else if ( !lastName.isEmpty() || !firstName.isEmpty() ||
346 !middleName.isEmpty() ) 348 !middleName.isEmpty() )
347 fileas = firstName + ( firstName.isEmpty() ? "" : " " ) 349 fileas = firstName + ( firstName.isEmpty() ? "" : " " )
348 + middleName + ( middleName.isEmpty() ? "" : " " ) 350 + middleName + ( middleName.isEmpty() ? "" : " " )
349 + lastName; 351 + lastName;
350 352
351 replace( Qtopia::FileAs, fileas ); 353 replace( Qtopia::FileAs, fileas );
352} 354}
353 355
354void Contact::save( QString &buf ) const 356void Contact::save( QString &buf ) const
355{ 357{
356 static const QStringList SLFIELDS = fields(); 358 static const QStringList SLFIELDS = fields();
357 // I'm expecting "<Contact " in front of this... 359 // I'm expecting "<Contact " in front of this...
358 for ( QMap<int, QString>::ConstIterator it = mMap.begin(); 360 for ( QMap<int, QString>::ConstIterator it = mMap.begin();
359 it != mMap.end(); ++it ) { 361 it != mMap.end(); ++it ) {
360 const QString &value = it.data(); 362 const QString &value = it.data();
361 int key = it.key(); 363 int key = it.key();
362 if ( !value.isEmpty() ) { 364 if ( !value.isEmpty() ) {
363 if ( key == Qtopia::AddressCategory || key == Qtopia::AddressUid) 365 if ( key == Qtopia::AddressCategory || key == Qtopia::AddressUid)
364 continue; 366 continue;
365 367
366 key -= Qtopia::AddressCategory+1; 368 key -= Qtopia::AddressCategory+1;
367 buf += SLFIELDS[key]; 369 buf += SLFIELDS[key];
368 buf += "=\"" + Qtopia::escapeString(value) + "\" "; 370 buf += "=\"" + Qtopia::escapeString(value) + "\" ";
369 } 371 }
370 } 372 }
371 buf += customToXml(); 373 buf += customToXml();
372 if ( categories().count() > 0 ) 374 if ( categories().count() > 0 )
373 buf += "Categories=\"" + idsToString( categories() ) + "\" "; 375 buf += "Categories=\"" + idsToString( categories() ) + "\" ";
374 buf += "Uid=\"" + QString::number( uid() ) + "\" "; 376 buf += "Uid=\"" + QString::number( uid() ) + "\" ";
375 // You need to close this yourself 377 // You need to close this yourself
376} 378}
377 379
378QStringList Contact::fields() 380QStringList Contact::fields()
379{ 381{
380 QStringList list; 382 QStringList list;
381 383
382 list.append( "Title" ); // Not Used! 384 list.append( "Title" ); // Not Used!
383 list.append( "FirstName" ); 385 list.append( "FirstName" );
384 list.append( "MiddleName" ); 386 list.append( "MiddleName" );
385 list.append( "LastName" ); 387 list.append( "LastName" );
386 list.append( "Suffix" ); 388 list.append( "Suffix" );
387 list.append( "FileAs" ); 389 list.append( "FileAs" );
388 390
391 list.append( "JobTitle" );
392 list.append( "Department" );
393 list.append( "Company" );
394 list.append( "BusinessPhone" );
395 list.append( "BusinessFax" );
396 list.append( "BusinessMobile" );
397
389 list.append( "DefaultEmail" ); 398 list.append( "DefaultEmail" );
390 list.append( "Emails" ); 399 list.append( "Emails" );
391 400
392 list.append( "HomeStreet" );
393 list.append( "HomeCity" );
394 list.append( "HomeState" );
395 list.append( "HomeZip" );
396 list.append( "HomeCountry" );
397 list.append( "HomePhone" ); 401 list.append( "HomePhone" );
398 list.append( "HomeFax" ); 402 list.append( "HomeFax" );
399 list.append( "HomeMobile" ); 403 list.append( "HomeMobile" );
400 list.append( "HomeWebPage" );
401 404
402 list.append( "Company" );
403 list.append( "BusinessStreet" ); 405 list.append( "BusinessStreet" );
404 list.append( "BusinessCity" ); 406 list.append( "BusinessCity" );
405 list.append( "BusinessState" ); 407 list.append( "BusinessState" );
406 list.append( "BusinessZip" ); 408 list.append( "BusinessZip" );
407 list.append( "BusinessCountry" ); 409 list.append( "BusinessCountry" );
410 list.append( "BusinessPager" );
408 list.append( "BusinessWebPage" ); 411 list.append( "BusinessWebPage" );
409 list.append( "JobTitle" ); 412
410 list.append( "Department" );
411 list.append( "Office" ); 413 list.append( "Office" );
412 list.append( "BusinessPhone" );
413 list.append( "BusinessFax" );
414 list.append( "BusinessMobile" );
415 list.append( "BusinessPager" );
416 list.append( "Profession" ); 414 list.append( "Profession" );
417 list.append( "Assistant" ); 415 list.append( "Assistant" );
418 list.append( "Manager" ); 416 list.append( "Manager" );
419 417
418 list.append( "HomeStreet" );
419 list.append( "HomeCity" );
420 list.append( "HomeState" );
421 list.append( "HomeZip" );
422 list.append( "HomeCountry" );
423 list.append( "HomeWebPage" );
424
420 list.append( "Spouse" ); 425 list.append( "Spouse" );
421 list.append( "Gender" ); 426 list.append( "Gender" );
422 list.append( "Birthday" ); 427 list.append( "Birthday" );
423 list.append( "Anniversary" ); 428 list.append( "Anniversary" );
424 list.append( "Nickname" ); 429 list.append( "Nickname" );
425
426 list.append( "Children" ); 430 list.append( "Children" );
431
427 list.append( "Notes" ); 432 list.append( "Notes" );
433 list.append( "Groups" );
428 434
429 return list; 435 return list;
430} 436}
431 437
432QStringList Contact::trfields() 438QStringList Contact::trfields()
433{ 439{
434 QStringList list; 440 QStringList list;
435 441
436 list.append( QObject::tr( "Name Title") ); 442 list.append( QObject::tr( "Name Title") );
437 list.append( QObject::tr( "First Name" ) ); 443 list.append( QObject::tr( "First Name" ) );
438 list.append( QObject::tr( "Middle Name" ) ); 444 list.append( QObject::tr( "Middle Name" ) );
439 list.append( QObject::tr( "Last Name" ) ); 445 list.append( QObject::tr( "Last Name" ) );
440 list.append( QObject::tr( "Suffix" ) ); 446 list.append( QObject::tr( "Suffix" ) );
441 list.append( QObject::tr( "File As" ) ); 447 list.append( QObject::tr( "File As" ) );
442 448
449 list.append( QObject::tr( "Job Title" ) );
450 list.append( QObject::tr( "Department" ) );
451 list.append( QObject::tr( "Company" ) );
452 list.append( QObject::tr( "Business Phone" ) );
453 list.append( QObject::tr( "Business Fax" ) );
454 list.append( QObject::tr( "Business Mobile" ) );
455
443 list.append( QObject::tr( "Default Email" ) ); 456 list.append( QObject::tr( "Default Email" ) );
444 list.append( QObject::tr( "Emails" ) ); 457 list.append( QObject::tr( "Emails" ) );
445 458
446 list.append( QObject::tr( "Home Street" ) );
447 list.append( QObject::tr( "Home City" ) );
448 list.append( QObject::tr( "Home State" ) );
449 list.append( QObject::tr( "Home Zip" ) );
450 list.append( QObject::tr( "Home Country" ) );
451 list.append( QObject::tr( "Home Phone" ) ); 459 list.append( QObject::tr( "Home Phone" ) );
452 list.append( QObject::tr( "Home Fax" ) ); 460 list.append( QObject::tr( "Home Fax" ) );
453 list.append( QObject::tr( "Home Mobile" ) ); 461 list.append( QObject::tr( "Home Mobile" ) );
454 list.append( QObject::tr( "Home Web Page" ) );
455 462
456 list.append( QObject::tr( "Company" ) );
457 list.append( QObject::tr( "Business Street" ) ); 463 list.append( QObject::tr( "Business Street" ) );
458 list.append( QObject::tr( "Business City" ) ); 464 list.append( QObject::tr( "Business City" ) );
459 list.append( QObject::tr( "Business State" ) ); 465 list.append( QObject::tr( "Business State" ) );
460 list.append( QObject::tr( "Business Zip" ) ); 466 list.append( QObject::tr( "Business Zip" ) );
461 list.append( QObject::tr( "Business Country" ) ); 467 list.append( QObject::tr( "Business Country" ) );
468 list.append( QObject::tr( "Business Pager" ) );
462 list.append( QObject::tr( "Business WebPage" ) ); 469 list.append( QObject::tr( "Business WebPage" ) );
463 list.append( QObject::tr( "Job Title" ) ); 470
464 list.append( QObject::tr( "Department" ) );
465 list.append( QObject::tr( "Office" ) ); 471 list.append( QObject::tr( "Office" ) );
466 list.append( QObject::tr( "Business Phone" ) );
467 list.append( QObject::tr( "Business Fax" ) );
468 list.append( QObject::tr( "Business Mobile" ) );
469 list.append( QObject::tr( "Business Pager" ) );
470 list.append( QObject::tr( "Profession" ) ); 472 list.append( QObject::tr( "Profession" ) );
471 list.append( QObject::tr( "Assistant" ) ); 473 list.append( QObject::tr( "Assistant" ) );
472 list.append( QObject::tr( "Manager" ) ); 474 list.append( QObject::tr( "Manager" ) );
473 475
476 list.append( QObject::tr( "Home Street" ) );
477 list.append( QObject::tr( "Home City" ) );
478 list.append( QObject::tr( "Home State" ) );
479 list.append( QObject::tr( "Home Zip" ) );
480 list.append( QObject::tr( "Home Country" ) );
481 list.append( QObject::tr( "Home Web Page" ) );
482
474 list.append( QObject::tr( "Spouse" ) ); 483 list.append( QObject::tr( "Spouse" ) );
475 list.append( QObject::tr( "Gender" ) ); 484 list.append( QObject::tr( "Gender" ) );
476 list.append( QObject::tr( "Birthday" ) ); 485 list.append( QObject::tr( "Birthday" ) );
477 list.append( QObject::tr( "Anniversary" ) ); 486 list.append( QObject::tr( "Anniversary" ) );
478 list.append( QObject::tr( "Nickname" ) ); 487 list.append( QObject::tr( "Nickname" ) );
479
480 list.append( QObject::tr( "Children" ) ); 488 list.append( QObject::tr( "Children" ) );
489
481 list.append( QObject::tr( "Notes" ) ); 490 list.append( QObject::tr( "Notes" ) );
491 list.append( QObject::tr( "Groups" ) );
482 492
483 return list; 493 return list;
484} 494}
485 495
486void Contact::setEmails( const QString &v ) 496void Contact::setEmails( const QString &v )
487{ 497{
488 replace( Qtopia::Emails, v ); 498 replace( Qtopia::Emails, v );
489 if ( v.isEmpty() ) 499 if ( v.isEmpty() )
490 setDefaultEmail( QString::null ); 500 setDefaultEmail( QString::null );
491} 501}
492 502
493void Contact::setChildren( const QString &v ) 503void Contact::setChildren( const QString &v )
494{ 504{
495 replace( Qtopia::Children, v ); 505 replace( Qtopia::Children, v );
496} 506}
497 507
498// vcard conversion code 508// vcard conversion code
499static inline VObject *safeAddPropValue( VObject *o, const char *prop, const QString &value ) 509static inline VObject *safeAddPropValue( VObject *o, const char *prop, const QString &value )
500{ 510{
501 VObject *ret = 0; 511 VObject *ret = 0;
502 if ( o && !value.isEmpty() ) 512 if ( o && !value.isEmpty() )
503 ret = addPropValue( o, prop, value.latin1() ); 513 ret = addPropValue( o, prop, value.latin1() );
504 return ret; 514 return ret;
505} 515}
506 516
507static inline VObject *safeAddProp( VObject *o, const char *prop) 517static inline VObject *safeAddProp( VObject *o, const char *prop)
508{ 518{
509 VObject *ret = 0; 519 VObject *ret = 0;
510 if ( o ) 520 if ( o )
511 ret = addProp( o, prop ); 521 ret = addProp( o, prop );
512 return ret; 522 return ret;
513} 523}
514 524
515static VObject *createVObject( const Contact &c ) 525static VObject *createVObject( const Contact &c )
516{ 526{
517 VObject *vcard = newVObject( VCCardProp ); 527 VObject *vcard = newVObject( VCCardProp );
518 safeAddPropValue( vcard, VCVersionProp, "2.1" ); 528 safeAddPropValue( vcard, VCVersionProp, "2.1" );
519 safeAddPropValue( vcard, VCLastRevisedProp, TimeConversion::toISO8601( QDateTime::currentDateTime() ) ); 529 safeAddPropValue( vcard, VCLastRevisedProp, TimeConversion::toISO8601( QDateTime::currentDateTime() ) );
520 safeAddPropValue( vcard, VCUniqueStringProp, QString::number(c.uid()) ); 530 safeAddPropValue( vcard, VCUniqueStringProp, QString::number(c.uid()) );
521 531
522 // full name 532 // full name
523 safeAddPropValue( vcard, VCFullNameProp, c.fullName() ); 533 safeAddPropValue( vcard, VCFullNameProp, c.fullName() );
524 534
525 // name properties 535 // name properties
526 VObject *name = safeAddProp( vcard, VCNameProp ); 536 VObject *name = safeAddProp( vcard, VCNameProp );
527 safeAddPropValue( name, VCFamilyNameProp, c.lastName() ); 537 safeAddPropValue( name, VCFamilyNameProp, c.lastName() );
528 safeAddPropValue( name, VCGivenNameProp, c.firstName() ); 538 safeAddPropValue( name, VCGivenNameProp, c.firstName() );
529 safeAddPropValue( name, VCAdditionalNamesProp, c.middleName() ); 539 safeAddPropValue( name, VCAdditionalNamesProp, c.middleName() );
530 safeAddPropValue( name, VCNamePrefixesProp, c.title() ); 540 safeAddPropValue( name, VCNamePrefixesProp, c.title() );
531 safeAddPropValue( name, VCNameSuffixesProp, c.suffix() ); 541 safeAddPropValue( name, VCNameSuffixesProp, c.suffix() );
532 542
533 // home properties 543 // home properties
534 VObject *home_adr= safeAddProp( vcard, VCAdrProp ); 544 VObject *home_adr= safeAddProp( vcard, VCAdrProp );
535 safeAddProp( home_adr, VCHomeProp ); 545 safeAddProp( home_adr, VCHomeProp );
536 safeAddPropValue( home_adr, VCStreetAddressProp, c.homeStreet() ); 546 safeAddPropValue( home_adr, VCStreetAddressProp, c.homeStreet() );
537 safeAddPropValue( home_adr, VCCityProp, c.homeCity() ); 547 safeAddPropValue( home_adr, VCCityProp, c.homeCity() );
538 safeAddPropValue( home_adr, VCRegionProp, c.homeState() ); 548 safeAddPropValue( home_adr, VCRegionProp, c.homeState() );
539 safeAddPropValue( home_adr, VCPostalCodeProp, c.homeZip() ); 549 safeAddPropValue( home_adr, VCPostalCodeProp, c.homeZip() );
540 safeAddPropValue( home_adr, VCCountryNameProp, c.homeCountry() ); 550 safeAddPropValue( home_adr, VCCountryNameProp, c.homeCountry() );
541 551
542 VObject *home_phone = safeAddPropValue( vcard, VCTelephoneProp, c.homePhone() ); 552 VObject *home_phone = safeAddPropValue( vcard, VCTelephoneProp, c.homePhone() );
543 safeAddProp( home_phone, VCHomeProp ); 553 safeAddProp( home_phone, VCHomeProp );
544 home_phone = safeAddPropValue( vcard, VCTelephoneProp, c.homeMobile() ); 554 home_phone = safeAddPropValue( vcard, VCTelephoneProp, c.homeMobile() );
545 safeAddProp( home_phone, VCHomeProp ); 555 safeAddProp( home_phone, VCHomeProp );
546 safeAddProp( home_phone, VCCellularProp ); 556 safeAddProp( home_phone, VCCellularProp );
547 home_phone = safeAddPropValue( vcard, VCTelephoneProp, c.homeFax() ); 557 home_phone = safeAddPropValue( vcard, VCTelephoneProp, c.homeFax() );
548 safeAddProp( home_phone, VCHomeProp ); 558 safeAddProp( home_phone, VCHomeProp );
549 safeAddProp( home_phone, VCFaxProp ); 559 safeAddProp( home_phone, VCFaxProp );
550 560
551 VObject *url = safeAddPropValue( vcard, VCURLProp, c.homeWebpage() ); 561 VObject *url = safeAddPropValue( vcard, VCURLProp, c.homeWebpage() );
552 safeAddProp( url, VCHomeProp ); 562 safeAddProp( url, VCHomeProp );
553 563
554 // work properties 564 // work properties
555 VObject *work_adr= safeAddProp( vcard, VCAdrProp ); 565 VObject *work_adr= safeAddProp( vcard, VCAdrProp );
556 safeAddProp( work_adr, VCWorkProp ); 566 safeAddProp( work_adr, VCWorkProp );
557 safeAddPropValue( work_adr, VCStreetAddressProp, c.businessStreet() ); 567 safeAddPropValue( work_adr, VCStreetAddressProp, c.businessStreet() );
558 safeAddPropValue( work_adr, VCCityProp, c.businessCity() ); 568 safeAddPropValue( work_adr, VCCityProp, c.businessCity() );
559 safeAddPropValue( work_adr, VCRegionProp, c.businessState() ); 569 safeAddPropValue( work_adr, VCRegionProp, c.businessState() );
560 safeAddPropValue( work_adr, VCPostalCodeProp, c.businessZip() ); 570 safeAddPropValue( work_adr, VCPostalCodeProp, c.businessZip() );
561 safeAddPropValue( work_adr, VCCountryNameProp, c.businessCountry() ); 571 safeAddPropValue( work_adr, VCCountryNameProp, c.businessCountry() );
562 572
563 VObject *work_phone = safeAddPropValue( vcard, VCTelephoneProp, c.businessPhone() ); 573 VObject *work_phone = safeAddPropValue( vcard, VCTelephoneProp, c.businessPhone() );
564 safeAddProp( work_phone, VCWorkProp ); 574 safeAddProp( work_phone, VCWorkProp );
565 work_phone = safeAddPropValue( vcard, VCTelephoneProp, c.businessMobile() ); 575 work_phone = safeAddPropValue( vcard, VCTelephoneProp, c.businessMobile() );
566 safeAddProp( work_phone, VCWorkProp ); 576 safeAddProp( work_phone, VCWorkProp );
567 safeAddProp( work_phone, VCCellularProp ); 577 safeAddProp( work_phone, VCCellularProp );
568 work_phone = safeAddPropValue( vcard, VCTelephoneProp, c.businessFax() ); 578 work_phone = safeAddPropValue( vcard, VCTelephoneProp, c.businessFax() );
569 safeAddProp( work_phone, VCWorkProp ); 579 safeAddProp( work_phone, VCWorkProp );
570 safeAddProp( work_phone, VCFaxProp ); 580 safeAddProp( work_phone, VCFaxProp );
571 work_phone = safeAddPropValue( vcard, VCTelephoneProp, c.businessPager() ); 581 work_phone = safeAddPropValue( vcard, VCTelephoneProp, c.businessPager() );
572 safeAddProp( work_phone, VCWorkProp ); 582 safeAddProp( work_phone, VCWorkProp );
573 safeAddProp( work_phone, VCPagerProp ); 583 safeAddProp( work_phone, VCPagerProp );
574 584
575 url = safeAddPropValue( vcard, VCURLProp, c.businessWebpage() ); 585 url = safeAddPropValue( vcard, VCURLProp, c.businessWebpage() );
576 safeAddProp( url, VCWorkProp ); 586 safeAddProp( url, VCWorkProp );
577 587
578 VObject *title = safeAddPropValue( vcard, VCTitleProp, c.jobTitle() ); 588 VObject *title = safeAddPropValue( vcard, VCTitleProp, c.jobTitle() );
579 safeAddProp( title, VCWorkProp ); 589 safeAddProp( title, VCWorkProp );
580 590
581 591
582 QStringList emails = c.emailList(); 592 QStringList emails = c.emailList();
583 emails.prepend( c.defaultEmail() ); 593 emails.prepend( c.defaultEmail() );
584 for( QStringList::Iterator it = emails.begin(); it != emails.end(); ++it ) { 594 for( QStringList::Iterator it = emails.begin(); it != emails.end(); ++it ) {
585 VObject *email = safeAddPropValue( vcard, VCEmailAddressProp, *it ); 595 VObject *email = safeAddPropValue( vcard, VCEmailAddressProp, *it );
586 safeAddProp( email, VCInternetProp ); 596 safeAddProp( email, VCInternetProp );
587 } 597 }
588 598
589 safeAddPropValue( vcard, VCNoteProp, c.notes() ); 599 safeAddPropValue( vcard, VCNoteProp, c.notes() );
590 600
591 safeAddPropValue( vcard, VCBirthDateProp, c.birthday() ); 601 safeAddPropValue( vcard, VCBirthDateProp, c.birthday() );
592 602
593 if ( !c.company().isEmpty() || !c.department().isEmpty() || !c.office().isEmpty() ) { 603 if ( !c.company().isEmpty() || !c.department().isEmpty() || !c.office().isEmpty() ) {
594 VObject *org = safeAddProp( vcard, VCOrgProp ); 604 VObject *org = safeAddProp( vcard, VCOrgProp );
595 safeAddPropValue( org, VCOrgNameProp, c.company() ); 605 safeAddPropValue( org, VCOrgNameProp, c.company() );
596 safeAddPropValue( org, VCOrgUnitProp, c.department() ); 606 safeAddPropValue( org, VCOrgUnitProp, c.department() );
597 safeAddPropValue( org, VCOrgUnit2Prop, c.office() ); 607 safeAddPropValue( org, VCOrgUnit2Prop, c.office() );
598 } 608 }
599 609
600 // some values we have to export as custom fields 610 // some values we have to export as custom fields
601 safeAddPropValue( vcard, "X-Qtopia-Profession", c.profession() ); 611 safeAddPropValue( vcard, "X-Qtopia-Profession", c.profession() );
602 safeAddPropValue( vcard, "X-Qtopia-Manager", c.manager() ); 612 safeAddPropValue( vcard, "X-Qtopia-Manager", c.manager() );
603 safeAddPropValue( vcard, "X-Qtopia-Assistant", c.assistant() ); 613 safeAddPropValue( vcard, "X-Qtopia-Assistant", c.assistant() );
604 614
605 safeAddPropValue( vcard, "X-Qtopia-Spouse", c.spouse() ); 615 safeAddPropValue( vcard, "X-Qtopia-Spouse", c.spouse() );
606 safeAddPropValue( vcard, "X-Qtopia-Gender", c.gender() ); 616 safeAddPropValue( vcard, "X-Qtopia-Gender", c.gender() );
607 safeAddPropValue( vcard, "X-Qtopia-Anniversary", c.anniversary() ); 617 safeAddPropValue( vcard, "X-Qtopia-Anniversary", c.anniversary() );
608 safeAddPropValue( vcard, "X-Qtopia-Nickname", c.nickname() ); 618 safeAddPropValue( vcard, "X-Qtopia-Nickname", c.nickname() );
609 safeAddPropValue( vcard, "X-Qtopia-Children", c.children() ); 619 safeAddPropValue( vcard, "X-Qtopia-Children", c.children() );
610 620
611 return vcard; 621 return vcard;
612} 622}
613 623
614 624
615static Contact parseVObject( VObject *obj ) 625static Contact parseVObject( VObject *obj )
616{ 626{
617 Contact c; 627 Contact c;
618 628
619 bool haveDefaultEmail = FALSE; 629 bool haveDefaultEmail = FALSE;
620 630
621 VObjectIterator it; 631 VObjectIterator it;
622 initPropIterator( &it, obj ); 632 initPropIterator( &it, obj );
623 while( moreIteration( &it ) ) { 633 while( moreIteration( &it ) ) {
624 VObject *o = nextVObject( &it ); 634 VObject *o = nextVObject( &it );
625 QCString name = vObjectName( o ); 635 QCString name = vObjectName( o );
626 QCString value = vObjectStringZValue( o ); 636 QCString value = vObjectStringZValue( o );
627 if ( name == VCNameProp ) { 637 if ( name == VCNameProp ) {
628 VObjectIterator nit; 638 VObjectIterator nit;
629 initPropIterator( &nit, o ); 639 initPropIterator( &nit, o );
630 while( moreIteration( &nit ) ) { 640 while( moreIteration( &nit ) ) {
631 VObject *o = nextVObject( &nit ); 641 VObject *o = nextVObject( &nit );
632 QCString name = vObjectName( o ); 642 QCString name = vObjectTypeInfo( o );
633 QString value = vObjectStringZValue( o ); 643 QString value = vObjectStringZValue( o );
634 if ( name == VCNamePrefixesProp ) 644 if ( name == VCNamePrefixesProp )
635 c.setTitle( value ); 645 c.setTitle( value );
636 else if ( name == VCNameSuffixesProp ) 646 else if ( name == VCNameSuffixesProp )
637 c.setSuffix( value ); 647 c.setSuffix( value );
638 else if ( name == VCFamilyNameProp ) 648 else if ( name == VCFamilyNameProp )
639 c.setLastName( value ); 649 c.setLastName( value );
640 else if ( name == VCGivenNameProp ) 650 else if ( name == VCGivenNameProp )
641 c.setFirstName( value ); 651 c.setFirstName( value );
642 else if ( name == VCAdditionalNamesProp ) 652 else if ( name == VCAdditionalNamesProp )
643 c.setMiddleName( value ); 653 c.setMiddleName( value );
644 } 654 }
645 } 655 }
646 else if ( name == VCAdrProp ) { 656 else if ( name == VCAdrProp ) {
647 bool work = TRUE; // default address is work address 657 bool work = TRUE; // default address is work address
648 QString street; 658 QString street;
649 QString city; 659 QString city;
650 QString region; 660 QString region;
651 QString postal; 661 QString postal;
652 QString country; 662 QString country;
653 663
654 VObjectIterator nit; 664 VObjectIterator nit;
655 initPropIterator( &nit, o ); 665 initPropIterator( &nit, o );
656 while( moreIteration( &nit ) ) { 666 while( moreIteration( &nit ) ) {
657 VObject *o = nextVObject( &nit ); 667 VObject *o = nextVObject( &nit );
658 QCString name = vObjectName( o ); 668 QCString name = vObjectName( o );
659 QString value = vObjectStringZValue( o ); 669 QString value = vObjectStringZValue( o );
660 if ( name == VCHomeProp ) 670 if ( name == VCHomeProp )
661 work = FALSE; 671 work = FALSE;
662 else if ( name == VCWorkProp ) 672 else if ( name == VCWorkProp )
663 work = TRUE; 673 work = TRUE;
664 else if ( name == VCStreetAddressProp ) 674 else if ( name == VCStreetAddressProp )
665 street = value; 675 street = value;
666 else if ( name == VCCityProp ) 676 else if ( name == VCCityProp )
667 city = value; 677 city = value;
668 else if ( name == VCRegionProp ) 678 else if ( name == VCRegionProp )
669 region = value; 679 region = value;
670 else if ( name == VCPostalCodeProp ) 680 else if ( name == VCPostalCodeProp )
671 postal = value; 681 postal = value;
672 else if ( name == VCCountryNameProp ) 682 else if ( name == VCCountryNameProp )
673 country = value; 683 country = value;
674 } 684 }
675 if ( work ) { 685 if ( work ) {
676 c.setBusinessStreet( street ); 686 c.setBusinessStreet( street );
677 c.setBusinessCity( city ); 687 c.setBusinessCity( city );
678 c.setBusinessCountry( country ); 688 c.setBusinessCountry( country );
679 c.setBusinessZip( postal ); 689 c.setBusinessZip( postal );
680 c.setBusinessState( region ); 690 c.setBusinessState( region );
681 } else { 691 } else {
682 c.setHomeStreet( street ); 692 c.setHomeStreet( street );
683 c.setHomeCity( city ); 693 c.setHomeCity( city );
684 c.setHomeCountry( country ); 694 c.setHomeCountry( country );
685 c.setHomeZip( postal ); 695 c.setHomeZip( postal );
686 c.setHomeState( region ); 696 c.setHomeState( region );
687 } 697 }
688 } 698 }
689 else if ( name == VCTelephoneProp ) { 699 else if ( name == VCTelephoneProp ) {
690 enum { 700 enum {
691 HOME = 0x01, 701 HOME = 0x01,
692 WORK = 0x02, 702 WORK = 0x02,
693 VOICE = 0x04, 703 VOICE = 0x04,
694 CELL = 0x08, 704 CELL = 0x08,
695 FAX = 0x10, 705 FAX = 0x10,
696 PAGER = 0x20, 706 PAGER = 0x20,
697 UNKNOWN = 0x80 707 UNKNOWN = 0x80
698 }; 708 };
699 int type = 0; 709 int type = 0;
700 710
701 VObjectIterator nit; 711 VObjectIterator nit;
702 initPropIterator( &nit, o ); 712 initPropIterator( &nit, o );
703 while( moreIteration( &nit ) ) { 713 while( moreIteration( &nit ) ) {
704 VObject *o = nextVObject( &nit ); 714 VObject *o = nextVObject( &nit );
705 QCString name = vObjectName( o ); 715 QCString name = vObjectTypeInfo( o );
706 if ( name == VCHomeProp ) 716 if ( name == VCHomeProp )
707 type |= HOME; 717 type |= HOME;
708 else if ( name == VCWorkProp ) 718 else if ( name == VCWorkProp )
709 type |= WORK; 719 type |= WORK;
710 else if ( name == VCVoiceProp ) 720 else if ( name == VCVoiceProp )
711 type |= VOICE; 721 type |= VOICE;
712 else if ( name == VCCellularProp ) 722 else if ( name == VCCellularProp )
713 type |= CELL; 723 type |= CELL;
714 else if ( name == VCFaxProp ) 724 else if ( name == VCFaxProp )
715 type |= FAX; 725 type |= FAX;
716 else if ( name == VCPagerProp ) 726 else if ( name == VCPagerProp )
717 type |= PAGER; 727 type |= PAGER;
718 else if ( name == VCPreferredProp ) 728 else if ( name == VCPreferredProp )
719 ; 729 ;
720 else 730 else
721 type |= UNKNOWN; 731 type |= UNKNOWN;
722 } 732 }
723 if ( (type & UNKNOWN) != UNKNOWN ) { 733 if ( (type & UNKNOWN) != UNKNOWN ) {
724 if ( ( type & (HOME|WORK) ) == 0 ) // default 734 if ( ( type & (HOME|WORK) ) == 0 ) // default
725 type |= HOME; 735 type |= HOME;
726 if ( ( type & (VOICE|CELL|FAX|PAGER) ) == 0 ) // default 736 if ( ( type & (VOICE|CELL|FAX|PAGER) ) == 0 ) // default
727 type |= VOICE; 737 type |= VOICE;
728 738
729 if ( (type & (VOICE|HOME) ) == (VOICE|HOME) ) 739 if ( (type & (VOICE|HOME) ) == (VOICE|HOME) )
730 c.setHomePhone( value ); 740 c.setHomePhone( value );
731 if ( ( type & (FAX|HOME) ) == (FAX|HOME) ) 741 if ( ( type & (FAX|HOME) ) == (FAX|HOME) )
732 c.setHomeFax( value ); 742 c.setHomeFax( value );
733 if ( ( type & (CELL|HOME) ) == (CELL|HOME) ) 743 if ( ( type & (CELL|HOME) ) == (CELL|HOME) )
734 c.setHomeMobile( value ); 744 c.setHomeMobile( value );
735 if ( ( type & (VOICE|WORK) ) == (VOICE|WORK) ) 745 if ( ( type & (VOICE|WORK) ) == (VOICE|WORK) )
736 c.setBusinessPhone( value ); 746 c.setBusinessPhone( value );
737 if ( ( type & (FAX|WORK) ) == (FAX|WORK) ) 747 if ( ( type & (FAX|WORK) ) == (FAX|WORK) )
738 c.setBusinessFax( value ); 748 c.setBusinessFax( value );
739 if ( ( type & (CELL|WORK) ) == (CELL|WORK) ) 749 if ( ( type & (CELL|WORK) ) == (CELL|WORK) )
740 c.setBusinessMobile( value ); 750 c.setBusinessMobile( value );
741 if ( ( type & (PAGER|WORK) ) == (PAGER|WORK) ) 751 if ( ( type & (PAGER|WORK) ) == (PAGER|WORK) )
742 c.setBusinessPager( value ); 752 c.setBusinessPager( value );
743 } 753 }
744 } 754 }
745 else if ( name == VCEmailAddressProp ) { 755 else if ( name == VCEmailAddressProp ) {
746 QString email = vObjectStringZValue( o ); 756 QString email = vObjectStringZValue( o );
747 bool valid = TRUE; 757 bool valid = TRUE;
748 VObjectIterator nit; 758 VObjectIterator nit;
749 initPropIterator( &nit, o ); 759 initPropIterator( &nit, o );
750 while( moreIteration( &nit ) ) { 760 while( moreIteration( &nit ) ) {
751 VObject *o = nextVObject( &nit ); 761 VObject *o = nextVObject( &nit );
752 QCString name = vObjectName( o ); 762 QCString name = vObjectTypeInfo( o );
753 if ( name != VCInternetProp && name != VCHomeProp && 763 if ( name != VCInternetProp && name != VCHomeProp &&
754 name != VCWorkProp && 764 name != VCWorkProp &&
755 name != VCPreferredProp ) 765 name != VCPreferredProp )
756 // ### preffered should map to default email 766 // ### preffered should map to default email
757 valid = FALSE; 767 valid = FALSE;
758 } 768 }
759 if ( valid ) { 769 if ( valid ) {
760 if ( haveDefaultEmail ) { 770 if ( haveDefaultEmail ) {
761 QString str = c.emails(); 771 QString str = c.emails();
762 if ( !str.isEmpty() ) 772 if ( !str.isEmpty() )
763 str += ","+email; 773 str += ","+email;
764 c.setEmails( str ); 774 c.setEmails( str );
765 } else { 775 } else {
766 c.setDefaultEmail( email ); 776 c.setDefaultEmail( email );
767 } 777 }
768 } 778 }
769 } 779 }
770 else if ( name == VCURLProp ) { 780 else if ( name == VCURLProp ) {
771 VObjectIterator nit; 781 VObjectIterator nit;
772 initPropIterator( &nit, o ); 782 initPropIterator( &nit, o );
773 while( moreIteration( &nit ) ) { 783 while( moreIteration( &nit ) ) {
774 VObject *o = nextVObject( &nit ); 784 VObject *o = nextVObject( &nit );
775 QCString name = vObjectName( o ); 785 QCString name = vObjectTypeInfo( o );
776 if ( name == VCHomeProp ) 786 if ( name == VCHomeProp )
777 c.setHomeWebpage( value ); 787 c.setHomeWebpage( value );
778 else if ( name == VCWorkProp ) 788 else if ( name == VCWorkProp )
779 c.setBusinessWebpage( value ); 789 c.setBusinessWebpage( value );
780 } 790 }
781 } 791 }
782 else if ( name == VCOrgProp ) { 792 else if ( name == VCOrgProp ) {
783 VObjectIterator nit; 793 VObjectIterator nit;
784 initPropIterator( &nit, o ); 794 initPropIterator( &nit, o );
785 while( moreIteration( &nit ) ) { 795 while( moreIteration( &nit ) ) {
786 VObject *o = nextVObject( &nit ); 796 VObject *o = nextVObject( &nit );
787 QCString name = vObjectName( o ); 797 QCString name = vObjectName( o );
788 QString value = vObjectStringZValue( o ); 798 QString value = vObjectStringZValue( o );
789 if ( name == VCOrgNameProp ) 799 if ( name == VCOrgNameProp )
790 c.setCompany( value ); 800 c.setCompany( value );
791 else if ( name == VCOrgUnitProp ) 801 else if ( name == VCOrgUnitProp )
792 c.setDepartment( value ); 802 c.setDepartment( value );
793 else if ( name == VCOrgUnit2Prop ) 803 else if ( name == VCOrgUnit2Prop )
794 c.setOffice( value ); 804 c.setOffice( value );
795 } 805 }
796 } 806 }
797 else if ( name == VCTitleProp ) { 807 else if ( name == VCTitleProp ) {
798 c.setJobTitle( value ); 808 c.setJobTitle( value );
799 } 809 }
800 else if ( name == "X-Qtopia-Profession" ) { 810 else if ( name == "X-Qtopia-Profession" ) {
801 c.setProfession( value ); 811 c.setProfession( value );
802 } 812 }
803 else if ( name == "X-Qtopia-Manager" ) { 813 else if ( name == "X-Qtopia-Manager" ) {
804 c.setManager( value ); 814 c.setManager( value );
805 } 815 }
806 else if ( name == "X-Qtopia-Assistant" ) { 816 else if ( name == "X-Qtopia-Assistant" ) {
807 c.setAssistant( value ); 817 c.setAssistant( value );
808 } 818 }
809 else if ( name == "X-Qtopia-Spouse" ) { 819 else if ( name == "X-Qtopia-Spouse" ) {
810 c.setSpouse( value ); 820 c.setSpouse( value );
811 } 821 }
812 else if ( name == "X-Qtopia-Gender" ) { 822 else if ( name == "X-Qtopia-Gender" ) {
813 c.setGender( value ); 823 c.setGender( value );
814 } 824 }
815 else if ( name == "X-Qtopia-Anniversary" ) { 825 else if ( name == "X-Qtopia-Anniversary" ) {
816 c.setAnniversary( value ); 826 c.setAnniversary( value );
817 } 827 }
818 else if ( name == "X-Qtopia-Nickname" ) { 828 else if ( name == "X-Qtopia-Nickname" ) {
819 c.setNickname( value ); 829 c.setNickname( value );
820 } 830 }
821 else if ( name == "X-Qtopia-Children" ) { 831 else if ( name == "X-Qtopia-Children" ) {
822 c.setChildren( value ); 832 c.setChildren( value );
823 } 833 }
824 834
825 835
826#if 0 836#if 0
827 else { 837 else {
828 printf("Name: %s, value=%s\n", name.data(), vObjectStringZValue( o ) ); 838 printf("Name: %s, value=%s\n", name.data(), vObjectStringZValue( o ) );
829 VObjectIterator nit; 839 VObjectIterator nit;
830 initPropIterator( &nit, o ); 840 initPropIterator( &nit, o );
831 while( moreIteration( &nit ) ) { 841 while( moreIteration( &nit ) ) {
832 VObject *o = nextVObject( &nit ); 842 VObject *o = nextVObject( &nit );
833 QCString name = vObjectName( o ); 843 QCString name = vObjectName( o );
834 QString value = vObjectStringZValue( o ); 844 QString value = vObjectStringZValue( o );
835 printf(" subprop: %s = %s\n", name.data(), value.latin1() ); 845 printf(" subprop: %s = %s\n", name.data(), value.latin1() );
836 } 846 }
837 } 847 }
838#endif 848#endif
839 } 849 }
840 c.setFileAs(); 850 c.setFileAs();
841 return c; 851 return c;
842} 852}
843 853
844void Contact::writeVCard( const QString &filename, const QValueList<Contact> &contacts) 854void Contact::writeVCard( const QString &filename, const QValueList<Contact> &contacts)
845{ 855{
846 QFileDirect f( filename.utf8().data() ); 856 QFileDirect f( filename.utf8().data() );
847 if ( !f.open( IO_WriteOnly ) ) { 857 if ( !f.open( IO_WriteOnly ) ) {
848 qWarning("Unable to open vcard write"); 858 qWarning("Unable to open vcard write");
849 return; 859 return;
850 } 860 }
851 861
852 QValueList<Contact>::ConstIterator it; 862 QValueList<Contact>::ConstIterator it;
853 for( it = contacts.begin(); it != contacts.end(); ++it ) { 863 for( it = contacts.begin(); it != contacts.end(); ++it ) {
854 VObject *obj = createVObject( *it ); 864 VObject *obj = createVObject( *it );
855 writeVObject(f.directHandle() , obj ); 865 writeVObject(f.directHandle() , obj );
856 cleanVObject( obj ); 866 cleanVObject( obj );
857 } 867 }
858 cleanStrTbl(); 868 cleanStrTbl();
859} 869}
860 870
861void Contact::writeVCard( const QString &filename, const Contact &contact) 871void Contact::writeVCard( const QString &filename, const Contact &contact)
862{ 872{
863 QFileDirect f( filename.utf8().data() ); 873 QFileDirect f( filename.utf8().data() );
864 if ( !f.open( IO_WriteOnly ) ) { 874 if ( !f.open( IO_WriteOnly ) ) {
865 qWarning("Unable to open vcard write"); 875 qWarning("Unable to open vcard write");
866 return; 876 return;
867 } 877 }
868 878
869 VObject *obj = createVObject( contact ); 879 VObject *obj = createVObject( contact );
870 writeVObject( f.directHandle() , obj ); 880 writeVObject( f.directHandle() , obj );
871 cleanVObject( obj ); 881 cleanVObject( obj );
872 882
873 cleanStrTbl(); 883 cleanStrTbl();
874} 884}
875 885
876 886
877QValueList<Contact> Contact::readVCard( const QString &filename ) 887QValueList<Contact> Contact::readVCard( const QString &filename )
878{ 888{
879 qDebug("trying to open %s, exists=%d", filename.utf8().data(), QFileInfo( filename.utf8().data() ).size() ); 889 qDebug("trying to open %s, exists=%d", filename.utf8().data(), QFileInfo( filename.utf8().data() ).size() );
880 VObject *obj = Parse_MIME_FromFileName( (char *)filename.utf8().data() ); 890 VObject *obj = Parse_MIME_FromFileName( (char *)filename.utf8().data() );
881 891
882 qDebug("vobject = %p", obj ); 892 qDebug("vobject = %p", obj );
883 893
884 QValueList<Contact> contacts; 894 QValueList<Contact> contacts;
885 895
886 while ( obj ) { 896 while ( obj ) {
887 contacts.append( parseVObject( obj ) ); 897 contacts.append( parseVObject( obj ) );
888 898
889 VObject *t = obj; 899 VObject *t = obj;
890 obj = nextVObjectInList(obj); 900 obj = nextVObjectInList(obj);
891 cleanVObject( t ); 901 cleanVObject( t );
892 } 902 }
893 903
894 return contacts; 904 return contacts;
895} 905}
896 906
907bool Contact::match( const QString &regexp ) const
908{
909 return match(QRegExp(regexp));
910}
911
897bool Contact::match( const QRegExp &r ) const 912bool Contact::match( const QRegExp &r ) const
898{ 913{
899 bool match; 914 bool match;
900 match = false; 915 match = false;
901 QMap<int, QString>::ConstIterator it; 916 QMap<int, QString>::ConstIterator it;
902 for ( it = mMap.begin(); it != mMap.end(); ++it ) { 917 for ( it = mMap.begin(); it != mMap.end(); ++it ) {
903 if ( (*it).find( r ) > -1 ) { 918 if ( (*it).find( r ) > -1 ) {
904 match = true; 919 match = true;
905 break; 920 break;
906 } 921 }
907 } 922 }
908 return match; 923 return match;
909} 924}