summaryrefslogtreecommitdiff
authorar <ar>2005-12-10 16:43:43 (UTC)
committer ar <ar>2005-12-10 16:43:43 (UTC)
commit3948be20fed2f54054eda97f7a203084e904093b (patch) (unidiff)
tree920892aa9efe49cf040fe4bf5bc883ea947792cf
parentbb9f3cb27500b70124985fd51f90b7f8ded33588 (diff)
downloadopie-3948be20fed2f54054eda97f7a203084e904093b.zip
opie-3948be20fed2f54054eda97f7a203084e904093b.tar.gz
opie-3948be20fed2f54054eda97f7a203084e904093b.tar.bz2
- fix a problem with Sony Ericsson GSM. It can only handle vCards whitch have first set Cellular, Fax, Pager property and then HOME or WORK property.
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libopie2/opiepim/backend/ocontactaccessbackend_vcard.cpp10
1 files changed, 5 insertions, 5 deletions
diff --git a/libopie2/opiepim/backend/ocontactaccessbackend_vcard.cpp b/libopie2/opiepim/backend/ocontactaccessbackend_vcard.cpp
index 0ffbb67..5bc2755 100644
--- a/libopie2/opiepim/backend/ocontactaccessbackend_vcard.cpp
+++ b/libopie2/opiepim/backend/ocontactaccessbackend_vcard.cpp
@@ -216,394 +216,394 @@ OPimContact OPimContactAccessBackend_VCard::parseVObject( VObject *obj )
216 } 216 }
217 else if ( name == VCAdrProp ) { 217 else if ( name == VCAdrProp ) {
218 bool work = TRUE; // default address is work address 218 bool work = TRUE; // default address is work address
219 QString street; 219 QString street;
220 QString city; 220 QString city;
221 QString region; 221 QString region;
222 QString postal; 222 QString postal;
223 QString country; 223 QString country;
224 224
225 VObjectIterator nit; 225 VObjectIterator nit;
226 initPropIterator( &nit, o ); 226 initPropIterator( &nit, o );
227 while( moreIteration( &nit ) ) { 227 while( moreIteration( &nit ) ) {
228 VObject *o = nextVObject( &nit ); 228 VObject *o = nextVObject( &nit );
229 QCString name = vObjectTypeInfo( o ); 229 QCString name = vObjectTypeInfo( o );
230 QString value = QString::fromUtf8( vObjectStringZValue( o ) ); 230 QString value = QString::fromUtf8( vObjectStringZValue( o ) );
231 odebug << "AddressType is: "<< name << " Value: " << value.latin1() << oendl; 231 odebug << "AddressType is: "<< name << " Value: " << value.latin1() << oendl;
232 if ( name == VCHomeProp ) 232 if ( name == VCHomeProp )
233 work = FALSE; 233 work = FALSE;
234 else if ( name == VCWorkProp ) 234 else if ( name == VCWorkProp )
235 work = TRUE; 235 work = TRUE;
236 else if ( name == VCStreetAddressProp ) 236 else if ( name == VCStreetAddressProp )
237 street = value; 237 street = value;
238 else if ( name == VCCityProp ) 238 else if ( name == VCCityProp )
239 city = value; 239 city = value;
240 else if ( name == VCRegionProp ) 240 else if ( name == VCRegionProp )
241 region = value; 241 region = value;
242 else if ( name == VCPostalCodeProp ) 242 else if ( name == VCPostalCodeProp )
243 postal = value; 243 postal = value;
244 else if ( name == VCCountryNameProp ) 244 else if ( name == VCCountryNameProp )
245 country = value; 245 country = value;
246 } 246 }
247 if ( work ) { 247 if ( work ) {
248 c.setBusinessStreet( street ); 248 c.setBusinessStreet( street );
249 c.setBusinessCity( city ); 249 c.setBusinessCity( city );
250 c.setBusinessCountry( country ); 250 c.setBusinessCountry( country );
251 c.setBusinessZip( postal ); 251 c.setBusinessZip( postal );
252 c.setBusinessState( region ); 252 c.setBusinessState( region );
253 } else { 253 } else {
254 c.setHomeStreet( street ); 254 c.setHomeStreet( street );
255 c.setHomeCity( city ); 255 c.setHomeCity( city );
256 c.setHomeCountry( country ); 256 c.setHomeCountry( country );
257 c.setHomeZip( postal ); 257 c.setHomeZip( postal );
258 c.setHomeState( region ); 258 c.setHomeState( region );
259 } 259 }
260 } 260 }
261 else if ( name == VCTelephoneProp ) { 261 else if ( name == VCTelephoneProp ) {
262 enum { 262 enum {
263 HOME = 0x01, 263 HOME = 0x01,
264 WORK = 0x02, 264 WORK = 0x02,
265 VOICE = 0x04, 265 VOICE = 0x04,
266 CELL = 0x08, 266 CELL = 0x08,
267 FAX = 0x10, 267 FAX = 0x10,
268 PAGER = 0x20, 268 PAGER = 0x20,
269 UNKNOWN = 0x80 269 UNKNOWN = 0x80
270 }; 270 };
271 int type = 0; 271 int type = 0;
272 272
273 VObjectIterator nit; 273 VObjectIterator nit;
274 initPropIterator( &nit, o ); 274 initPropIterator( &nit, o );
275 while( moreIteration( &nit ) ) { 275 while( moreIteration( &nit ) ) {
276 VObject *o = nextVObject( &nit ); 276 VObject *o = nextVObject( &nit );
277 QCString name = vObjectTypeInfo( o ); 277 QCString name = vObjectTypeInfo( o );
278 odebug << "Telephonetype is: "<< name << " Value: " << value.latin1() << oendl; 278 odebug << "Telephonetype is: "<< name << " Value: " << value.latin1() << oendl;
279 if ( name == VCHomeProp ) 279 if ( name == VCHomeProp )
280 type |= HOME; 280 type |= HOME;
281 else if ( name == VCWorkProp ) 281 else if ( name == VCWorkProp )
282 type |= WORK; 282 type |= WORK;
283 else if ( name == VCVoiceProp ) 283 else if ( name == VCVoiceProp )
284 type |= VOICE; 284 type |= VOICE;
285 else if ( name == VCCellularProp ) 285 else if ( name == VCCellularProp )
286 type |= CELL; 286 type |= CELL;
287 else if ( name == VCFaxProp ) 287 else if ( name == VCFaxProp )
288 type |= FAX; 288 type |= FAX;
289 else if ( name == VCPagerProp ) 289 else if ( name == VCPagerProp )
290 type |= PAGER; 290 type |= PAGER;
291 else if ( name == VCPreferredProp ) 291 else if ( name == VCPreferredProp )
292 ; 292 ;
293 else if ( name.left( 2 ) == "X-" || name.left( 2 ) == "x-" ) 293 else if ( name.left( 2 ) == "X-" || name.left( 2 ) == "x-" )
294 ; // Ignore 294 ; // Ignore
295 else 295 else
296 type |= UNKNOWN; 296 type |= UNKNOWN;
297 } 297 }
298 if ( (type & UNKNOWN) != UNKNOWN ) { 298 if ( (type & UNKNOWN) != UNKNOWN ) {
299 if ( ( type & (HOME|WORK) ) == 0 ) // default 299 if ( ( type & (HOME|WORK) ) == 0 ) // default
300 type |= HOME; 300 type |= HOME;
301 if ( ( type & (VOICE|CELL|FAX|PAGER) ) == 0 ) // default 301 if ( ( type & (VOICE|CELL|FAX|PAGER) ) == 0 ) // default
302 type |= VOICE; 302 type |= VOICE;
303 303
304 odebug << "value %s %d" << value.data() << type << oendl; 304 odebug << "value %s %d" << value.data() << type << oendl;
305 305
306 if ( (type & (VOICE|HOME) ) == (VOICE|HOME) && (type & (CELL|HOME) ) != (CELL|HOME) ) 306 if ( (type & (VOICE|HOME) ) == (VOICE|HOME) && (type & (CELL|HOME) ) != (CELL|HOME) )
307 c.setHomePhone( value ); 307 c.setHomePhone( value );
308 if ( ( type & (FAX|HOME) ) == (FAX|HOME) ) 308 if ( ( type & (FAX|HOME) ) == (FAX|HOME) )
309 c.setHomeFax( value ); 309 c.setHomeFax( value );
310 if ( ( type & (CELL|HOME) ) == (CELL|HOME) ) 310 if ( ( type & (CELL|HOME) ) == (CELL|HOME) )
311 c.setHomeMobile( value ); 311 c.setHomeMobile( value );
312 if ( ( type & (VOICE|WORK) ) == (VOICE|WORK) && (type & (CELL|WORK) ) != (CELL|WORK) ) 312 if ( ( type & (VOICE|WORK) ) == (VOICE|WORK) && (type & (CELL|WORK) ) != (CELL|WORK) )
313 c.setBusinessPhone( value ); 313 c.setBusinessPhone( value );
314 if ( ( type & (FAX|WORK) ) == (FAX|WORK) ) 314 if ( ( type & (FAX|WORK) ) == (FAX|WORK) )
315 c.setBusinessFax( value ); 315 c.setBusinessFax( value );
316 if ( ( type & (CELL|WORK) ) == (CELL|WORK) ) 316 if ( ( type & (CELL|WORK) ) == (CELL|WORK) )
317 c.setBusinessMobile( value ); 317 c.setBusinessMobile( value );
318 if ( ( type & (PAGER|WORK) ) == (PAGER|WORK) ) 318 if ( ( type & (PAGER|WORK) ) == (PAGER|WORK) )
319 c.setBusinessPager( value ); 319 c.setBusinessPager( value );
320 } 320 }
321 } 321 }
322 else if ( name == VCEmailAddressProp ) { 322 else if ( name == VCEmailAddressProp ) {
323 QString email = QString::fromUtf8( vObjectStringZValue( o ) ); 323 QString email = QString::fromUtf8( vObjectStringZValue( o ) );
324 bool valid = TRUE; 324 bool valid = TRUE;
325 VObjectIterator nit; 325 VObjectIterator nit;
326 initPropIterator( &nit, o ); 326 initPropIterator( &nit, o );
327 while( moreIteration( &nit ) ) { 327 while( moreIteration( &nit ) ) {
328 VObject *o = nextVObject( &nit ); 328 VObject *o = nextVObject( &nit );
329 QCString name = vObjectTypeInfo( o ); 329 QCString name = vObjectTypeInfo( o );
330 odebug << "Emailtype is: "<< name << " Value: " << value.latin1() << oendl; 330 odebug << "Emailtype is: "<< name << " Value: " << value.latin1() << oendl;
331 if ( name != VCInternetProp && name != VCHomeProp && 331 if ( name != VCInternetProp && name != VCHomeProp &&
332 name != VCWorkProp && 332 name != VCWorkProp &&
333 name != VCPreferredProp && 333 name != VCPreferredProp &&
334 name.left( 2 ) != "X-" && name.left( 2 ) != "x-" ){ 334 name.left( 2 ) != "X-" && name.left( 2 ) != "x-" ){
335 // ### preffered should map to default email 335 // ### preffered should map to default email
336 valid = FALSE; 336 valid = FALSE;
337 odebug << "Email was detected as invalid!" << oendl; 337 odebug << "Email was detected as invalid!" << oendl;
338 } 338 }
339 } 339 }
340 if ( valid ) { 340 if ( valid ) {
341 c.insertEmail( email ); 341 c.insertEmail( email );
342 } 342 }
343 } 343 }
344 else if ( name == VCURLProp ) { 344 else if ( name == VCURLProp ) {
345 VObjectIterator nit; 345 VObjectIterator nit;
346 initPropIterator( &nit, o ); 346 initPropIterator( &nit, o );
347 while( moreIteration( &nit ) ) { 347 while( moreIteration( &nit ) ) {
348 VObject *o = nextVObject( &nit ); 348 VObject *o = nextVObject( &nit );
349 QCString name = vObjectTypeInfo( o ); 349 QCString name = vObjectTypeInfo( o );
350 if ( name == VCHomeProp ) 350 if ( name == VCHomeProp )
351 c.setHomeWebpage( value ); 351 c.setHomeWebpage( value );
352 else if ( name == VCWorkProp ) 352 else if ( name == VCWorkProp )
353 c.setBusinessWebpage( value ); 353 c.setBusinessWebpage( value );
354 } 354 }
355 } 355 }
356 else if ( name == VCOrgProp ) { 356 else if ( name == VCOrgProp ) {
357 VObjectIterator nit; 357 VObjectIterator nit;
358 initPropIterator( &nit, o ); 358 initPropIterator( &nit, o );
359 while( moreIteration( &nit ) ) { 359 while( moreIteration( &nit ) ) {
360 VObject *o = nextVObject( &nit ); 360 VObject *o = nextVObject( &nit );
361 QCString name = vObjectName( o ); 361 QCString name = vObjectName( o );
362 QString value = QString::fromUtf8( vObjectStringZValue( o ) ); 362 QString value = QString::fromUtf8( vObjectStringZValue( o ) );
363 if ( name == VCOrgNameProp ) 363 if ( name == VCOrgNameProp )
364 c.setCompany( value ); 364 c.setCompany( value );
365 else if ( name == VCOrgUnitProp ) 365 else if ( name == VCOrgUnitProp )
366 c.setDepartment( value ); 366 c.setDepartment( value );
367 else if ( name == VCOrgUnit2Prop ) 367 else if ( name == VCOrgUnit2Prop )
368 c.setOffice( value ); 368 c.setOffice( value );
369 } 369 }
370 } 370 }
371 else if ( name == VCTitleProp ) { 371 else if ( name == VCTitleProp ) {
372 c.setJobTitle( value ); 372 c.setJobTitle( value );
373 } 373 }
374 else if ( name == "X-Qtopia-Profession" ) { 374 else if ( name == "X-Qtopia-Profession" ) {
375 c.setProfession( value ); 375 c.setProfession( value );
376 } 376 }
377 else if ( name == "X-Qtopia-Manager" ) { 377 else if ( name == "X-Qtopia-Manager" ) {
378 c.setManager( value ); 378 c.setManager( value );
379 } 379 }
380 else if ( name == "X-Qtopia-Assistant" ) { 380 else if ( name == "X-Qtopia-Assistant" ) {
381 c.setAssistant( value ); 381 c.setAssistant( value );
382 } 382 }
383 else if ( name == "X-Qtopia-Spouse" ) { 383 else if ( name == "X-Qtopia-Spouse" ) {
384 c.setSpouse( value ); 384 c.setSpouse( value );
385 } 385 }
386 else if ( name == "X-Qtopia-Gender" ) { 386 else if ( name == "X-Qtopia-Gender" ) {
387 c.setGender( value ); 387 c.setGender( value );
388 } 388 }
389 else if ( name == "X-Qtopia-Anniversary" ) { 389 else if ( name == "X-Qtopia-Anniversary" ) {
390 c.setAnniversary( convVCardDateToDate( value ) ); 390 c.setAnniversary( convVCardDateToDate( value ) );
391 } 391 }
392 else if ( name == "X-Qtopia-Nickname" ) { 392 else if ( name == "X-Qtopia-Nickname" ) {
393 c.setNickname( value ); 393 c.setNickname( value );
394 } 394 }
395 else if ( name == "X-Qtopia-Children" ) { 395 else if ( name == "X-Qtopia-Children" ) {
396 c.setChildren( value ); 396 c.setChildren( value );
397 } 397 }
398 else if ( name == VCBirthDateProp ) { 398 else if ( name == VCBirthDateProp ) {
399 // Reading Birthdate regarding RFC 2425 (5.8.4) 399 // Reading Birthdate regarding RFC 2425 (5.8.4)
400 c.setBirthday( convVCardDateToDate( value ) ); 400 c.setBirthday( convVCardDateToDate( value ) );
401 401
402 } 402 }
403 else if ( name == VCCommentProp ) { 403 else if ( name == VCCommentProp ) {
404 c.setNotes( value ); 404 c.setNotes( value );
405 } 405 }
406#if 0 406#if 0
407 else { 407 else {
408 printf("Name: %s, value=%s\n", name.data(), QString::fromUtf8( vObjectStringZValue( o ) ) ); 408 printf("Name: %s, value=%s\n", name.data(), QString::fromUtf8( vObjectStringZValue( o ) ) );
409 VObjectIterator nit; 409 VObjectIterator nit;
410 initPropIterator( &nit, o ); 410 initPropIterator( &nit, o );
411 while( moreIteration( &nit ) ) { 411 while( moreIteration( &nit ) ) {
412 VObject *o = nextVObject( &nit ); 412 VObject *o = nextVObject( &nit );
413 QCString name = vObjectName( o ); 413 QCString name = vObjectName( o );
414 QString value = QString::fromUtf8( vObjectStringZValue( o ) ); 414 QString value = QString::fromUtf8( vObjectStringZValue( o ) );
415 printf(" subprop: %s = %s\n", name.data(), value.latin1() ); 415 printf(" subprop: %s = %s\n", name.data(), value.latin1() );
416 } 416 }
417 } 417 }
418 else { 418 else {
419 printf("Name: %s, value=%s\n", name.data(), vObjectStringZValue( o ) ); 419 printf("Name: %s, value=%s\n", name.data(), vObjectStringZValue( o ) );
420 VObjectIterator nit; 420 VObjectIterator nit;
421 initPropIterator( &nit, o ); 421 initPropIterator( &nit, o );
422 while( moreIteration( &nit ) ) { 422 while( moreIteration( &nit ) ) {
423 VObject *o = nextVObject( &nit ); 423 VObject *o = nextVObject( &nit );
424 QCString name = vObjectName( o ); 424 QCString name = vObjectName( o );
425 QString value = vObjectStringZValue( o ); 425 QString value = vObjectStringZValue( o );
426 printf(" subprop: %s = %s\n", name.data(), value.latin1() ); 426 printf(" subprop: %s = %s\n", name.data(), value.latin1() );
427 } 427 }
428 } 428 }
429#endif 429#endif
430 } 430 }
431 c.setFileAs(); 431 c.setFileAs();
432 return c; 432 return c;
433} 433}
434 434
435 435
436VObject* OPimContactAccessBackend_VCard::createVObject( const OPimContact &c ) 436VObject* OPimContactAccessBackend_VCard::createVObject( const OPimContact &c )
437{ 437{
438 VObject *vcard = newVObject( VCCardProp ); 438 VObject *vcard = newVObject( VCCardProp );
439 safeAddPropValue( vcard, VCVersionProp, "2.1" ); 439 safeAddPropValue( vcard, VCVersionProp, "2.1" );
440 safeAddPropValue( vcard, VCLastRevisedProp, TimeConversion::toISO8601( QDateTime::currentDateTime() ) ); 440 safeAddPropValue( vcard, VCLastRevisedProp, TimeConversion::toISO8601( QDateTime::currentDateTime() ) );
441 safeAddPropValue( vcard, VCUniqueStringProp, QString::number(c.uid()) ); 441 safeAddPropValue( vcard, VCUniqueStringProp, QString::number(c.uid()) );
442 442
443 // full name 443 // full name
444 safeAddPropValue( vcard, VCFullNameProp, c.fullName() ); 444 safeAddPropValue( vcard, VCFullNameProp, c.fullName() );
445 445
446 // name properties 446 // name properties
447 VObject *name = safeAddProp( vcard, VCNameProp ); 447 VObject *name = safeAddProp( vcard, VCNameProp );
448 safeAddPropValue( name, VCFamilyNameProp, c.lastName() ); 448 safeAddPropValue( name, VCFamilyNameProp, c.lastName() );
449 safeAddPropValue( name, VCGivenNameProp, c.firstName() ); 449 safeAddPropValue( name, VCGivenNameProp, c.firstName() );
450 safeAddPropValue( name, VCAdditionalNamesProp, c.middleName() ); 450 safeAddPropValue( name, VCAdditionalNamesProp, c.middleName() );
451 safeAddPropValue( name, VCNamePrefixesProp, c.title() ); 451 safeAddPropValue( name, VCNamePrefixesProp, c.title() );
452 safeAddPropValue( name, VCNameSuffixesProp, c.suffix() ); 452 safeAddPropValue( name, VCNameSuffixesProp, c.suffix() );
453 453
454 // home properties 454 // home properties
455 if ( !( c.homeStreet().isEmpty() 455 if ( !( c.homeStreet().isEmpty()
456 && c.homeCity().isEmpty() 456 && c.homeCity().isEmpty()
457 && c.homeState().isEmpty() 457 && c.homeState().isEmpty()
458 && c.homeZip().isEmpty() 458 && c.homeZip().isEmpty()
459 && c.homeCountry().isEmpty() ) ){ 459 && c.homeCountry().isEmpty() ) ){
460 VObject *home_adr= safeAddProp( vcard, VCAdrProp ); 460 VObject *home_adr= safeAddProp( vcard, VCAdrProp );
461 safeAddProp( home_adr, VCHomeProp ); 461 safeAddProp( home_adr, VCHomeProp );
462 safeAddPropValue( home_adr, VCStreetAddressProp, c.homeStreet() ); 462 safeAddPropValue( home_adr, VCStreetAddressProp, c.homeStreet() );
463 safeAddPropValue( home_adr, VCCityProp, c.homeCity() ); 463 safeAddPropValue( home_adr, VCCityProp, c.homeCity() );
464 safeAddPropValue( home_adr, VCRegionProp, c.homeState() ); 464 safeAddPropValue( home_adr, VCRegionProp, c.homeState() );
465 safeAddPropValue( home_adr, VCPostalCodeProp, c.homeZip() ); 465 safeAddPropValue( home_adr, VCPostalCodeProp, c.homeZip() );
466 safeAddPropValue( home_adr, VCCountryNameProp, c.homeCountry() ); 466 safeAddPropValue( home_adr, VCCountryNameProp, c.homeCountry() );
467 } 467 }
468 468
469 VObject *home_phone = safeAddPropValue( vcard, VCTelephoneProp, c.homePhone() ); 469 VObject *home_phone = safeAddPropValue( vcard, VCTelephoneProp, c.homePhone() );
470 safeAddProp( home_phone, VCHomeProp ); 470 safeAddProp( home_phone, VCHomeProp );
471 home_phone = safeAddPropValue( vcard, VCTelephoneProp, c.homeMobile() ); 471 home_phone = safeAddPropValue( vcard, VCTelephoneProp, c.homeMobile() );
472 safeAddProp( home_phone, VCHomeProp );
473 safeAddProp( home_phone, VCCellularProp ); 472 safeAddProp( home_phone, VCCellularProp );
474 home_phone = safeAddPropValue( vcard, VCTelephoneProp, c.homeFax() );
475 safeAddProp( home_phone, VCHomeProp ); 473 safeAddProp( home_phone, VCHomeProp );
474 home_phone = safeAddPropValue( vcard, VCTelephoneProp, c.homeFax() );
476 safeAddProp( home_phone, VCFaxProp ); 475 safeAddProp( home_phone, VCFaxProp );
476 safeAddProp( home_phone, VCHomeProp );
477 477
478 VObject *url = safeAddPropValue( vcard, VCURLProp, c.homeWebpage() ); 478 VObject *url = safeAddPropValue( vcard, VCURLProp, c.homeWebpage() );
479 safeAddProp( url, VCHomeProp ); 479 safeAddProp( url, VCHomeProp );
480 480
481 // work properties 481 // work properties
482 if ( !( c.businessStreet().isEmpty() 482 if ( !( c.businessStreet().isEmpty()
483 && c.businessCity().isEmpty() 483 && c.businessCity().isEmpty()
484 && c.businessState().isEmpty() 484 && c.businessState().isEmpty()
485 && c.businessZip().isEmpty() 485 && c.businessZip().isEmpty()
486 && c.businessCountry().isEmpty() ) ){ 486 && c.businessCountry().isEmpty() ) ){
487 VObject *work_adr= safeAddProp( vcard, VCAdrProp ); 487 VObject *work_adr= safeAddProp( vcard, VCAdrProp );
488 safeAddProp( work_adr, VCWorkProp ); 488 safeAddProp( work_adr, VCWorkProp );
489 safeAddPropValue( work_adr, VCStreetAddressProp, c.businessStreet() ); 489 safeAddPropValue( work_adr, VCStreetAddressProp, c.businessStreet() );
490 safeAddPropValue( work_adr, VCCityProp, c.businessCity() ); 490 safeAddPropValue( work_adr, VCCityProp, c.businessCity() );
491 safeAddPropValue( work_adr, VCRegionProp, c.businessState() ); 491 safeAddPropValue( work_adr, VCRegionProp, c.businessState() );
492 safeAddPropValue( work_adr, VCPostalCodeProp, c.businessZip() ); 492 safeAddPropValue( work_adr, VCPostalCodeProp, c.businessZip() );
493 safeAddPropValue( work_adr, VCCountryNameProp, c.businessCountry() ); 493 safeAddPropValue( work_adr, VCCountryNameProp, c.businessCountry() );
494 } 494 }
495 495
496 VObject *work_phone = safeAddPropValue( vcard, VCTelephoneProp, c.businessPhone() ); 496 VObject *work_phone = safeAddPropValue( vcard, VCTelephoneProp, c.businessPhone() );
497 safeAddProp( work_phone, VCWorkProp ); 497 safeAddProp( work_phone, VCWorkProp );
498 work_phone = safeAddPropValue( vcard, VCTelephoneProp, c.businessMobile() ); 498 work_phone = safeAddPropValue( vcard, VCTelephoneProp, c.businessMobile() );
499 safeAddProp( work_phone, VCWorkProp );
500 safeAddProp( work_phone, VCCellularProp ); 499 safeAddProp( work_phone, VCCellularProp );
501 work_phone = safeAddPropValue( vcard, VCTelephoneProp, c.businessFax() );
502 safeAddProp( work_phone, VCWorkProp ); 500 safeAddProp( work_phone, VCWorkProp );
501 work_phone = safeAddPropValue( vcard, VCTelephoneProp, c.businessFax() );
503 safeAddProp( work_phone, VCFaxProp ); 502 safeAddProp( work_phone, VCFaxProp );
504 work_phone = safeAddPropValue( vcard, VCTelephoneProp, c.businessPager() );
505 safeAddProp( work_phone, VCWorkProp ); 503 safeAddProp( work_phone, VCWorkProp );
504 work_phone = safeAddPropValue( vcard, VCTelephoneProp, c.businessPager() );
506 safeAddProp( work_phone, VCPagerProp ); 505 safeAddProp( work_phone, VCPagerProp );
506 safeAddProp( work_phone, VCWorkProp );
507 507
508 url = safeAddPropValue( vcard, VCURLProp, c.businessWebpage() ); 508 url = safeAddPropValue( vcard, VCURLProp, c.businessWebpage() );
509 safeAddProp( url, VCWorkProp ); 509 safeAddProp( url, VCWorkProp );
510 510
511 VObject *title = safeAddPropValue( vcard, VCTitleProp, c.jobTitle() ); 511 VObject *title = safeAddPropValue( vcard, VCTitleProp, c.jobTitle() );
512 safeAddProp( title, VCWorkProp ); 512 safeAddProp( title, VCWorkProp );
513 513
514 514
515 QStringList emails = c.emailList(); 515 QStringList emails = c.emailList();
516 // emails.prepend( c.defaultEmail() ); Fix for bugreport #1045 516 // emails.prepend( c.defaultEmail() ); Fix for bugreport #1045
517 for( QStringList::Iterator it = emails.begin(); it != emails.end(); ++it ) { 517 for( QStringList::Iterator it = emails.begin(); it != emails.end(); ++it ) {
518 VObject *email = safeAddPropValue( vcard, VCEmailAddressProp, *it ); 518 VObject *email = safeAddPropValue( vcard, VCEmailAddressProp, *it );
519 safeAddProp( email, VCInternetProp ); 519 safeAddProp( email, VCInternetProp );
520 } 520 }
521 521
522 safeAddPropValue( vcard, VCNoteProp, c.notes() ); 522 safeAddPropValue( vcard, VCNoteProp, c.notes() );
523 523
524 // Exporting Birthday regarding RFC 2425 (5.8.4) 524 // Exporting Birthday regarding RFC 2425 (5.8.4)
525 if ( c.birthday().isValid() ){ 525 if ( c.birthday().isValid() ){
526 safeAddPropValue( vcard, VCBirthDateProp, convDateToVCardDate( c.birthday() ) ); 526 safeAddPropValue( vcard, VCBirthDateProp, convDateToVCardDate( c.birthday() ) );
527 } 527 }
528 528
529 if ( !c.company().isEmpty() || !c.department().isEmpty() || !c.office().isEmpty() ) { 529 if ( !c.company().isEmpty() || !c.department().isEmpty() || !c.office().isEmpty() ) {
530 VObject *org = safeAddProp( vcard, VCOrgProp ); 530 VObject *org = safeAddProp( vcard, VCOrgProp );
531 safeAddPropValue( org, VCOrgNameProp, c.company() ); 531 safeAddPropValue( org, VCOrgNameProp, c.company() );
532 safeAddPropValue( org, VCOrgUnitProp, c.department() ); 532 safeAddPropValue( org, VCOrgUnitProp, c.department() );
533 safeAddPropValue( org, VCOrgUnit2Prop, c.office() ); 533 safeAddPropValue( org, VCOrgUnit2Prop, c.office() );
534 } 534 }
535 535
536 // some values we have to export as custom fields 536 // some values we have to export as custom fields
537 safeAddPropValue( vcard, "X-Qtopia-Profession", c.profession() ); 537 safeAddPropValue( vcard, "X-Qtopia-Profession", c.profession() );
538 safeAddPropValue( vcard, "X-Qtopia-Manager", c.manager() ); 538 safeAddPropValue( vcard, "X-Qtopia-Manager", c.manager() );
539 safeAddPropValue( vcard, "X-Qtopia-Assistant", c.assistant() ); 539 safeAddPropValue( vcard, "X-Qtopia-Assistant", c.assistant() );
540 540
541 safeAddPropValue( vcard, "X-Qtopia-Spouse", c.spouse() ); 541 safeAddPropValue( vcard, "X-Qtopia-Spouse", c.spouse() );
542 safeAddPropValue( vcard, "X-Qtopia-Gender", c.gender() ); 542 safeAddPropValue( vcard, "X-Qtopia-Gender", c.gender() );
543 if ( c.anniversary().isValid() ){ 543 if ( c.anniversary().isValid() ){
544 safeAddPropValue( vcard, "X-Qtopia-Anniversary", convDateToVCardDate( c.anniversary() ) ); 544 safeAddPropValue( vcard, "X-Qtopia-Anniversary", convDateToVCardDate( c.anniversary() ) );
545 } 545 }
546 safeAddPropValue( vcard, "X-Qtopia-Nickname", c.nickname() ); 546 safeAddPropValue( vcard, "X-Qtopia-Nickname", c.nickname() );
547 safeAddPropValue( vcard, "X-Qtopia-Children", c.children() ); 547 safeAddPropValue( vcard, "X-Qtopia-Children", c.children() );
548 548
549 return vcard; 549 return vcard;
550} 550}
551 551
552QString OPimContactAccessBackend_VCard::convDateToVCardDate( const QDate& d ) const 552QString OPimContactAccessBackend_VCard::convDateToVCardDate( const QDate& d ) const
553{ 553{
554 QString str_rfc2425 = QString("%1-%2-%3") 554 QString str_rfc2425 = QString("%1-%2-%3")
555 .arg( d.year() ) 555 .arg( d.year() )
556 .arg( d.month(), 2 ) 556 .arg( d.month(), 2 )
557 .arg( d.day(), 2 ); 557 .arg( d.day(), 2 );
558 // Now replace spaces with "0"... 558 // Now replace spaces with "0"...
559 int pos = 0; 559 int pos = 0;
560 while ( ( pos = str_rfc2425.find (' ') ) > 0 ) 560 while ( ( pos = str_rfc2425.find (' ') ) > 0 )
561 str_rfc2425.replace( pos, 1, "0" ); 561 str_rfc2425.replace( pos, 1, "0" );
562 562
563 return str_rfc2425; 563 return str_rfc2425;
564} 564}
565 565
566QDate OPimContactAccessBackend_VCard::convVCardDateToDate( const QString& datestr ) 566QDate OPimContactAccessBackend_VCard::convVCardDateToDate( const QString& datestr )
567{ 567{
568 int monthPos = datestr.find('-'); 568 int monthPos = datestr.find('-');
569 int dayPos = datestr.find('-', monthPos+1 ); 569 int dayPos = datestr.find('-', monthPos+1 );
570 int sep_ignore = 1; 570 int sep_ignore = 1;
571 if ( monthPos == -1 || dayPos == -1 ) { 571 if ( monthPos == -1 || dayPos == -1 ) {
572 odebug << "fromString didn't find - in str = " << datestr << "; mpos = " << monthPos << " ypos = " << dayPos << "" << oendl; 572 odebug << "fromString didn't find - in str = " << datestr << "; mpos = " << monthPos << " ypos = " << dayPos << "" << oendl;
573 // Ok.. No "-" found, therefore we will try to read other format ( YYYYMMDD ) 573 // Ok.. No "-" found, therefore we will try to read other format ( YYYYMMDD )
574 if ( datestr.length() == 8 ){ 574 if ( datestr.length() == 8 ){
575 monthPos = 4; 575 monthPos = 4;
576 dayPos = 6; 576 dayPos = 6;
577 sep_ignore = 0; 577 sep_ignore = 0;
578 odebug << "Try with follwing positions str = " << datestr << "; mpos = " << monthPos << " ypos = " << dayPos << "" << oendl; 578 odebug << "Try with follwing positions str = " << datestr << "; mpos = " << monthPos << " ypos = " << dayPos << "" << oendl;
579 } else { 579 } else {
580 return QDate(); 580 return QDate();
581 } 581 }
582 } 582 }
583 int y = datestr.left( monthPos ).toInt(); 583 int y = datestr.left( monthPos ).toInt();
584 int m = datestr.mid( monthPos + sep_ignore, dayPos - monthPos - sep_ignore ).toInt(); 584 int m = datestr.mid( monthPos + sep_ignore, dayPos - monthPos - sep_ignore ).toInt();
585 int d = datestr.mid( dayPos + sep_ignore ).toInt(); 585 int d = datestr.mid( dayPos + sep_ignore ).toInt();
586 odebug << "TimeConversion::fromString ymd = " << datestr << " => " << y << " " << m << " " << d << "; mpos = " << monthPos << " ypos = " << dayPos << "" << oendl; 586 odebug << "TimeConversion::fromString ymd = " << datestr << " => " << y << " " << m << " " << d << "; mpos = " << monthPos << " ypos = " << dayPos << "" << oendl;
587 QDate date ( y,m,d ); 587 QDate date ( y,m,d );
588 return date; 588 return date;
589} 589}
590 590
591VObject* OPimContactAccessBackend_VCard::safeAddPropValue( VObject *o, const char *prop, const QString &value ) 591VObject* OPimContactAccessBackend_VCard::safeAddPropValue( VObject *o, const char *prop, const QString &value )
592{ 592{
593 VObject *ret = 0; 593 VObject *ret = 0;
594 if ( o && !value.isEmpty() ) 594 if ( o && !value.isEmpty() )
595 ret = addPropValue( o, prop, value.utf8() ); 595 ret = addPropValue( o, prop, value.utf8() );
596 return ret; 596 return ret;
597} 597}
598 598
599VObject* OPimContactAccessBackend_VCard::safeAddProp( VObject *o, const char *prop) 599VObject* OPimContactAccessBackend_VCard::safeAddProp( VObject *o, const char *prop)
600{ 600{
601 VObject *ret = 0; 601 VObject *ret = 0;
602 if ( o ) 602 if ( o )
603 ret = addProp( o, prop ); 603 ret = addProp( o, prop );
604 return ret; 604 return ret;
605} 605}
606 606
607 607
608 608
609} 609}