summaryrefslogtreecommitdiffabout
path: root/kabc
authorzautrix <zautrix>2005-11-12 23:42:08 (UTC)
committer zautrix <zautrix>2005-11-12 23:42:08 (UTC)
commit4145dc4a513d5899d8a2b9e4573d8140d871b386 (patch) (unidiff)
tree11bb2010757a65d90c2ed7e4d40d4e72d218eeb9 /kabc
parent9e47202fd38512cc523c09cf8878f4c5d836e777 (diff)
downloadkdepimpi-4145dc4a513d5899d8a2b9e4573d8140d871b386.zip
kdepimpi-4145dc4a513d5899d8a2b9e4573d8140d871b386.tar.gz
kdepimpi-4145dc4a513d5899d8a2b9e4573d8140d871b386.tar.bz2
fix
Diffstat (limited to 'kabc') (more/less context) (ignore whitespace changes)
-rw-r--r--kabc/vcardformatimpl.cpp20
1 files changed, 12 insertions, 8 deletions
diff --git a/kabc/vcardformatimpl.cpp b/kabc/vcardformatimpl.cpp
index 26fd4f0..580c28b 100644
--- a/kabc/vcardformatimpl.cpp
+++ b/kabc/vcardformatimpl.cpp
@@ -472,564 +472,568 @@ void VCardFormatImpl::addUTCValue( VCard *vcard, const TimeZone &tz )
472{ 472{
473 if ( !tz.isValid() ) return; 473 if ( !tz.isValid() ) return;
474 474
475 ContentLine cl; 475 ContentLine cl;
476 cl.setName( EntityTypeToParamName( EntityTimeZone ) ); 476 cl.setName( EntityTypeToParamName( EntityTimeZone ) );
477 477
478 UTCValue *v = new UTCValue; 478 UTCValue *v = new UTCValue;
479 479
480 v->setPositive( tz.offset() >= 0 ); 480 v->setPositive( tz.offset() >= 0 );
481 v->setHour( (tz.offset() / 60) * ( tz.offset() >= 0 ? 1 : -1 ) ); 481 v->setHour( (tz.offset() / 60) * ( tz.offset() >= 0 ? 1 : -1 ) );
482 v->setMinute( (tz.offset() % 60) * ( tz.offset() >= 0 ? 1 : -1 ) ); 482 v->setMinute( (tz.offset() % 60) * ( tz.offset() >= 0 ? 1 : -1 ) );
483 483
484 cl.setValue( v ); 484 cl.setValue( v );
485 vcard->add(cl); 485 vcard->add(cl);
486} 486}
487 487
488void VCardFormatImpl::addClassValue( VCard *vcard, const Secrecy &secrecy ) 488void VCardFormatImpl::addClassValue( VCard *vcard, const Secrecy &secrecy )
489{ 489{
490 ContentLine cl; 490 ContentLine cl;
491 cl.setName( EntityTypeToParamName( EntityClass ) ); 491 cl.setName( EntityTypeToParamName( EntityClass ) );
492 492
493 ClassValue *v = new ClassValue; 493 ClassValue *v = new ClassValue;
494 switch ( secrecy.type() ) { 494 switch ( secrecy.type() ) {
495 case Secrecy::Public: 495 case Secrecy::Public:
496 v->setType( (int)ClassValue::Public ); 496 v->setType( (int)ClassValue::Public );
497 break; 497 break;
498 case Secrecy::Private: 498 case Secrecy::Private:
499 v->setType( (int)ClassValue::Private ); 499 v->setType( (int)ClassValue::Private );
500 break; 500 break;
501 case Secrecy::Confidential: 501 case Secrecy::Confidential:
502 v->setType( (int)ClassValue::Confidential ); 502 v->setType( (int)ClassValue::Confidential );
503 break; 503 break;
504 } 504 }
505 505
506 cl.setValue( v ); 506 cl.setValue( v );
507 vcard->add(cl); 507 vcard->add(cl);
508} 508}
509 509
510 510
511Address VCardFormatImpl::readAddressValue( ContentLine *cl ) 511Address VCardFormatImpl::readAddressValue( ContentLine *cl )
512{ 512{
513 Address a; 513 Address a;
514 AdrValue *v = (AdrValue *)cl->value(); 514 AdrValue *v = (AdrValue *)cl->value();
515 a.setPostOfficeBox( QString::fromUtf8( v->poBox() ) ); 515 a.setPostOfficeBox( QString::fromUtf8( v->poBox() ) );
516 a.setExtended( QString::fromUtf8( v->extAddress() ) ); 516 a.setExtended( QString::fromUtf8( v->extAddress() ) );
517 a.setStreet( QString::fromUtf8( v->street() ) ); 517 a.setStreet( QString::fromUtf8( v->street() ) );
518 a.setLocality( QString::fromUtf8( v->locality() ) ); 518 a.setLocality( QString::fromUtf8( v->locality() ) );
519 a.setRegion( QString::fromUtf8( v->region() ) ); 519 a.setRegion( QString::fromUtf8( v->region() ) );
520 a.setPostalCode( QString::fromUtf8( v->postCode() ) ); 520 a.setPostalCode( QString::fromUtf8( v->postCode() ) );
521 a.setCountry( QString::fromUtf8( v->countryName() ) ); 521 a.setCountry( QString::fromUtf8( v->countryName() ) );
522 522
523 a.setType( readAddressParam( cl ) ); 523 a.setType( readAddressParam( cl ) );
524 524
525 return a; 525 return a;
526} 526}
527 527
528int VCardFormatImpl::readAddressParam( ContentLine *cl ) 528int VCardFormatImpl::readAddressParam( ContentLine *cl )
529{ 529{
530 int type = 0; 530 int type = 0;
531 ParamList params = cl->paramList(); 531 ParamList params = cl->paramList();
532 ParamListIterator it( params ); 532 ParamListIterator it( params );
533 QCString tmpStr; 533 QCString tmpStr;
534 for( ; it.current(); ++it ) { 534 for( ; it.current(); ++it ) {
535 if ( (*it)->name().upper() == "TYPE" ) { 535 if ( (*it)->name().upper() == "TYPE" ) {
536 tmpStr = (*it)->value().lower(); 536 tmpStr = (*it)->value().lower();
537 if ( tmpStr == "dom" ) type |= Address::Dom; 537 if ( tmpStr == "dom" ) type |= Address::Dom;
538 else if ( tmpStr == "intl" ) type |= Address::Intl; 538 else if ( tmpStr == "intl" ) type |= Address::Intl;
539 else if ( tmpStr == "parcel" ) type |= Address::Parcel; 539 else if ( tmpStr == "parcel" ) type |= Address::Parcel;
540 else if ( tmpStr == "postal" ) type |= Address::Postal; 540 else if ( tmpStr == "postal" ) type |= Address::Postal;
541 else if ( tmpStr == "work" ) type |= Address::Work; 541 else if ( tmpStr == "work" ) type |= Address::Work;
542 else if ( tmpStr == "home" ) type |= Address::Home; 542 else if ( tmpStr == "home" ) type |= Address::Home;
543 else if ( tmpStr == "pref" ) type |= Address::Pref; 543 else if ( tmpStr == "pref" ) type |= Address::Pref;
544 } 544 }
545 } 545 }
546 return type; 546 return type;
547} 547}
548 548
549void VCardFormatImpl::addNValue( VCard *vcard, const Addressee &a ) 549void VCardFormatImpl::addNValue( VCard *vcard, const Addressee &a )
550{ 550{
551 ContentLine cl; 551 ContentLine cl;
552 cl.setName(EntityTypeToParamName( EntityN ) ); 552 cl.setName(EntityTypeToParamName( EntityN ) );
553 NValue *v = new NValue; 553 NValue *v = new NValue;
554 v->setFamily( a.familyName().utf8() ); 554 v->setFamily( a.familyName().utf8() );
555 v->setGiven( a.givenName().utf8() ); 555 v->setGiven( a.givenName().utf8() );
556 v->setMiddle( a.additionalName().utf8() ); 556 v->setMiddle( a.additionalName().utf8() );
557 v->setPrefix( a.prefix().utf8() ); 557 v->setPrefix( a.prefix().utf8() );
558 v->setSuffix( a.suffix().utf8() ); 558 v->setSuffix( a.suffix().utf8() );
559 559
560 cl.setValue( v ); 560 cl.setValue( v );
561 vcard->add(cl); 561 vcard->add(cl);
562} 562}
563 563
564void VCardFormatImpl::readNValue( ContentLine *cl, Addressee &a ) 564void VCardFormatImpl::readNValue( ContentLine *cl, Addressee &a )
565{ 565{
566 NValue *v = (NValue *)cl->value(); 566 NValue *v = (NValue *)cl->value();
567 a.setFamilyName( QString::fromUtf8( v->family() ) ); 567 a.setFamilyName( QString::fromUtf8( v->family() ) );
568 a.setGivenName( QString::fromUtf8( v->given() ) ); 568 a.setGivenName( QString::fromUtf8( v->given() ) );
569 a.setAdditionalName( QString::fromUtf8( v->middle() ) ); 569 a.setAdditionalName( QString::fromUtf8( v->middle() ) );
570 a.setPrefix( QString::fromUtf8( v->prefix() ) ); 570 a.setPrefix( QString::fromUtf8( v->prefix() ) );
571 a.setSuffix( QString::fromUtf8( v->suffix() ) ); 571 a.setSuffix( QString::fromUtf8( v->suffix() ) );
572} 572}
573 573
574void VCardFormatImpl::addTelephoneValue( VCard *v, const PhoneNumber &p ) 574void VCardFormatImpl::addTelephoneValue( VCard *v, const PhoneNumber &p )
575{ 575{
576 if ( p.number().isEmpty() ) 576 if ( p.number().isEmpty() )
577 return; 577 return;
578 578
579 ContentLine cl; 579 ContentLine cl;
580 cl.setName(EntityTypeToParamName(EntityTelephone)); 580 cl.setName(EntityTypeToParamName(EntityTelephone));
581 cl.setValue(new TelValue( p.number().utf8() )); 581 cl.setValue(new TelValue( p.number().utf8() ));
582 582
583 ParamList params; 583 ParamList params;
584 if( p.type() & PhoneNumber::Home ) params.append( new Param( "TYPE", "home" ) ); 584 if( p.type() & PhoneNumber::Home ) params.append( new Param( "TYPE", "home" ) );
585 if( p.type() & PhoneNumber::Work ) params.append( new Param( "TYPE", "work" ) ); 585 if( p.type() & PhoneNumber::Work ) params.append( new Param( "TYPE", "work" ) );
586 if( p.type() & PhoneNumber::Msg ) params.append( new Param( "TYPE", "msg" ) ); 586 if( p.type() & PhoneNumber::Msg ) params.append( new Param( "TYPE", "msg" ) );
587 if( p.type() & PhoneNumber::Pref ) params.append( new Param( "TYPE", "pref" ) ); 587 if( p.type() & PhoneNumber::Pref ) params.append( new Param( "TYPE", "pref" ) );
588 if( p.type() & PhoneNumber::Voice ) params.append( new Param( "TYPE", "voice" ) ); 588 if( p.type() & PhoneNumber::Voice ) params.append( new Param( "TYPE", "voice" ) );
589 if( p.type() & PhoneNumber::Fax ) params.append( new Param( "TYPE", "fax" ) ); 589 if( p.type() & PhoneNumber::Fax ) params.append( new Param( "TYPE", "fax" ) );
590 if( p.type() & PhoneNumber::Cell ) params.append( new Param( "TYPE", "cell" ) ); 590 if( p.type() & PhoneNumber::Cell ) params.append( new Param( "TYPE", "cell" ) );
591 if( p.type() & PhoneNumber::Video ) params.append( new Param( "TYPE", "video" ) ); 591 if( p.type() & PhoneNumber::Video ) params.append( new Param( "TYPE", "video" ) );
592 if( p.type() & PhoneNumber::Bbs ) params.append( new Param( "TYPE", "bbs" ) ); 592 if( p.type() & PhoneNumber::Bbs ) params.append( new Param( "TYPE", "bbs" ) );
593 if( p.type() & PhoneNumber::Modem ) params.append( new Param( "TYPE", "modem" ) ); 593 if( p.type() & PhoneNumber::Modem ) params.append( new Param( "TYPE", "modem" ) );
594 if( p.type() & PhoneNumber::Car ) params.append( new Param( "TYPE", "car" ) ); 594 if( p.type() & PhoneNumber::Car ) params.append( new Param( "TYPE", "car" ) );
595 if( p.type() & PhoneNumber::Isdn ) params.append( new Param( "TYPE", "isdn" ) ); 595 if( p.type() & PhoneNumber::Isdn ) params.append( new Param( "TYPE", "isdn" ) );
596 if( p.type() & PhoneNumber::Pcs ) params.append( new Param( "TYPE", "pcs" ) ); 596 if( p.type() & PhoneNumber::Pcs ) params.append( new Param( "TYPE", "pcs" ) );
597 if( p.type() & PhoneNumber::Pager ) params.append( new Param( "TYPE", "pager" ) ); 597 if( p.type() & PhoneNumber::Pager ) params.append( new Param( "TYPE", "pager" ) );
598 cl.setParamList( params ); 598 cl.setParamList( params );
599 599
600 v->add(cl); 600 v->add(cl);
601} 601}
602 602
603PhoneNumber VCardFormatImpl::readTelephoneValue( ContentLine *cl ) 603PhoneNumber VCardFormatImpl::readTelephoneValue( ContentLine *cl )
604{ 604{
605 PhoneNumber p; 605 PhoneNumber p;
606 TelValue *value = (TelValue *)cl->value(); 606 TelValue *value = (TelValue *)cl->value();
607 p.setNumber( QString::fromUtf8( value->asString() ) ); 607 p.setNumber( QString::fromUtf8( value->asString() ) );
608 608
609 int type = 0; 609 int type = 0;
610 ParamList params = cl->paramList(); 610 ParamList params = cl->paramList();
611 ParamListIterator it( params ); 611 ParamListIterator it( params );
612 QCString tmpStr; 612 QCString tmpStr;
613 for( ; it.current(); ++it ) { 613 for( ; it.current(); ++it ) {
614 if ( (*it)->name() == "TYPE" ) { 614 if ( (*it)->name() == "TYPE" ) {
615 tmpStr = (*it)->value().lower(); 615 tmpStr = (*it)->value().lower();
616 if ( tmpStr == "home" ) type |= PhoneNumber::Home; 616 if ( tmpStr == "home" ) type |= PhoneNumber::Home;
617 else if ( tmpStr == "work" ) type |= PhoneNumber::Work; 617 else if ( tmpStr == "work" ) type |= PhoneNumber::Work;
618 else if ( tmpStr == "msg" ) type |= PhoneNumber::Msg; 618 else if ( tmpStr == "msg" ) type |= PhoneNumber::Msg;
619 else if ( tmpStr == "pref" ) type |= PhoneNumber::Pref; 619 else if ( tmpStr == "pref" ) type |= PhoneNumber::Pref;
620 else if ( tmpStr == "voice" ) type |= PhoneNumber::Voice; 620 else if ( tmpStr == "voice" ) type |= PhoneNumber::Voice;
621 else if ( tmpStr == "fax" ) type |= PhoneNumber::Fax; 621 else if ( tmpStr == "fax" ) type |= PhoneNumber::Fax;
622 else if ( tmpStr == "cell" ) type |= PhoneNumber::Cell; 622 else if ( tmpStr == "cell" ) type |= PhoneNumber::Cell;
623 else if ( tmpStr == "video" ) type |= PhoneNumber::Video; 623 else if ( tmpStr == "video" ) type |= PhoneNumber::Video;
624 else if ( tmpStr == "bbs" ) type |= PhoneNumber::Bbs; 624 else if ( tmpStr == "bbs" ) type |= PhoneNumber::Bbs;
625 else if ( tmpStr == "modem" ) type |= PhoneNumber::Modem; 625 else if ( tmpStr == "modem" ) type |= PhoneNumber::Modem;
626 else if ( tmpStr == "car" ) type |= PhoneNumber::Car; 626 else if ( tmpStr == "car" ) type |= PhoneNumber::Car;
627 else if ( tmpStr == "isdn" ) type |= PhoneNumber::Isdn; 627 else if ( tmpStr == "isdn" ) type |= PhoneNumber::Isdn;
628 else if ( tmpStr == "pcs" ) type |= PhoneNumber::Pcs; 628 else if ( tmpStr == "pcs" ) type |= PhoneNumber::Pcs;
629 else if ( tmpStr == "pager" ) type |= PhoneNumber::Pager; 629 else if ( tmpStr == "pager" ) type |= PhoneNumber::Pager;
630 } 630 }
631 } 631 }
632 p.setType( type ); 632 p.setType( type );
633 633
634 return p; 634 return p;
635} 635}
636 636
637QString VCardFormatImpl::readTextValue( ContentLine *cl ) 637QString VCardFormatImpl::readTextValue( ContentLine *cl )
638{ 638{
639 VCARD::Value *value = cl->value(); 639 VCARD::Value *value = cl->value();
640 if ( value ) { 640 if ( value ) {
641 return QString::fromUtf8( value->asString() ); 641 return QString::fromUtf8( value->asString() );
642 } else { 642 } else {
643 kdDebug(5700) << "No value: " << cl->asString() << endl; 643 kdDebug(5700) << "No value: " << cl->asString() << endl;
644 qDebug("No value: %s", (const char*)(cl->asString())); 644 qDebug("No value: %s", (const char*)(cl->asString()));
645 return QString::null; 645 return QString::null;
646 } 646 }
647} 647}
648 648
649QDate VCardFormatImpl::readDateValue( ContentLine *cl ) 649QDate VCardFormatImpl::readDateValue( ContentLine *cl )
650{ 650{
651 DateValue *dateValue = (DateValue *)cl->value(); 651 DateValue *dateValue = (DateValue *)cl->value();
652 if ( dateValue ) 652 if ( dateValue )
653 return dateValue->qdate(); 653 return dateValue->qdate();
654 else 654 else
655 return QDate(); 655 return QDate();
656} 656}
657 657
658QDateTime VCardFormatImpl::readDateTimeValue( ContentLine *cl ) 658QDateTime VCardFormatImpl::readDateTimeValue( ContentLine *cl )
659{ 659{
660 DateValue *dateValue = (DateValue *)cl->value(); 660 DateValue *dateValue = (DateValue *)cl->value();
661 if ( dateValue ) 661 if ( dateValue )
662 return dateValue->qdt(); 662 return dateValue->qdt();
663 else 663 else
664 return QDateTime(); 664 return QDateTime();
665} 665}
666 666
667Geo VCardFormatImpl::readGeoValue( ContentLine *cl ) 667Geo VCardFormatImpl::readGeoValue( ContentLine *cl )
668{ 668{
669 GeoValue *geoValue = (GeoValue *)cl->value(); 669 GeoValue *geoValue = (GeoValue *)cl->value();
670 if ( geoValue ) { 670 if ( geoValue ) {
671 Geo geo( geoValue->latitude(), geoValue->longitude() ); 671 Geo geo( geoValue->latitude(), geoValue->longitude() );
672 return geo; 672 return geo;
673 } else 673 } else
674 return Geo(); 674 return Geo();
675} 675}
676 676
677TimeZone VCardFormatImpl::readUTCValue( ContentLine *cl ) 677TimeZone VCardFormatImpl::readUTCValue( ContentLine *cl )
678{ 678{
679 UTCValue *utcValue = (UTCValue *)cl->value(); 679 UTCValue *utcValue = (UTCValue *)cl->value();
680 if ( utcValue ) { 680 if ( utcValue ) {
681 TimeZone tz; 681 TimeZone tz;
682 tz.setOffset(((utcValue->hour()*60)+utcValue->minute())*(utcValue->positive() ? 1 : -1)); 682 tz.setOffset(((utcValue->hour()*60)+utcValue->minute())*(utcValue->positive() ? 1 : -1));
683 return tz; 683 return tz;
684 } else 684 } else
685 return TimeZone(); 685 return TimeZone();
686} 686}
687 687
688Secrecy VCardFormatImpl::readClassValue( ContentLine *cl ) 688Secrecy VCardFormatImpl::readClassValue( ContentLine *cl )
689{ 689{
690 ClassValue *classValue = (ClassValue *)cl->value(); 690 ClassValue *classValue = (ClassValue *)cl->value();
691 if ( classValue ) { 691 if ( classValue ) {
692 Secrecy secrecy; 692 Secrecy secrecy;
693 switch ( classValue->type() ) { 693 switch ( classValue->type() ) {
694 case ClassValue::Public: 694 case ClassValue::Public:
695 secrecy.setType( Secrecy::Public ); 695 secrecy.setType( Secrecy::Public );
696 break; 696 break;
697 case ClassValue::Private: 697 case ClassValue::Private:
698 secrecy.setType( Secrecy::Private ); 698 secrecy.setType( Secrecy::Private );
699 break; 699 break;
700 case ClassValue::Confidential: 700 case ClassValue::Confidential:
701 secrecy.setType( Secrecy::Confidential ); 701 secrecy.setType( Secrecy::Confidential );
702 break; 702 break;
703 } 703 }
704 704
705 return secrecy; 705 return secrecy;
706 } else 706 } else
707 return Secrecy(); 707 return Secrecy();
708} 708}
709 709
710void VCardFormatImpl::addKeyValue( VCARD::VCard *vcard, const Key &key ) 710void VCardFormatImpl::addKeyValue( VCARD::VCard *vcard, const Key &key )
711{ 711{
712 ContentLine cl; 712 ContentLine cl;
713 cl.setName( EntityTypeToParamName( EntityKey ) ); 713 cl.setName( EntityTypeToParamName( EntityKey ) );
714 714
715 ParamList params; 715 ParamList params;
716 if ( key.isBinary() ) { 716 if ( key.isBinary() ) {
717 cl.setValue( new TextValue( KCodecs::base64Encode( key.binaryData() ) ) ); 717 cl.setValue( new TextValue( KCodecs::base64Encode( key.binaryData() ) ) );
718 params.append( new Param( "ENCODING", "b" ) ); 718 params.append( new Param( "ENCODING", "b" ) );
719 } else { 719 } else {
720 cl.setValue( new TextValue( key.textData().utf8() ) ); 720 cl.setValue( new TextValue( key.textData().utf8() ) );
721 } 721 }
722 722
723 switch ( key.type() ) { 723 switch ( key.type() ) {
724 case Key::X509: 724 case Key::X509:
725 params.append( new Param( "TYPE", "X509" ) ); 725 params.append( new Param( "TYPE", "X509" ) );
726 break; 726 break;
727 case Key::PGP: 727 case Key::PGP:
728 params.append( new Param( "TYPE", "PGP" ) ); 728 params.append( new Param( "TYPE", "PGP" ) );
729 break; 729 break;
730 case Key::Custom: 730 case Key::Custom:
731 params.append( new Param( "TYPE", key.customTypeString().utf8() ) ); 731 params.append( new Param( "TYPE", key.customTypeString().utf8() ) );
732 break; 732 break;
733 } 733 }
734 734
735 cl.setParamList( params ); 735 cl.setParamList( params );
736 vcard->add( cl ); 736 vcard->add( cl );
737} 737}
738 738
739Key VCardFormatImpl::readKeyValue( VCARD::ContentLine *cl ) 739Key VCardFormatImpl::readKeyValue( VCARD::ContentLine *cl )
740{ 740{
741 Key key; 741 Key key;
742 bool isBinary = false; 742 bool isBinary = false;
743 TextValue *v = (TextValue *)cl->value(); 743 TextValue *v = (TextValue *)cl->value();
744 744
745 ParamList params = cl->paramList(); 745 ParamList params = cl->paramList();
746 ParamListIterator it( params ); 746 ParamListIterator it( params );
747 for( ; it.current(); ++it ) { 747 for( ; it.current(); ++it ) {
748 if ( (*it)->name() == "ENCODING" && (*it)->value() == "b" ) 748 if ( (*it)->name() == "ENCODING" && (*it)->value() == "b" )
749 isBinary = true; 749 isBinary = true;
750 if ( (*it)->name() == "TYPE" ) { 750 if ( (*it)->name() == "TYPE" ) {
751 if ( (*it)->value().isEmpty() ) 751 if ( (*it)->value().isEmpty() )
752 continue; 752 continue;
753 if ( (*it)->value() == "X509" ) 753 if ( (*it)->value() == "X509" )
754 key.setType( Key::X509 ); 754 key.setType( Key::X509 );
755 else if ( (*it)->value() == "PGP" ) 755 else if ( (*it)->value() == "PGP" )
756 key.setType( Key::PGP ); 756 key.setType( Key::PGP );
757 else { 757 else {
758 key.setType( Key::Custom ); 758 key.setType( Key::Custom );
759 key.setCustomTypeString( QString::fromUtf8( (*it)->value() ) ); 759 key.setCustomTypeString( QString::fromUtf8( (*it)->value() ) );
760 } 760 }
761 } 761 }
762 } 762 }
763 763
764 764
765 if ( isBinary ) { 765 if ( isBinary ) {
766 QByteArray data; 766 QByteArray data;
767 KCodecs::base64Decode( v->asString().stripWhiteSpace(), data ); 767 KCodecs::base64Decode( v->asString().stripWhiteSpace(), data );
768 key.setBinaryData( data ); 768 key.setBinaryData( data );
769 } else { 769 } else {
770 key.setTextData( QString::fromUtf8( v->asString() ) ); 770 key.setTextData( QString::fromUtf8( v->asString() ) );
771 } 771 }
772 772
773 return key; 773 return key;
774} 774}
775 775
776 776
777void VCardFormatImpl::addAgentValue( VCARD::VCard *vcard, const Agent &agent ) 777void VCardFormatImpl::addAgentValue( VCARD::VCard *vcard, const Agent &agent )
778{ 778{
779 if ( agent.isIntern() && !agent.addressee() ) 779 if ( agent.isIntern() && !agent.addressee() )
780 return; 780 return;
781 781
782 if ( !agent.isIntern() && agent.url().isEmpty() ) 782 if ( !agent.isIntern() && agent.url().isEmpty() )
783 return; 783 return;
784 784
785 ContentLine cl; 785 ContentLine cl;
786 cl.setName( EntityTypeToParamName( EntityAgent ) ); 786 cl.setName( EntityTypeToParamName( EntityAgent ) );
787 787
788 ParamList params; 788 ParamList params;
789 if ( agent.isIntern() ) { 789 if ( agent.isIntern() ) {
790 QString vstr; 790 QString vstr;
791 Addressee *addr = agent.addressee(); 791 Addressee *addr = agent.addressee();
792 if ( addr ) { 792 if ( addr ) {
793 writeToString( (*addr), vstr ); 793 writeToString( (*addr), vstr );
794 794
795 qDebug("VCardFormatImpl::addAgentValue please verify if replace is correct"); 795 qDebug("VCardFormatImpl::addAgentValue please verify if replace is correct");
796/*US 796/*US
797 vstr.replace( ":", "\\:" ); 797 vstr.replace( ":", "\\:" );
798 vstr.replace( ",", "\\," ); 798 vstr.replace( ",", "\\," );
799 vstr.replace( ";", "\\;" ); 799 vstr.replace( ";", "\\;" );
800 vstr.replace( "\r\n", "\\n" ); 800 vstr.replace( "\r\n", "\\n" );
801*/ 801*/
802 vstr.replace( QRegExp(":"), "\\:" ); 802 vstr.replace( QRegExp(":"), "\\:" );
803 vstr.replace( QRegExp(","), "\\," ); 803 vstr.replace( QRegExp(","), "\\," );
804 vstr.replace( QRegExp(";"), "\\;" ); 804 vstr.replace( QRegExp(";"), "\\;" );
805 vstr.replace( QRegExp("\r\n"), "\\n" ); 805 vstr.replace( QRegExp("\r\n"), "\\n" );
806 806
807 cl.setValue( new TextValue( vstr.utf8() ) ); 807 cl.setValue( new TextValue( vstr.utf8() ) );
808 } else 808 } else
809 return; 809 return;
810 } else { 810 } else {
811 cl.setValue( new TextValue( agent.url().utf8() ) ); 811 cl.setValue( new TextValue( agent.url().utf8() ) );
812 params.append( new Param( "VALUE", "uri" ) ); 812 params.append( new Param( "VALUE", "uri" ) );
813 } 813 }
814 814
815 cl.setParamList( params ); 815 cl.setParamList( params );
816 vcard->add( cl ); 816 vcard->add( cl );
817} 817}
818 818
819Agent VCardFormatImpl::readAgentValue( VCARD::ContentLine *cl ) 819Agent VCardFormatImpl::readAgentValue( VCARD::ContentLine *cl )
820{ 820{
821 Agent agent; 821 Agent agent;
822 bool isIntern = true; 822 bool isIntern = true;
823 TextValue *v = (TextValue *)cl->value(); 823 TextValue *v = (TextValue *)cl->value();
824 824
825 ParamList params = cl->paramList(); 825 ParamList params = cl->paramList();
826 ParamListIterator it( params ); 826 ParamListIterator it( params );
827 for( ; it.current(); ++it ) { 827 for( ; it.current(); ++it ) {
828 if ( (*it)->name() == "VALUE" && (*it)->value() == "uri" ) 828 if ( (*it)->name() == "VALUE" && (*it)->value() == "uri" )
829 isIntern = false; 829 isIntern = false;
830 } 830 }
831 831
832 if ( isIntern ) { 832 if ( isIntern ) {
833 QString vstr = QString::fromUtf8( v->asString() ); 833 QString vstr = QString::fromUtf8( v->asString() );
834 qDebug("VCardFormatImpl::addAgentValue please verify if replace is correct"); 834 qDebug("VCardFormatImpl::addAgentValue please verify if replace is correct");
835/*US 835/*US
836 vstr.replace( "\\n", "\r\n" ); 836 vstr.replace( "\\n", "\r\n" );
837 vstr.replace( "\\:", ":" ); 837 vstr.replace( "\\:", ":" );
838 vstr.replace( "\\,", "," ); 838 vstr.replace( "\\,", "," );
839 vstr.replace( "\\;", ";" ); 839 vstr.replace( "\\;", ";" );
840*/ 840*/
841 vstr.replace( QRegExp("\\\\n"), "\r\n" ); 841 vstr.replace( QRegExp("\\\\n"), "\r\n" );
842 vstr.replace( QRegExp("\\\\:"), ":" ); 842 vstr.replace( QRegExp("\\\\:"), ":" );
843 vstr.replace( QRegExp("\\\\,"), "," ); 843 vstr.replace( QRegExp("\\\\,"), "," );
844 vstr.replace( QRegExp("\\\\;"), ";" ); 844 vstr.replace( QRegExp("\\\\;"), ";" );
845 845
846 Addressee *addr = new Addressee; 846 Addressee *addr = new Addressee;
847 readFromString( vstr, *addr ); 847 readFromString( vstr, *addr );
848 agent.setAddressee( addr ); 848 agent.setAddressee( addr );
849 } else { 849 } else {
850 agent.setUrl( QString::fromUtf8( v->asString() ) ); 850 agent.setUrl( QString::fromUtf8( v->asString() ) );
851 } 851 }
852 852
853 return agent; 853 return agent;
854} 854}
855 855
856#include <qstringlist.h>
856void VCardFormatImpl::addPictureValue( VCARD::VCard *vcard, VCARD::EntityType type, const Picture &pic, const Addressee &addr, bool intern ) 857void VCardFormatImpl::addPictureValue( VCARD::VCard *vcard, VCARD::EntityType type, const Picture &pic, const Addressee &addr, bool intern )
857{ 858{
858 ContentLine cl; 859 ContentLine cl;
859 cl.setName( EntityTypeToParamName( type ) ); 860 cl.setName( EntityTypeToParamName( type ) );
860 861 // qDebug( "IIIMMMMM %s",QImage::outputFormatList ().join("-").latin1() );
861 if ( pic.isIntern() && pic.data().isNull() ) 862 if ( pic.isIntern() && pic.data().isNull() )
862 return; 863 return;
863 864
864 if ( !pic.isIntern() && pic.url().isEmpty() ) 865 if ( !pic.isIntern() && pic.url().isEmpty() )
865 return; 866 return;
866 867
867 ParamList params; 868 ParamList params;
868 if ( pic.isIntern() ) { 869 if ( pic.isIntern() ) {
869 QImage img = pic.data(); 870 QImage img = pic.data();
870 if ( intern ) { // only for vCard export we really write the data inline 871 if ( intern ) { // only for vCard export we really write the data inline
871 QByteArray data; 872 QByteArray data;
872 QDataStream s( data, IO_WriteOnly ); 873 QDataStream s( data, IO_WriteOnly );
873 s.setVersion( 4 ); // to produce valid png files 874 s.setVersion( 4 ); // to produce valid png files
874 s << img; 875 s << img;
875 cl.setValue( new TextValue( KCodecs::base64Encode( data ) ) ); 876 cl.setValue( new TextValue( KCodecs::base64Encode( data ) ) );
876 877 params.append( new Param( "ENCODING", "b" ) );
878 if ( !pic.type().isEmpty() )
879 params.append( new Param( "TYPE", pic.type().utf8() ) );
877 } else { // save picture in cache 880 } else { // save picture in cache
878 QString dir; 881 QString dir;
879 if ( type == EntityPhoto ) 882 if ( type == EntityPhoto )
880 dir = "photos"; 883 dir = "photos";
881 if ( type == EntityLogo ) 884 if ( type == EntityLogo )
882 dir = "logos"; 885 dir = "logos";
883 886 QString imUrl = locateLocal( "data", "kabc/" + dir + "/" + addr.uid() );
884 img.save( locateLocal( "data", "kabc/" + dir + "/" + addr.uid() ), pic.type().utf8() ); 887 KABC::Picture* ppic =(KABC::Picture*) &pic;
885 cl.setValue( new TextValue( "<dummy>" ) ); 888 ppic->setUrl( imUrl );
889 img.save(imUrl, "PNG" );
890 cl.setValue( new TextValue( pic.url().utf8() ) );
891 params.append( new Param( "VALUE", "uri" ) );
886 } 892 }
887 params.append( new Param( "ENCODING", "b" ) ); 893
888 if ( !pic.type().isEmpty() )
889 params.append( new Param( "TYPE", pic.type().utf8() ) );
890 } else { 894 } else {
891 895
892 cl.setValue( new TextValue( pic.url().utf8() ) ); 896 cl.setValue( new TextValue( pic.url().utf8() ) );
893 params.append( new Param( "VALUE", "uri" ) ); 897 params.append( new Param( "VALUE", "uri" ) );
894 } 898 }
895 899
896 cl.setParamList( params ); 900 cl.setParamList( params );
897 vcard->add( cl ); 901 vcard->add( cl );
898} 902}
899 903
900Picture VCardFormatImpl::readPictureValue( VCARD::ContentLine *cl, VCARD::EntityType type, const Addressee &addr ) 904Picture VCardFormatImpl::readPictureValue( VCARD::ContentLine *cl, VCARD::EntityType type, const Addressee &addr )
901{ 905{
902 Picture pic; 906 Picture pic;
903 bool isInline = false; 907 bool isInline = false;
904 QString picType; 908 QString picType;
905 TextValue *v = (TextValue *)cl->value(); 909 TextValue *v = (TextValue *)cl->value();
906 910
907 ParamList params = cl->paramList(); 911 ParamList params = cl->paramList();
908 ParamListIterator it( params ); 912 ParamListIterator it( params );
909 for( ; it.current(); ++it ) { 913 for( ; it.current(); ++it ) {
910 if ( (*it)->name() == "ENCODING" && (*it)->value() == "b" ) 914 if ( (*it)->name() == "ENCODING" && (*it)->value() == "b" )
911 isInline = true; 915 isInline = true;
912 if ( (*it)->name() == "TYPE" && !(*it)->value().isEmpty() ) 916 if ( (*it)->name() == "TYPE" && !(*it)->value().isEmpty() )
913 picType = QString::fromUtf8( (*it)->value() ); 917 picType = QString::fromUtf8( (*it)->value() );
914 } 918 }
915 919
916 if ( isInline ) { 920 if ( isInline ) {
917 QImage img; 921 QImage img;
918 if ( v->asString() == "<dummy>" ) { // no picture inline stored => picture is in cache 922 if ( v->asString() == "<dummy>" ) { // no picture inline stored => picture is in cache
919 QString dir; 923 QString dir;
920 if ( type == EntityPhoto ) 924 if ( type == EntityPhoto )
921 dir = "photos"; 925 dir = "photos";
922 if ( type == EntityLogo ) 926 if ( type == EntityLogo )
923 dir = "logos"; 927 dir = "logos";
924 928
925 img.load( locateLocal( "data", "kabc/" + dir + "/" + addr.uid() ) ); 929 img.load( locateLocal( "data", "kabc/" + dir + "/" + addr.uid() ) );
926 } else { 930 } else {
927 QByteArray data; 931 QByteArray data;
928 KCodecs::base64Decode( v->asString(), data ); 932 KCodecs::base64Decode( v->asString(), data );
929 img.loadFromData( data ); 933 img.loadFromData( data );
930 } 934 }
931 pic.setData( img ); 935 pic.setData( img );
932 pic.setType( picType ); 936 pic.setType( picType );
933 } else { 937 } else {
934 pic.setUrl( QString::fromUtf8( v->asString() ) ); 938 pic.setUrl( QString::fromUtf8( v->asString() ) );
935 } 939 }
936 940
937 return pic; 941 return pic;
938} 942}
939 943
940void VCardFormatImpl::addSoundValue( VCARD::VCard *vcard, const Sound &sound, const Addressee &addr, bool intern ) 944void VCardFormatImpl::addSoundValue( VCARD::VCard *vcard, const Sound &sound, const Addressee &addr, bool intern )
941{ 945{
942 ContentLine cl; 946 ContentLine cl;
943 cl.setName( EntityTypeToParamName( EntitySound ) ); 947 cl.setName( EntityTypeToParamName( EntitySound ) );
944 948
945 if ( sound.isIntern() && sound.data().isNull() ) 949 if ( sound.isIntern() && sound.data().isNull() )
946 return; 950 return;
947 951
948 if ( !sound.isIntern() && sound.url().isEmpty() ) 952 if ( !sound.isIntern() && sound.url().isEmpty() )
949 return; 953 return;
950 954
951 ParamList params; 955 ParamList params;
952 if ( sound.isIntern() ) { 956 if ( sound.isIntern() ) {
953 QByteArray data = sound.data(); 957 QByteArray data = sound.data();
954 if ( intern ) { // only for vCard export we really write the data inline 958 if ( intern ) { // only for vCard export we really write the data inline
955 cl.setValue( new TextValue( KCodecs::base64Encode( data ) ) ); 959 cl.setValue( new TextValue( KCodecs::base64Encode( data ) ) );
956 } else { // save sound in cache 960 } else { // save sound in cache
957 QFile file( locateLocal( "data", "kabc/sounds/" + addr.uid() ) ); 961 QFile file( locateLocal( "data", "kabc/sounds/" + addr.uid() ) );
958 if ( file.open( IO_WriteOnly ) ) { 962 if ( file.open( IO_WriteOnly ) ) {
959 file.writeBlock( data ); 963 file.writeBlock( data );
960 } 964 }
961 cl.setValue( new TextValue( "<dummy>" ) ); 965 cl.setValue( new TextValue( "<dummy>" ) );
962 } 966 }
963 params.append( new Param( "ENCODING", "b" ) ); 967 params.append( new Param( "ENCODING", "b" ) );
964 } else { 968 } else {
965 cl.setValue( new TextValue( sound.url().utf8() ) ); 969 cl.setValue( new TextValue( sound.url().utf8() ) );
966 params.append( new Param( "VALUE", "uri" ) ); 970 params.append( new Param( "VALUE", "uri" ) );
967 } 971 }
968 972
969 cl.setParamList( params ); 973 cl.setParamList( params );
970 vcard->add( cl ); 974 vcard->add( cl );
971} 975}
972 976
973Sound VCardFormatImpl::readSoundValue( VCARD::ContentLine *cl, const Addressee &addr ) 977Sound VCardFormatImpl::readSoundValue( VCARD::ContentLine *cl, const Addressee &addr )
974{ 978{
975 Sound sound; 979 Sound sound;
976 bool isInline = false; 980 bool isInline = false;
977 TextValue *v = (TextValue *)cl->value(); 981 TextValue *v = (TextValue *)cl->value();
978 982
979 ParamList params = cl->paramList(); 983 ParamList params = cl->paramList();
980 ParamListIterator it( params ); 984 ParamListIterator it( params );
981 for( ; it.current(); ++it ) { 985 for( ; it.current(); ++it ) {
982 if ( (*it)->name() == "ENCODING" && (*it)->value() == "b" ) 986 if ( (*it)->name() == "ENCODING" && (*it)->value() == "b" )
983 isInline = true; 987 isInline = true;
984 } 988 }
985 989
986 if ( isInline ) { 990 if ( isInline ) {
987 QByteArray data; 991 QByteArray data;
988 if ( v->asString() == "<dummy>" ) { // no sound inline stored => sound is in cache 992 if ( v->asString() == "<dummy>" ) { // no sound inline stored => sound is in cache
989 QFile file( locateLocal( "data", "kabc/sounds/" + addr.uid() ) ); 993 QFile file( locateLocal( "data", "kabc/sounds/" + addr.uid() ) );
990 if ( file.open( IO_ReadOnly ) ) { 994 if ( file.open( IO_ReadOnly ) ) {
991 data = file.readAll(); 995 data = file.readAll();
992 file.close(); 996 file.close();
993 } 997 }
994 } else { 998 } else {
995 KCodecs::base64Decode( v->asString(), data ); 999 KCodecs::base64Decode( v->asString(), data );
996 } 1000 }
997 sound.setData( data ); 1001 sound.setData( data );
998 } else { 1002 } else {
999 sound.setUrl( QString::fromUtf8( v->asString() ) ); 1003 sound.setUrl( QString::fromUtf8( v->asString() ) );
1000 } 1004 }
1001 1005
1002 return sound; 1006 return sound;
1003} 1007}
1004 1008
1005bool VCardFormatImpl::readFromString( const QString &vcard, Addressee &addressee ) 1009bool VCardFormatImpl::readFromString( const QString &vcard, Addressee &addressee )
1006{ 1010{
1007 VCardEntity e( vcard.utf8() ); 1011 VCardEntity e( vcard.utf8() );
1008 VCardListIterator it( e.cardList() ); 1012 VCardListIterator it( e.cardList() );
1009 1013
1010 if ( it.current() ) { 1014 if ( it.current() ) {
1011//US VCard v(*it.current()); 1015//US VCard v(*it.current());
1012//US loadAddressee( addressee, v ); 1016//US loadAddressee( addressee, v );
1013 loadAddressee( addressee, it.current() ); 1017 loadAddressee( addressee, it.current() );
1014 return true; 1018 return true;
1015 } 1019 }
1016 1020
1017 return false; 1021 return false;
1018} 1022}
1019 1023
1020bool VCardFormatImpl::writeToString( const Addressee &addressee, QString &vcard ) 1024bool VCardFormatImpl::writeToString( const Addressee &addressee, QString &vcard )
1021{ 1025{
1022 VCardEntity vcards; 1026 VCardEntity vcards;
1023 VCardList vcardlist; 1027 VCardList vcardlist;
1024 vcardlist.setAutoDelete( true ); 1028 vcardlist.setAutoDelete( true );
1025 1029
1026 VCard *v = new VCard; 1030 VCard *v = new VCard;
1027 1031
1028 saveAddressee( addressee, v, true ); 1032 saveAddressee( addressee, v, true );
1029 1033
1030 vcardlist.append( v ); 1034 vcardlist.append( v );
1031 vcards.setCardList( vcardlist ); 1035 vcards.setCardList( vcardlist );
1032 vcard = QString::fromUtf8( vcards.asString() ); 1036 vcard = QString::fromUtf8( vcards.asString() );
1033 1037
1034 return true; 1038 return true;
1035} 1039}