-rw-r--r-- | library/backend/contact.cpp | 107 |
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 | ||
35 | Qtopia::UidGen Contact::sUidGen( Qtopia::UidGen::Qtopia ); | 37 | Qtopia::UidGen Contact::sUidGen( Qtopia::UidGen::Qtopia ); |
36 | 38 | ||
37 | Contact::Contact() | 39 | Contact::Contact() |
38 | : Record(), mMap(), d( 0 ) | 40 | : Record(), mMap(), d( 0 ) |
39 | { | 41 | { |
40 | } | 42 | } |
41 | 43 | ||
42 | Contact::Contact( const QMap<int, QString> &fromMap ) : | 44 | Contact::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 | ||
55 | Contact::~Contact() | 57 | Contact::~Contact() |
56 | { | 58 | { |
57 | } | 59 | } |
58 | 60 | ||
59 | QMap<int, QString> Contact::toMap() const | 61 | QMap<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 | */ |
69 | QString Contact::toRichText() const | 71 | QString 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 | ||
323 | QStringList Contact::childrenList() const | 325 | QStringList Contact::childrenList() const |
324 | { | 326 | { |
325 | return QStringList::split( " ", find( Qtopia::Children ) ); | 327 | return QStringList::split( " ", find( Qtopia::Children ) ); |
326 | } | 328 | } |
327 | 329 | ||
328 | QStringList Contact::emailList() const | 330 | QStringList Contact::emailList() const |
329 | { | 331 | { |
330 | return QStringList::split( ";", find( Qtopia::Emails ) ); | 332 | return QStringList::split( ";", find( Qtopia::Emails ) ); |
331 | } | 333 | } |
332 | 334 | ||
333 | void Contact::setFileAs() | 335 | void 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 | ||
354 | void Contact::save( QString &buf ) const | 356 | void 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 | ||
378 | QStringList Contact::fields() | 380 | QStringList 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 | ||
432 | QStringList Contact::trfields() | 438 | QStringList 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 | ||
486 | void Contact::setEmails( const QString &v ) | 496 | void 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 | ||
493 | void Contact::setChildren( const QString &v ) | 503 | void 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 |
499 | static inline VObject *safeAddPropValue( VObject *o, const char *prop, const QString &value ) | 509 | static 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 | ||
507 | static inline VObject *safeAddProp( VObject *o, const char *prop) | 517 | static 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 | ||
515 | static VObject *createVObject( const Contact &c ) | 525 | static 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 | ||
615 | static Contact parseVObject( VObject *obj ) | 625 | static 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 | ||
844 | void Contact::writeVCard( const QString &filename, const QValueList<Contact> &contacts) | 854 | void 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 | ||
861 | void Contact::writeVCard( const QString &filename, const Contact &contact) | 871 | void 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 | ||
877 | QValueList<Contact> Contact::readVCard( const QString &filename ) | 887 | QValueList<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 | ||
907 | bool Contact::match( const QString ®exp ) const | ||
908 | { | ||
909 | return match(QRegExp(regexp)); | ||
910 | } | ||
911 | |||
897 | bool Contact::match( const QRegExp &r ) const | 912 | bool 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 | } |