summaryrefslogtreecommitdiffabout
path: root/kabc
authorzautrix <zautrix>2005-10-28 03:41:01 (UTC)
committer zautrix <zautrix>2005-10-28 03:41:01 (UTC)
commitd934f3fe2a62f6a696992335124c4434cd77d990 (patch) (unidiff)
tree88d33c54e3f8d08b09cf81f4cdbaeb7eb6a4bb9b /kabc
parentf83a59cf4f9d0cff4111b6f5c88e88e6dc96e79e (diff)
downloadkdepimpi-d934f3fe2a62f6a696992335124c4434cd77d990.zip
kdepimpi-d934f3fe2a62f6a696992335124c4434cd77d990.tar.gz
kdepimpi-d934f3fe2a62f6a696992335124c4434cd77d990.tar.bz2
and some bugs fixed
Diffstat (limited to 'kabc') (more/less context) (ignore whitespace changes)
-rw-r--r--kabc/addressee.cpp4
-rw-r--r--kabc/plugins/qtopia/qtopiaconverter.cpp8
-rw-r--r--kabc/plugins/sharpdtm/sharpdtmconverter.cpp10
3 files changed, 11 insertions, 11 deletions
diff --git a/kabc/addressee.cpp b/kabc/addressee.cpp
index 661bdf6..19c78ee 100644
--- a/kabc/addressee.cpp
+++ b/kabc/addressee.cpp
@@ -554,1043 +554,1043 @@ void Addressee::simplifyAddresses()
554 list.append( *it ); 554 list.append( *it );
555 break; 555 break;
556 } 556 }
557 } 557 }
558 } 558 }
559 for( it = list.begin(); it != list.end(); ++it ) { 559 for( it = list.begin(); it != list.end(); ++it ) {
560 removeAddress( (*it) ); 560 removeAddress( (*it) );
561 } 561 }
562 562
563 list.clear(); 563 list.clear();
564 int max = 2; 564 int max = 2;
565 if ( mData->url.isValid() ) 565 if ( mData->url.isValid() )
566 max = 1; 566 max = 1;
567 if ( mData->addresses.count() <= max ) return ; 567 if ( mData->addresses.count() <= max ) return ;
568 int count = 0; 568 int count = 0;
569 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) { 569 for( it = mData->addresses.begin(); it != mData->addresses.end(); ++it ) {
570 if ( count >= max ) 570 if ( count >= max )
571 list.append( *it ); 571 list.append( *it );
572 ++count; 572 ++count;
573 } 573 }
574 for( it = list.begin(); it != list.end(); ++it ) { 574 for( it = list.begin(); it != list.end(); ++it ) {
575 removeAddress( (*it) ); 575 removeAddress( (*it) );
576 } 576 }
577} 577}
578 578
579// removes all emails but the first 579// removes all emails but the first
580// needed by phone sync 580// needed by phone sync
581void Addressee::simplifyEmails() 581void Addressee::simplifyEmails()
582{ 582{
583 if ( mData->emails.count() == 0 ) return ; 583 if ( mData->emails.count() == 0 ) return ;
584 QString email = mData->emails.first(); 584 QString email = mData->emails.first();
585 detach(); 585 detach();
586 mData->emails.clear(); 586 mData->emails.clear();
587 mData->emails.append( email ); 587 mData->emails.append( email );
588} 588}
589void Addressee::makePhoneNumbersOLcompatible() 589void Addressee::makePhoneNumbersOLcompatible()
590{ 590{
591 KABC::PhoneNumber::List::Iterator phoneIter; 591 KABC::PhoneNumber::List::Iterator phoneIter;
592 KABC::PhoneNumber::List::Iterator phoneIter2; 592 KABC::PhoneNumber::List::Iterator phoneIter2;
593 for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end(); 593 for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end();
594 ++phoneIter ) { 594 ++phoneIter ) {
595 ( *phoneIter ).makeCompat(); 595 ( *phoneIter ).makeCompat();
596 } 596 }
597 int hasHome = hasPhoneNumberType( PhoneNumber::Home | PhoneNumber::Pref ); 597 int hasHome = hasPhoneNumberType( PhoneNumber::Home | PhoneNumber::Pref );
598 int hasHome2 = hasPhoneNumberType( PhoneNumber::Home ); 598 int hasHome2 = hasPhoneNumberType( PhoneNumber::Home );
599 int hasWork = hasPhoneNumberType( PhoneNumber::Work | PhoneNumber::Pref ); 599 int hasWork = hasPhoneNumberType( PhoneNumber::Work | PhoneNumber::Pref );
600 int hasWork2 = hasPhoneNumberType( PhoneNumber::Work ); 600 int hasWork2 = hasPhoneNumberType( PhoneNumber::Work );
601 int hasCell = hasPhoneNumberType( PhoneNumber::Cell ); 601 int hasCell = hasPhoneNumberType( PhoneNumber::Cell );
602 int hasCell2 = hasPhoneNumberType( PhoneNumber::Car ); 602 int hasCell2 = hasPhoneNumberType( PhoneNumber::Car );
603 for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end(); 603 for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end();
604 ++phoneIter ) { 604 ++phoneIter ) {
605 if ( (*phoneIter).type() == PhoneNumber::Home && ! hasHome ) { 605 if ( (*phoneIter).type() == PhoneNumber::Home && ! hasHome ) {
606 (*phoneIter).setType( PhoneNumber::Home | PhoneNumber::Pref ); 606 (*phoneIter).setType( PhoneNumber::Home | PhoneNumber::Pref );
607 ++hasHome; 607 ++hasHome;
608 if ( hasHome2 ) --hasHome2; 608 if ( hasHome2 ) --hasHome2;
609 } else if ( ( (*phoneIter).type() == PhoneNumber::Home | PhoneNumber::Pref) && hasHome>1 && !hasHome2 ) { 609 } else if ( ( (*phoneIter).type() == PhoneNumber::Home | PhoneNumber::Pref) && hasHome>1 && !hasHome2 ) {
610 (*phoneIter).setType( PhoneNumber::Home ); 610 (*phoneIter).setType( PhoneNumber::Home );
611 --hasHome; 611 --hasHome;
612 ++hasHome2; 612 ++hasHome2;
613 } else if ( (*phoneIter).type() == PhoneNumber::Work && ! hasWork ) { 613 } else if ( (*phoneIter).type() == PhoneNumber::Work && ! hasWork ) {
614 (*phoneIter).setType( PhoneNumber::Work | PhoneNumber::Pref ); 614 (*phoneIter).setType( PhoneNumber::Work | PhoneNumber::Pref );
615 ++hasWork; 615 ++hasWork;
616 if ( hasWork2 ) --hasWork2; 616 if ( hasWork2 ) --hasWork2;
617 } else if ( ( (*phoneIter).type() == PhoneNumber::Work | PhoneNumber::Pref) && hasWork > 1 && ! hasWork2 ) { 617 } else if ( ( (*phoneIter).type() == PhoneNumber::Work | PhoneNumber::Pref) && hasWork > 1 && ! hasWork2 ) {
618 (*phoneIter).setType( PhoneNumber::Work ); 618 (*phoneIter).setType( PhoneNumber::Work );
619 --hasWork; 619 --hasWork;
620 ++hasWork2; 620 ++hasWork2;
621 } else if ( (*phoneIter).type() == PhoneNumber::Cell && hasCell > 1 && !hasCell2) { 621 } else if ( (*phoneIter).type() == PhoneNumber::Cell && hasCell > 1 && !hasCell2) {
622 (*phoneIter).setType( PhoneNumber::Car ); 622 (*phoneIter).setType( PhoneNumber::Car );
623 ++hasCell2; 623 ++hasCell2;
624 --hasCell; 624 --hasCell;
625 } else if ( (*phoneIter).type() == PhoneNumber::Car && hasCell2 > 1 && !hasCell) { 625 } else if ( (*phoneIter).type() == PhoneNumber::Car && hasCell2 > 1 && !hasCell) {
626 (*phoneIter).setType( PhoneNumber::Cell ); 626 (*phoneIter).setType( PhoneNumber::Cell );
627 ++hasCell; 627 ++hasCell;
628 --hasCell2; 628 --hasCell2;
629 } else{ 629 } else{
630 phoneIter2 = phoneIter; 630 phoneIter2 = phoneIter;
631 ++phoneIter2; 631 ++phoneIter2;
632 for ( ; phoneIter2 != mData->phoneNumbers.end(); 632 for ( ; phoneIter2 != mData->phoneNumbers.end();
633 ++phoneIter2 ) { 633 ++phoneIter2 ) {
634 if ( (*phoneIter2).type() == (*phoneIter).type() ) { 634 if ( (*phoneIter2).type() == (*phoneIter).type() ) {
635 (*phoneIter2).setType( PhoneNumber::Voice ); 635 (*phoneIter2).setType( PhoneNumber::Voice );
636 636
637 } 637 }
638 } 638 }
639 } 639 }
640 } 640 }
641} 641}
642void Addressee::simplifyPhoneNumbers() 642void Addressee::simplifyPhoneNumbers()
643{ 643{
644 int max = 4; 644 int max = 4;
645 int inList = mData->phoneNumbers.count(); 645 int inList = mData->phoneNumbers.count();
646 KABC::PhoneNumber::List removeNumbers; 646 KABC::PhoneNumber::List removeNumbers;
647 KABC::PhoneNumber::List::Iterator phoneIter; 647 KABC::PhoneNumber::List::Iterator phoneIter;
648 if ( inList > max ) { 648 if ( inList > max ) {
649 // delete non-preferred numbers 649 // delete non-preferred numbers
650 for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end(); 650 for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end();
651 ++phoneIter ) { 651 ++phoneIter ) {
652 if ( inList > max ) { 652 if ( inList > max ) {
653 if ( ! (( *phoneIter ).type() & PhoneNumber::Pref )) { 653 if ( ! (( *phoneIter ).type() & PhoneNumber::Pref )) {
654 removeNumbers.append( ( *phoneIter ) ); 654 removeNumbers.append( ( *phoneIter ) );
655 --inList; 655 --inList;
656 } 656 }
657 } else 657 } else
658 break; 658 break;
659 } 659 }
660 for ( phoneIter = removeNumbers.begin(); phoneIter != removeNumbers.end(); 660 for ( phoneIter = removeNumbers.begin(); phoneIter != removeNumbers.end();
661 ++phoneIter ) { 661 ++phoneIter ) {
662 removePhoneNumber(( *phoneIter )); 662 removePhoneNumber(( *phoneIter ));
663 } 663 }
664 // delete preferred numbers 664 // delete preferred numbers
665 if ( inList > max ) { 665 if ( inList > max ) {
666 for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end(); 666 for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end();
667 ++phoneIter ) { 667 ++phoneIter ) {
668 if ( inList > max ) { 668 if ( inList > max ) {
669 removeNumbers.append( ( *phoneIter ) ); 669 removeNumbers.append( ( *phoneIter ) );
670 --inList; 670 --inList;
671 } else 671 } else
672 break; 672 break;
673 } 673 }
674 for ( phoneIter = removeNumbers.begin(); phoneIter != removeNumbers.end(); 674 for ( phoneIter = removeNumbers.begin(); phoneIter != removeNumbers.end();
675 ++phoneIter ) { 675 ++phoneIter ) {
676 removePhoneNumber(( *phoneIter )); 676 removePhoneNumber(( *phoneIter ));
677 } 677 }
678 } 678 }
679 } 679 }
680 // remove non-numeric characters 680 // remove non-numeric characters
681 for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end(); 681 for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end();
682 ++phoneIter ) { 682 ++phoneIter ) {
683 if ( ! ( *phoneIter ).simplifyNumber() ) 683 if ( ! ( *phoneIter ).simplifyNumber() )
684 removeNumbers.append( ( *phoneIter ) ); 684 removeNumbers.append( ( *phoneIter ) );
685 } 685 }
686 for ( phoneIter = removeNumbers.begin(); phoneIter != removeNumbers.end(); 686 for ( phoneIter = removeNumbers.begin(); phoneIter != removeNumbers.end();
687 ++phoneIter ) { 687 ++phoneIter ) {
688 removePhoneNumber(( *phoneIter )); 688 removePhoneNumber(( *phoneIter ));
689 } 689 }
690} 690}
691void Addressee::simplifyPhoneNumberTypes() 691void Addressee::simplifyPhoneNumberTypes()
692{ 692{
693 KABC::PhoneNumber::List::Iterator phoneIter; 693 KABC::PhoneNumber::List::Iterator phoneIter;
694 for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end(); 694 for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end();
695 ++phoneIter ) 695 ++phoneIter )
696 ( *phoneIter ).simplifyType(); 696 ( *phoneIter ).simplifyType();
697} 697}
698void Addressee::removeID(const QString &prof) 698void Addressee::removeID(const QString &prof)
699{ 699{
700 detach(); 700 detach();
701 if ( prof.isEmpty() ) 701 if ( prof.isEmpty() )
702 mData->mExternalId = ":"; 702 mData->mExternalId = ":";
703 else 703 else
704 mData->mExternalId = KIdManager::removeId ( mData->mExternalId, prof); 704 mData->mExternalId = KIdManager::removeId ( mData->mExternalId, prof);
705 705
706} 706}
707void Addressee::setID( const QString & prof , const QString & id ) 707void Addressee::setID( const QString & prof , const QString & id )
708{ 708{
709 detach(); 709 detach();
710 mData->mExternalId = KIdManager::setId ( mData->mExternalId, prof, id ); 710 mData->mExternalId = KIdManager::setId ( mData->mExternalId, prof, id );
711 //qDebug("setID2 %s %s %s",mData->mExternalId.latin1(), prof.latin1(), id.latin1() ); 711 //qDebug("setID2 %s %s %s",mData->mExternalId.latin1(), prof.latin1(), id.latin1() );
712} 712}
713void Addressee::setTempSyncStat( int id ) 713void Addressee::setTempSyncStat( int id )
714{ 714{
715 if ( mData->mTempSyncStat == id ) return; 715 if ( mData->mTempSyncStat == id ) return;
716 detach(); 716 detach();
717 mData->mTempSyncStat = id; 717 mData->mTempSyncStat = id;
718} 718}
719int Addressee::tempSyncStat() const 719int Addressee::tempSyncStat() const
720{ 720{
721 return mData->mTempSyncStat; 721 return mData->mTempSyncStat;
722} 722}
723 723
724const QString Addressee::getID( const QString & prof) const 724const QString Addressee::getID( const QString & prof) const
725{ 725{
726 return KIdManager::getId ( mData->mExternalId, prof ); 726 return KIdManager::getId ( mData->mExternalId, prof );
727} 727}
728 728
729void Addressee::setCsum( const QString & prof , const QString & id ) 729void Addressee::setCsum( const QString & prof , const QString & id )
730{ 730{
731 detach(); 731 detach();
732 //qDebug("setcsum1 %s %s %s",mData->mExternalId.latin1(), prof.latin1(), id.latin1() ); 732 //qDebug("setcsum1 %s %s %s",mData->mExternalId.latin1(), prof.latin1(), id.latin1() );
733 mData->mExternalId = KIdManager::setCsum ( mData->mExternalId, prof, id ); 733 mData->mExternalId = KIdManager::setCsum ( mData->mExternalId, prof, id );
734 //qDebug("setcsum2 %s ",mData->mExternalId.latin1() ); 734 //qDebug("setcsum2 %s ",mData->mExternalId.latin1() );
735} 735}
736 736
737const QString Addressee::getCsum( const QString & prof) const 737const QString Addressee::getCsum( const QString & prof) const
738{ 738{
739 return KIdManager::getCsum ( mData->mExternalId, prof ); 739 return KIdManager::getCsum ( mData->mExternalId, prof );
740} 740}
741 741
742void Addressee::setIDStr( const QString & s ) 742void Addressee::setIDStr( const QString & s )
743{ 743{
744 detach(); 744 detach();
745 mData->mExternalId = s; 745 mData->mExternalId = s;
746} 746}
747 747
748const QString Addressee::IDStr() const 748const QString Addressee::IDStr() const
749{ 749{
750 return mData->mExternalId; 750 return mData->mExternalId;
751} 751}
752 752
753void Addressee::setExternalUID( const QString &id ) 753void Addressee::setExternalUID( const QString &id )
754{ 754{
755 if ( id == mData->externalUID ) return; 755 if ( id == mData->externalUID ) return;
756 detach(); 756 detach();
757 mData->empty = false; 757 mData->empty = false;
758 mData->externalUID = id; 758 mData->externalUID = id;
759} 759}
760 760
761const QString Addressee::externalUID() const 761const QString Addressee::externalUID() const
762{ 762{
763 return mData->externalUID; 763 return mData->externalUID;
764} 764}
765void Addressee::setOriginalExternalUID( const QString &id ) 765void Addressee::setOriginalExternalUID( const QString &id )
766{ 766{
767 if ( id == mData->originalExternalUID ) return; 767 if ( id == mData->originalExternalUID ) return;
768 detach(); 768 detach();
769 mData->empty = false; 769 mData->empty = false;
770 //qDebug("*******Set orig uid %s ", id.latin1()); 770 //qDebug("*******Set orig uid %s ", id.latin1());
771 mData->originalExternalUID = id; 771 mData->originalExternalUID = id;
772} 772}
773 773
774QString Addressee::originalExternalUID() const 774QString Addressee::originalExternalUID() const
775{ 775{
776 return mData->originalExternalUID; 776 return mData->originalExternalUID;
777} 777}
778 778
779void Addressee::setUid( const QString &id ) 779void Addressee::setUid( const QString &id )
780{ 780{
781 if ( id == mData->uid ) return; 781 if ( id == mData->uid ) return;
782 detach(); 782 detach();
783 //qDebug("****setuid %s ", id.latin1()); 783 //qDebug("****setuid %s ", id.latin1());
784 mData->empty = false; 784 mData->empty = false;
785 mData->uid = id; 785 mData->uid = id;
786} 786}
787 787
788const QString Addressee::uid() const 788const QString Addressee::uid() const
789{ 789{
790 if ( mData->uid.isEmpty() ) 790 if ( mData->uid.isEmpty() )
791 mData->uid = KApplication::randomString( 10 ); 791 mData->uid = KApplication::randomString( 10 );
792 792
793 return mData->uid; 793 return mData->uid;
794} 794}
795 795
796QString Addressee::uidLabel() 796QString Addressee::uidLabel()
797{ 797{
798 return i18n("Unique Identifier"); 798 return i18n("Unique Identifier");
799} 799}
800 800
801void Addressee::setName( const QString &name ) 801void Addressee::setName( const QString &name )
802{ 802{
803 if ( name == mData->name ) return; 803 if ( name == mData->name ) return;
804 detach(); 804 detach();
805 mData->empty = false; 805 mData->empty = false;
806 mData->name = name; 806 mData->name = name;
807} 807}
808 808
809QString Addressee::name() const 809QString Addressee::name() const
810{ 810{
811 return mData->name; 811 return mData->name;
812} 812}
813 813
814QString Addressee::nameLabel() 814QString Addressee::nameLabel()
815{ 815{
816 return i18n("Name"); 816 return i18n("Name");
817} 817}
818 818
819 819
820void Addressee::setFormattedName( const QString &formattedName ) 820void Addressee::setFormattedName( const QString &formattedName )
821{ 821{
822 if ( formattedName == mData->formattedName ) return; 822 if ( formattedName == mData->formattedName ) return;
823 detach(); 823 detach();
824 mData->empty = false; 824 mData->empty = false;
825 mData->formattedName = formattedName; 825 mData->formattedName = formattedName;
826} 826}
827 827
828QString Addressee::formattedName() const 828QString Addressee::formattedName() const
829{ 829{
830 return mData->formattedName; 830 return mData->formattedName;
831} 831}
832 832
833QString Addressee::formattedNameLabel() 833QString Addressee::formattedNameLabel()
834{ 834{
835 return i18n("Formatted Name"); 835 return i18n("Formatted Name");
836} 836}
837 837
838 838
839void Addressee::setFamilyName( const QString &familyName ) 839void Addressee::setFamilyName( const QString &familyName )
840{ 840{
841 if ( familyName == mData->familyName ) return; 841 if ( familyName == mData->familyName ) return;
842 detach(); 842 detach();
843 mData->empty = false; 843 mData->empty = false;
844 mData->familyName = familyName; 844 mData->familyName = familyName;
845} 845}
846 846
847QString Addressee::familyName() const 847QString Addressee::familyName() const
848{ 848{
849 return mData->familyName; 849 return mData->familyName;
850} 850}
851 851
852QString Addressee::familyNameLabel() 852QString Addressee::familyNameLabel()
853{ 853{
854 return i18n("Family Name"); 854 return i18n("Family Name");
855} 855}
856 856
857 857
858void Addressee::setGivenName( const QString &givenName ) 858void Addressee::setGivenName( const QString &givenName )
859{ 859{
860 if ( givenName == mData->givenName ) return; 860 if ( givenName == mData->givenName ) return;
861 detach(); 861 detach();
862 mData->empty = false; 862 mData->empty = false;
863 mData->givenName = givenName; 863 mData->givenName = givenName;
864} 864}
865 865
866QString Addressee::givenName() const 866QString Addressee::givenName() const
867{ 867{
868 return mData->givenName; 868 return mData->givenName;
869} 869}
870 870
871QString Addressee::givenNameLabel() 871QString Addressee::givenNameLabel()
872{ 872{
873 return i18n("Given Name"); 873 return i18n("Given Name");
874} 874}
875 875
876 876
877void Addressee::setAdditionalName( const QString &additionalName ) 877void Addressee::setAdditionalName( const QString &additionalName )
878{ 878{
879 if ( additionalName == mData->additionalName ) return; 879 if ( additionalName == mData->additionalName ) return;
880 detach(); 880 detach();
881 mData->empty = false; 881 mData->empty = false;
882 mData->additionalName = additionalName; 882 mData->additionalName = additionalName;
883} 883}
884 884
885QString Addressee::additionalName() const 885QString Addressee::additionalName() const
886{ 886{
887 return mData->additionalName; 887 return mData->additionalName;
888} 888}
889 889
890QString Addressee::additionalNameLabel() 890QString Addressee::additionalNameLabel()
891{ 891{
892 return i18n("Additional Names"); 892 return i18n("Additional Names");
893} 893}
894 894
895 895
896void Addressee::setPrefix( const QString &prefix ) 896void Addressee::setPrefix( const QString &prefix )
897{ 897{
898 if ( prefix == mData->prefix ) return; 898 if ( prefix == mData->prefix ) return;
899 detach(); 899 detach();
900 mData->empty = false; 900 mData->empty = false;
901 mData->prefix = prefix; 901 mData->prefix = prefix;
902} 902}
903 903
904QString Addressee::prefix() const 904QString Addressee::prefix() const
905{ 905{
906 return mData->prefix; 906 return mData->prefix;
907} 907}
908 908
909QString Addressee::prefixLabel() 909QString Addressee::prefixLabel()
910{ 910{
911 return i18n("Honorific Prefixes"); 911 return i18n("Honorific Prefixes");
912} 912}
913 913
914 914
915void Addressee::setSuffix( const QString &suffix ) 915void Addressee::setSuffix( const QString &suffix )
916{ 916{
917 if ( suffix == mData->suffix ) return; 917 if ( suffix == mData->suffix ) return;
918 detach(); 918 detach();
919 mData->empty = false; 919 mData->empty = false;
920 mData->suffix = suffix; 920 mData->suffix = suffix;
921} 921}
922 922
923QString Addressee::suffix() const 923QString Addressee::suffix() const
924{ 924{
925 return mData->suffix; 925 return mData->suffix;
926} 926}
927 927
928QString Addressee::suffixLabel() 928QString Addressee::suffixLabel()
929{ 929{
930 return i18n("Honorific Suffixes"); 930 return i18n("Honorific Suffixes");
931} 931}
932 932
933 933
934void Addressee::setNickName( const QString &nickName ) 934void Addressee::setNickName( const QString &nickName )
935{ 935{
936 if ( nickName == mData->nickName ) return; 936 if ( nickName == mData->nickName ) return;
937 detach(); 937 detach();
938 mData->empty = false; 938 mData->empty = false;
939 mData->nickName = nickName; 939 mData->nickName = nickName;
940} 940}
941 941
942QString Addressee::nickName() const 942QString Addressee::nickName() const
943{ 943{
944 return mData->nickName; 944 return mData->nickName;
945} 945}
946 946
947QString Addressee::nickNameLabel() 947QString Addressee::nickNameLabel()
948{ 948{
949 return i18n("Nick Name"); 949 return i18n("Nick Name");
950} 950}
951 951
952 952
953void Addressee::setBirthday( const QDateTime &birthday ) 953void Addressee::setBirthday( const QDateTime &birthday )
954{ 954{
955 if ( birthday == mData->birthday ) return; 955 if ( birthday == mData->birthday ) return;
956 detach(); 956 detach();
957 mData->empty = false; 957 mData->empty = false;
958 mData->birthday = birthday; 958 mData->birthday = birthday;
959} 959}
960 960
961QDateTime Addressee::birthday() const 961QDateTime Addressee::birthday() const
962{ 962{
963 return mData->birthday; 963 return mData->birthday;
964} 964}
965 965
966QString Addressee::birthdayLabel() 966QString Addressee::birthdayLabel()
967{ 967{
968 return i18n("Birthday"); 968 return i18n("Birthday");
969} 969}
970 970
971 971
972QString Addressee::homeAddressStreetLabel() 972QString Addressee::homeAddressStreetLabel()
973{ 973{
974 return i18n("Home Address Street"); 974 return i18n("Home Address Street");
975} 975}
976 976
977 977
978QString Addressee::homeAddressLocalityLabel() 978QString Addressee::homeAddressLocalityLabel()
979{ 979{
980 return i18n("Home Address Locality"); 980 return i18n("Home Address Locality");
981} 981}
982 982
983 983
984QString Addressee::homeAddressRegionLabel() 984QString Addressee::homeAddressRegionLabel()
985{ 985{
986 return i18n("Home Address Region"); 986 return i18n("Home Address Region");
987} 987}
988 988
989 989
990QString Addressee::homeAddressPostalCodeLabel() 990QString Addressee::homeAddressPostalCodeLabel()
991{ 991{
992 return i18n("Home Address Postal Code"); 992 return i18n("Home Address Postal Code");
993} 993}
994 994
995 995
996QString Addressee::homeAddressCountryLabel() 996QString Addressee::homeAddressCountryLabel()
997{ 997{
998 return i18n("Home Address Country"); 998 return i18n("Home Address Country");
999} 999}
1000 1000
1001 1001
1002QString Addressee::homeAddressLabelLabel() 1002QString Addressee::homeAddressLabelLabel()
1003{ 1003{
1004 return i18n("Home Address Label"); 1004 return i18n("Home Address Label");
1005} 1005}
1006 1006
1007 1007
1008QString Addressee::businessAddressStreetLabel() 1008QString Addressee::businessAddressStreetLabel()
1009{ 1009{
1010 return i18n("Business Address Street"); 1010 return i18n("Business Address Street");
1011} 1011}
1012 1012
1013 1013
1014QString Addressee::businessAddressLocalityLabel() 1014QString Addressee::businessAddressLocalityLabel()
1015{ 1015{
1016 return i18n("Business Address Locality"); 1016 return i18n("Business Address Locality");
1017} 1017}
1018 1018
1019 1019
1020QString Addressee::businessAddressRegionLabel() 1020QString Addressee::businessAddressRegionLabel()
1021{ 1021{
1022 return i18n("Business Address Region"); 1022 return i18n("Business Address Region");
1023} 1023}
1024 1024
1025 1025
1026QString Addressee::businessAddressPostalCodeLabel() 1026QString Addressee::businessAddressPostalCodeLabel()
1027{ 1027{
1028 return i18n("Business Address Postal Code"); 1028 return i18n("Business Address Postal Code");
1029} 1029}
1030 1030
1031 1031
1032QString Addressee::businessAddressCountryLabel() 1032QString Addressee::businessAddressCountryLabel()
1033{ 1033{
1034 return i18n("Business Address Country"); 1034 return i18n("Business Address Country");
1035} 1035}
1036 1036
1037 1037
1038QString Addressee::businessAddressLabelLabel() 1038QString Addressee::businessAddressLabelLabel()
1039{ 1039{
1040 return i18n("Business Address Label"); 1040 return i18n("Business Address Label");
1041} 1041}
1042 1042
1043 1043
1044QString Addressee::homePhoneLabel() 1044QString Addressee::homePhoneLabel()
1045{ 1045{
1046 return i18n("Home Phone"); 1046 return i18n("Home Phone");
1047} 1047}
1048 1048
1049 1049
1050QString Addressee::businessPhoneLabel() 1050QString Addressee::businessPhoneLabel()
1051{ 1051{
1052 return i18n("Work Phone"); 1052 return i18n("Work Phone");
1053} 1053}
1054 1054
1055 1055
1056QString Addressee::mobilePhoneLabel() 1056QString Addressee::mobilePhoneLabel()
1057{ 1057{
1058 return i18n("Mobile Phone"); 1058 return i18n("Mobile Phone");
1059} 1059}
1060QString Addressee::mobileWorkPhoneLabel() 1060QString Addressee::mobileWorkPhoneLabel()
1061{ 1061{
1062 return i18n("Mobile2 (work)"); 1062 return i18n("Mobile2 (work)");
1063} 1063}
1064QString Addressee::mobileHomePhoneLabel() 1064QString Addressee::mobileHomePhoneLabel()
1065{ 1065{
1066 return i18n("Mobile"); 1066 return i18n("Mobile (Home)");
1067} 1067}
1068 1068
1069 1069
1070QString Addressee::homeFaxLabel() 1070QString Addressee::homeFaxLabel()
1071{ 1071{
1072 return i18n("Fax (Home)"); 1072 return i18n("Fax (Home)");
1073} 1073}
1074 1074
1075 1075
1076QString Addressee::businessFaxLabel() 1076QString Addressee::businessFaxLabel()
1077{ 1077{
1078 return i18n("Fax (Work)"); 1078 return i18n("Fax (Work)");
1079} 1079}
1080 1080
1081 1081
1082QString Addressee::carPhoneLabel() 1082QString Addressee::carPhoneLabel()
1083{ 1083{
1084 return i18n("Mobile2 (work)"); 1084 return i18n("Mobile2 (car)");
1085} 1085}
1086 1086
1087 1087
1088QString Addressee::isdnLabel() 1088QString Addressee::isdnLabel()
1089{ 1089{
1090 return i18n("ISDN"); 1090 return i18n("ISDN");
1091} 1091}
1092 1092
1093 1093
1094QString Addressee::pagerLabel() 1094QString Addressee::pagerLabel()
1095{ 1095{
1096 return i18n("Pager"); 1096 return i18n("Pager");
1097} 1097}
1098 1098
1099QString Addressee::sipLabel() 1099QString Addressee::sipLabel()
1100{ 1100{
1101 return i18n("SIP"); 1101 return i18n("SIP");
1102} 1102}
1103 1103
1104QString Addressee::emailLabel() 1104QString Addressee::emailLabel()
1105{ 1105{
1106 return i18n("Email Address"); 1106 return i18n("Email Address");
1107} 1107}
1108 1108
1109 1109
1110void Addressee::setMailer( const QString &mailer ) 1110void Addressee::setMailer( const QString &mailer )
1111{ 1111{
1112 if ( mailer == mData->mailer ) return; 1112 if ( mailer == mData->mailer ) return;
1113 detach(); 1113 detach();
1114 mData->empty = false; 1114 mData->empty = false;
1115 mData->mailer = mailer; 1115 mData->mailer = mailer;
1116} 1116}
1117 1117
1118QString Addressee::mailer() const 1118QString Addressee::mailer() const
1119{ 1119{
1120 return mData->mailer; 1120 return mData->mailer;
1121} 1121}
1122 1122
1123QString Addressee::mailerLabel() 1123QString Addressee::mailerLabel()
1124{ 1124{
1125 return i18n("Mail Client"); 1125 return i18n("Mail Client");
1126} 1126}
1127 1127
1128 1128
1129void Addressee::setTimeZone( const TimeZone &timeZone ) 1129void Addressee::setTimeZone( const TimeZone &timeZone )
1130{ 1130{
1131 if ( timeZone == mData->timeZone ) return; 1131 if ( timeZone == mData->timeZone ) return;
1132 detach(); 1132 detach();
1133 mData->empty = false; 1133 mData->empty = false;
1134 mData->timeZone = timeZone; 1134 mData->timeZone = timeZone;
1135} 1135}
1136 1136
1137TimeZone Addressee::timeZone() const 1137TimeZone Addressee::timeZone() const
1138{ 1138{
1139 return mData->timeZone; 1139 return mData->timeZone;
1140} 1140}
1141 1141
1142QString Addressee::timeZoneLabel() 1142QString Addressee::timeZoneLabel()
1143{ 1143{
1144 return i18n("Time Zone"); 1144 return i18n("Time Zone");
1145} 1145}
1146 1146
1147 1147
1148void Addressee::setGeo( const Geo &geo ) 1148void Addressee::setGeo( const Geo &geo )
1149{ 1149{
1150 if ( geo == mData->geo ) return; 1150 if ( geo == mData->geo ) return;
1151 detach(); 1151 detach();
1152 mData->empty = false; 1152 mData->empty = false;
1153 mData->geo = geo; 1153 mData->geo = geo;
1154} 1154}
1155 1155
1156Geo Addressee::geo() const 1156Geo Addressee::geo() const
1157{ 1157{
1158 return mData->geo; 1158 return mData->geo;
1159} 1159}
1160 1160
1161QString Addressee::geoLabel() 1161QString Addressee::geoLabel()
1162{ 1162{
1163 return i18n("Geographic Position"); 1163 return i18n("Geographic Position");
1164} 1164}
1165 1165
1166 1166
1167void Addressee::setTitle( const QString &title ) 1167void Addressee::setTitle( const QString &title )
1168{ 1168{
1169 if ( title == mData->title ) return; 1169 if ( title == mData->title ) return;
1170 detach(); 1170 detach();
1171 mData->empty = false; 1171 mData->empty = false;
1172 mData->title = title; 1172 mData->title = title;
1173} 1173}
1174 1174
1175QString Addressee::title() const 1175QString Addressee::title() const
1176{ 1176{
1177 return mData->title; 1177 return mData->title;
1178} 1178}
1179 1179
1180QString Addressee::titleLabel() 1180QString Addressee::titleLabel()
1181{ 1181{
1182 return i18n("Title"); 1182 return i18n("Title");
1183} 1183}
1184 1184
1185 1185
1186void Addressee::setRole( const QString &role ) 1186void Addressee::setRole( const QString &role )
1187{ 1187{
1188 if ( role == mData->role ) return; 1188 if ( role == mData->role ) return;
1189 detach(); 1189 detach();
1190 mData->empty = false; 1190 mData->empty = false;
1191 mData->role = role; 1191 mData->role = role;
1192} 1192}
1193 1193
1194QString Addressee::role() const 1194QString Addressee::role() const
1195{ 1195{
1196 return mData->role; 1196 return mData->role;
1197} 1197}
1198 1198
1199QString Addressee::roleLabel() 1199QString Addressee::roleLabel()
1200{ 1200{
1201 return i18n("Role"); 1201 return i18n("Role");
1202} 1202}
1203 1203
1204 1204
1205void Addressee::setOrganization( const QString &organization ) 1205void Addressee::setOrganization( const QString &organization )
1206{ 1206{
1207 if ( organization == mData->organization ) return; 1207 if ( organization == mData->organization ) return;
1208 detach(); 1208 detach();
1209 mData->empty = false; 1209 mData->empty = false;
1210 mData->organization = organization; 1210 mData->organization = organization;
1211} 1211}
1212 1212
1213QString Addressee::organization() const 1213QString Addressee::organization() const
1214{ 1214{
1215 return mData->organization; 1215 return mData->organization;
1216} 1216}
1217 1217
1218QString Addressee::organizationLabel() 1218QString Addressee::organizationLabel()
1219{ 1219{
1220 return i18n("Organization"); 1220 return i18n("Organization");
1221} 1221}
1222 1222
1223 1223
1224void Addressee::setNote( const QString &note ) 1224void Addressee::setNote( const QString &note )
1225{ 1225{
1226 if ( note == mData->note ) return; 1226 if ( note == mData->note ) return;
1227 detach(); 1227 detach();
1228 mData->empty = false; 1228 mData->empty = false;
1229 mData->note = note; 1229 mData->note = note;
1230} 1230}
1231 1231
1232QString Addressee::note() const 1232QString Addressee::note() const
1233{ 1233{
1234 return mData->note; 1234 return mData->note;
1235} 1235}
1236 1236
1237QString Addressee::noteLabel() 1237QString Addressee::noteLabel()
1238{ 1238{
1239 return i18n("Note"); 1239 return i18n("Note");
1240} 1240}
1241 1241
1242 1242
1243void Addressee::setProductId( const QString &productId ) 1243void Addressee::setProductId( const QString &productId )
1244{ 1244{
1245 if ( productId == mData->productId ) return; 1245 if ( productId == mData->productId ) return;
1246 detach(); 1246 detach();
1247 mData->empty = false; 1247 mData->empty = false;
1248 mData->productId = productId; 1248 mData->productId = productId;
1249} 1249}
1250 1250
1251QString Addressee::productId() const 1251QString Addressee::productId() const
1252{ 1252{
1253 return mData->productId; 1253 return mData->productId;
1254} 1254}
1255 1255
1256QString Addressee::productIdLabel() 1256QString Addressee::productIdLabel()
1257{ 1257{
1258 return i18n("Product Identifier"); 1258 return i18n("Product Identifier");
1259} 1259}
1260 1260
1261 1261
1262void Addressee::setRevision( const QDateTime &revision ) 1262void Addressee::setRevision( const QDateTime &revision )
1263{ 1263{
1264 if ( revision == mData->revision ) return; 1264 if ( revision == mData->revision ) return;
1265 detach(); 1265 detach();
1266 mData->empty = false; 1266 mData->empty = false;
1267 mData->revision = QDateTime( revision.date(), 1267 mData->revision = QDateTime( revision.date(),
1268 QTime (revision.time().hour(), 1268 QTime (revision.time().hour(),
1269 revision.time().minute(), 1269 revision.time().minute(),
1270 revision.time().second())); 1270 revision.time().second()));
1271} 1271}
1272 1272
1273QDateTime Addressee::revision() const 1273QDateTime Addressee::revision() const
1274{ 1274{
1275 return mData->revision; 1275 return mData->revision;
1276} 1276}
1277 1277
1278QString Addressee::revisionLabel() 1278QString Addressee::revisionLabel()
1279{ 1279{
1280 return i18n("Revision Date"); 1280 return i18n("Revision Date");
1281} 1281}
1282 1282
1283 1283
1284void Addressee::setSortString( const QString &sortString ) 1284void Addressee::setSortString( const QString &sortString )
1285{ 1285{
1286 if ( sortString == mData->sortString ) return; 1286 if ( sortString == mData->sortString ) return;
1287 detach(); 1287 detach();
1288 mData->empty = false; 1288 mData->empty = false;
1289 mData->sortString = sortString; 1289 mData->sortString = sortString;
1290} 1290}
1291 1291
1292QString Addressee::sortString() const 1292QString Addressee::sortString() const
1293{ 1293{
1294 return mData->sortString; 1294 return mData->sortString;
1295} 1295}
1296 1296
1297QString Addressee::sortStringLabel() 1297QString Addressee::sortStringLabel()
1298{ 1298{
1299 return i18n("Sort String"); 1299 return i18n("Sort String");
1300} 1300}
1301 1301
1302 1302
1303void Addressee::setUrl( const KURL &url ) 1303void Addressee::setUrl( const KURL &url )
1304{ 1304{
1305 if ( url == mData->url ) return; 1305 if ( url == mData->url ) return;
1306 detach(); 1306 detach();
1307 mData->empty = false; 1307 mData->empty = false;
1308 mData->url = url; 1308 mData->url = url;
1309} 1309}
1310 1310
1311KURL Addressee::url() const 1311KURL Addressee::url() const
1312{ 1312{
1313 return mData->url; 1313 return mData->url;
1314} 1314}
1315 1315
1316QString Addressee::urlLabel() 1316QString Addressee::urlLabel()
1317{ 1317{
1318 return i18n("URL"); 1318 return i18n("URL");
1319} 1319}
1320 1320
1321 1321
1322void Addressee::setSecrecy( const Secrecy &secrecy ) 1322void Addressee::setSecrecy( const Secrecy &secrecy )
1323{ 1323{
1324 if ( secrecy == mData->secrecy ) return; 1324 if ( secrecy == mData->secrecy ) return;
1325 detach(); 1325 detach();
1326 mData->empty = false; 1326 mData->empty = false;
1327 mData->secrecy = secrecy; 1327 mData->secrecy = secrecy;
1328} 1328}
1329 1329
1330Secrecy Addressee::secrecy() const 1330Secrecy Addressee::secrecy() const
1331{ 1331{
1332 return mData->secrecy; 1332 return mData->secrecy;
1333} 1333}
1334 1334
1335QString Addressee::secrecyLabel() 1335QString Addressee::secrecyLabel()
1336{ 1336{
1337 return i18n("Security Class"); 1337 return i18n("Security Class");
1338} 1338}
1339 1339
1340 1340
1341void Addressee::setLogo( const Picture &logo ) 1341void Addressee::setLogo( const Picture &logo )
1342{ 1342{
1343 if ( logo == mData->logo ) return; 1343 if ( logo == mData->logo ) return;
1344 detach(); 1344 detach();
1345 mData->empty = false; 1345 mData->empty = false;
1346 mData->logo = logo; 1346 mData->logo = logo;
1347} 1347}
1348 1348
1349Picture Addressee::logo() const 1349Picture Addressee::logo() const
1350{ 1350{
1351 return mData->logo; 1351 return mData->logo;
1352} 1352}
1353 1353
1354QString Addressee::logoLabel() 1354QString Addressee::logoLabel()
1355{ 1355{
1356 return i18n("Logo"); 1356 return i18n("Logo");
1357} 1357}
1358 1358
1359 1359
1360void Addressee::setPhoto( const Picture &photo ) 1360void Addressee::setPhoto( const Picture &photo )
1361{ 1361{
1362 if ( photo == mData->photo ) return; 1362 if ( photo == mData->photo ) return;
1363 detach(); 1363 detach();
1364 mData->empty = false; 1364 mData->empty = false;
1365 mData->photo = photo; 1365 mData->photo = photo;
1366} 1366}
1367 1367
1368Picture Addressee::photo() const 1368Picture Addressee::photo() const
1369{ 1369{
1370 return mData->photo; 1370 return mData->photo;
1371} 1371}
1372 1372
1373QString Addressee::photoLabel() 1373QString Addressee::photoLabel()
1374{ 1374{
1375 return i18n("Photo"); 1375 return i18n("Photo");
1376} 1376}
1377 1377
1378 1378
1379void Addressee::setSound( const Sound &sound ) 1379void Addressee::setSound( const Sound &sound )
1380{ 1380{
1381 if ( sound == mData->sound ) return; 1381 if ( sound == mData->sound ) return;
1382 detach(); 1382 detach();
1383 mData->empty = false; 1383 mData->empty = false;
1384 mData->sound = sound; 1384 mData->sound = sound;
1385} 1385}
1386 1386
1387Sound Addressee::sound() const 1387Sound Addressee::sound() const
1388{ 1388{
1389 return mData->sound; 1389 return mData->sound;
1390} 1390}
1391 1391
1392QString Addressee::soundLabel() 1392QString Addressee::soundLabel()
1393{ 1393{
1394 return i18n("Sound"); 1394 return i18n("Sound");
1395} 1395}
1396 1396
1397 1397
1398void Addressee::setAgent( const Agent &agent ) 1398void Addressee::setAgent( const Agent &agent )
1399{ 1399{
1400 if ( agent == mData->agent ) return; 1400 if ( agent == mData->agent ) return;
1401 detach(); 1401 detach();
1402 mData->empty = false; 1402 mData->empty = false;
1403 mData->agent = agent; 1403 mData->agent = agent;
1404} 1404}
1405 1405
1406Agent Addressee::agent() const 1406Agent Addressee::agent() const
1407{ 1407{
1408 return mData->agent; 1408 return mData->agent;
1409} 1409}
1410 1410
1411QString Addressee::agentLabel() 1411QString Addressee::agentLabel()
1412{ 1412{
1413 return i18n("Agent"); 1413 return i18n("Agent");
1414} 1414}
1415 1415
1416 1416
1417 1417
1418void Addressee::setNameFromString( const QString &str ) 1418void Addressee::setNameFromString( const QString &str )
1419{ 1419{
1420 setFormattedName( str ); 1420 setFormattedName( str );
1421 setName( str ); 1421 setName( str );
1422 1422
1423 static bool first = true; 1423 static bool first = true;
1424 static QStringList titles; 1424 static QStringList titles;
1425 static QStringList suffixes; 1425 static QStringList suffixes;
1426 static QStringList prefixes; 1426 static QStringList prefixes;
1427 1427
1428 if ( first ) { 1428 if ( first ) {
1429 first = false; 1429 first = false;
1430 titles += i18n( "Dr." ); 1430 titles += i18n( "Dr." );
1431 titles += i18n( "Miss" ); 1431 titles += i18n( "Miss" );
1432 titles += i18n( "Mr." ); 1432 titles += i18n( "Mr." );
1433 titles += i18n( "Mrs." ); 1433 titles += i18n( "Mrs." );
1434 titles += i18n( "Ms." ); 1434 titles += i18n( "Ms." );
1435 titles += i18n( "Prof." ); 1435 titles += i18n( "Prof." );
1436 1436
1437 suffixes += i18n( "I" ); 1437 suffixes += i18n( "I" );
1438 suffixes += i18n( "II" ); 1438 suffixes += i18n( "II" );
1439 suffixes += i18n( "III" ); 1439 suffixes += i18n( "III" );
1440 suffixes += i18n( "Jr." ); 1440 suffixes += i18n( "Jr." );
1441 suffixes += i18n( "Sr." ); 1441 suffixes += i18n( "Sr." );
1442 1442
1443 prefixes += "van"; 1443 prefixes += "van";
1444 prefixes += "von"; 1444 prefixes += "von";
1445 prefixes += "de"; 1445 prefixes += "de";
1446 1446
1447 KConfig config( locateLocal( "config", "kabcrc") ); 1447 KConfig config( locateLocal( "config", "kabcrc") );
1448 config.setGroup( "General" ); 1448 config.setGroup( "General" );
1449 titles += config.readListEntry( "Prefixes" ); 1449 titles += config.readListEntry( "Prefixes" );
1450 titles.remove( "" ); 1450 titles.remove( "" );
1451 prefixes += config.readListEntry( "Inclusions" ); 1451 prefixes += config.readListEntry( "Inclusions" );
1452 prefixes.remove( "" ); 1452 prefixes.remove( "" );
1453 suffixes += config.readListEntry( "Suffixes" ); 1453 suffixes += config.readListEntry( "Suffixes" );
1454 suffixes.remove( "" ); 1454 suffixes.remove( "" );
1455 } 1455 }
1456 1456
1457 // clear all name parts 1457 // clear all name parts
1458 setPrefix( "" ); 1458 setPrefix( "" );
1459 setGivenName( "" ); 1459 setGivenName( "" );
1460 setAdditionalName( "" ); 1460 setAdditionalName( "" );
1461 setFamilyName( "" ); 1461 setFamilyName( "" );
1462 setSuffix( "" ); 1462 setSuffix( "" );
1463 1463
1464 if ( str.isEmpty() ) 1464 if ( str.isEmpty() )
1465 return; 1465 return;
1466 1466
1467 int i = str.find(','); 1467 int i = str.find(',');
1468 if( i < 0 ) { 1468 if( i < 0 ) {
1469 QStringList parts = QStringList::split( " ", str ); 1469 QStringList parts = QStringList::split( " ", str );
1470 int leftOffset = 0; 1470 int leftOffset = 0;
1471 int rightOffset = parts.count() - 1; 1471 int rightOffset = parts.count() - 1;
1472 1472
1473 QString suffix; 1473 QString suffix;
1474 while ( rightOffset >= 0 ) { 1474 while ( rightOffset >= 0 ) {
1475 if ( suffixes.contains( parts[ rightOffset ] ) ) { 1475 if ( suffixes.contains( parts[ rightOffset ] ) ) {
1476 suffix.prepend(parts[ rightOffset ] + (suffix.isEmpty() ? "" : " ")); 1476 suffix.prepend(parts[ rightOffset ] + (suffix.isEmpty() ? "" : " "));
1477 rightOffset--; 1477 rightOffset--;
1478 } else 1478 } else
1479 break; 1479 break;
1480 } 1480 }
1481 setSuffix( suffix ); 1481 setSuffix( suffix );
1482 1482
1483 if ( rightOffset < 0 ) 1483 if ( rightOffset < 0 )
1484 return; 1484 return;
1485 1485
1486 if ( rightOffset - 1 >= 0 && prefixes.contains( parts[ rightOffset - 1 ].lower() ) ) { 1486 if ( rightOffset - 1 >= 0 && prefixes.contains( parts[ rightOffset - 1 ].lower() ) ) {
1487 setFamilyName( parts[ rightOffset - 1 ] + " " + parts[ rightOffset ] ); 1487 setFamilyName( parts[ rightOffset - 1 ] + " " + parts[ rightOffset ] );
1488 rightOffset--; 1488 rightOffset--;
1489 } else 1489 } else
1490 setFamilyName( parts[ rightOffset ] ); 1490 setFamilyName( parts[ rightOffset ] );
1491 1491
1492 QString prefix; 1492 QString prefix;
1493 while ( leftOffset < rightOffset ) { 1493 while ( leftOffset < rightOffset ) {
1494 if ( titles.contains( parts[ leftOffset ] ) ) { 1494 if ( titles.contains( parts[ leftOffset ] ) ) {
1495 prefix.append( ( prefix.isEmpty() ? "" : " ") + parts[ leftOffset ] ); 1495 prefix.append( ( prefix.isEmpty() ? "" : " ") + parts[ leftOffset ] );
1496 leftOffset++; 1496 leftOffset++;
1497 } else 1497 } else
1498 break; 1498 break;
1499 } 1499 }
1500 setPrefix( prefix ); 1500 setPrefix( prefix );
1501 1501
1502 if ( leftOffset < rightOffset ) { 1502 if ( leftOffset < rightOffset ) {
1503 setGivenName( parts[ leftOffset ] ); 1503 setGivenName( parts[ leftOffset ] );
1504 leftOffset++; 1504 leftOffset++;
1505 } 1505 }
1506 1506
1507 QString additionalName; 1507 QString additionalName;
1508 while ( leftOffset < rightOffset ) { 1508 while ( leftOffset < rightOffset ) {
1509 additionalName.append( ( additionalName.isEmpty() ? "" : " ") + parts[ leftOffset ] ); 1509 additionalName.append( ( additionalName.isEmpty() ? "" : " ") + parts[ leftOffset ] );
1510 leftOffset++; 1510 leftOffset++;
1511 } 1511 }
1512 setAdditionalName( additionalName ); 1512 setAdditionalName( additionalName );
1513 } else { 1513 } else {
1514 QString part1 = str.left( i ); 1514 QString part1 = str.left( i );
1515 QString part2 = str.mid( i + 1 ); 1515 QString part2 = str.mid( i + 1 );
1516 1516
1517 QStringList parts = QStringList::split( " ", part1 ); 1517 QStringList parts = QStringList::split( " ", part1 );
1518 int leftOffset = 0; 1518 int leftOffset = 0;
1519 int rightOffset = parts.count() - 1; 1519 int rightOffset = parts.count() - 1;
1520 1520
1521 QString suffix; 1521 QString suffix;
1522 while ( rightOffset >= 0 ) { 1522 while ( rightOffset >= 0 ) {
1523 if ( suffixes.contains( parts[ rightOffset ] ) ) { 1523 if ( suffixes.contains( parts[ rightOffset ] ) ) {
1524 suffix.prepend(parts[ rightOffset ] + (suffix.isEmpty() ? "" : " ")); 1524 suffix.prepend(parts[ rightOffset ] + (suffix.isEmpty() ? "" : " "));
1525 rightOffset--; 1525 rightOffset--;
1526 } else 1526 } else
1527 break; 1527 break;
1528 } 1528 }
1529 setSuffix( suffix ); 1529 setSuffix( suffix );
1530 1530
1531 if ( rightOffset - 1 >= 0 && prefixes.contains( parts[ rightOffset - 1 ].lower() ) ) { 1531 if ( rightOffset - 1 >= 0 && prefixes.contains( parts[ rightOffset - 1 ].lower() ) ) {
1532 setFamilyName( parts[ rightOffset - 1 ] + " " + parts[ rightOffset ] ); 1532 setFamilyName( parts[ rightOffset - 1 ] + " " + parts[ rightOffset ] );
1533 rightOffset--; 1533 rightOffset--;
1534 } else 1534 } else
1535 setFamilyName( parts[ rightOffset ] ); 1535 setFamilyName( parts[ rightOffset ] );
1536 1536
1537 QString prefix; 1537 QString prefix;
1538 while ( leftOffset < rightOffset ) { 1538 while ( leftOffset < rightOffset ) {
1539 if ( titles.contains( parts[ leftOffset ] ) ) { 1539 if ( titles.contains( parts[ leftOffset ] ) ) {
1540 prefix.append( ( prefix.isEmpty() ? "" : " ") + parts[ leftOffset ] ); 1540 prefix.append( ( prefix.isEmpty() ? "" : " ") + parts[ leftOffset ] );
1541 leftOffset++; 1541 leftOffset++;
1542 } else 1542 } else
1543 break; 1543 break;
1544 } 1544 }
1545 1545
1546 parts = QStringList::split( " ", part2 ); 1546 parts = QStringList::split( " ", part2 );
1547 1547
1548 leftOffset = 0; 1548 leftOffset = 0;
1549 rightOffset = parts.count(); 1549 rightOffset = parts.count();
1550 1550
1551 while ( leftOffset < rightOffset ) { 1551 while ( leftOffset < rightOffset ) {
1552 if ( titles.contains( parts[ leftOffset ] ) ) { 1552 if ( titles.contains( parts[ leftOffset ] ) ) {
1553 prefix.append( ( prefix.isEmpty() ? "" : " ") + parts[ leftOffset ] ); 1553 prefix.append( ( prefix.isEmpty() ? "" : " ") + parts[ leftOffset ] );
1554 leftOffset++; 1554 leftOffset++;
1555 } else 1555 } else
1556 break; 1556 break;
1557 } 1557 }
1558 setPrefix( prefix ); 1558 setPrefix( prefix );
1559 1559
1560 if ( leftOffset < rightOffset ) { 1560 if ( leftOffset < rightOffset ) {
1561 setGivenName( parts[ leftOffset ] ); 1561 setGivenName( parts[ leftOffset ] );
1562 leftOffset++; 1562 leftOffset++;
1563 } 1563 }
1564 1564
1565 QString additionalName; 1565 QString additionalName;
1566 while ( leftOffset < rightOffset ) { 1566 while ( leftOffset < rightOffset ) {
1567 additionalName.append( ( additionalName.isEmpty() ? "" : " ") + parts[ leftOffset ] ); 1567 additionalName.append( ( additionalName.isEmpty() ? "" : " ") + parts[ leftOffset ] );
1568 leftOffset++; 1568 leftOffset++;
1569 } 1569 }
1570 setAdditionalName( additionalName ); 1570 setAdditionalName( additionalName );
1571 } 1571 }
1572} 1572}
1573 1573
1574QString Addressee::realName() const 1574QString Addressee::realName() const
1575{ 1575{
1576 if ( !formattedName().isEmpty() ) 1576 if ( !formattedName().isEmpty() )
1577 return formattedName(); 1577 return formattedName();
1578 1578
1579 QString n = assembledName(); 1579 QString n = assembledName();
1580 1580
1581 if ( n.isEmpty() ) 1581 if ( n.isEmpty() )
1582 n = name(); 1582 n = name();
1583 if ( n.isEmpty() ) 1583 if ( n.isEmpty() )
1584 n = organization(); 1584 n = organization();
1585 return n; 1585 return n;
1586} 1586}
1587 1587
1588QString Addressee::assembledName() const 1588QString Addressee::assembledName() const
1589{ 1589{
1590 QString name = prefix() + " " + givenName() + " " + additionalName() + " " + 1590 QString name = prefix() + " " + givenName() + " " + additionalName() + " " +
1591 familyName() + " " + suffix(); 1591 familyName() + " " + suffix();
1592 1592
1593 return name.simplifyWhiteSpace(); 1593 return name.simplifyWhiteSpace();
1594} 1594}
1595 1595
1596QString Addressee::fullEmail( const QString &email ) const 1596QString Addressee::fullEmail( const QString &email ) const
diff --git a/kabc/plugins/qtopia/qtopiaconverter.cpp b/kabc/plugins/qtopia/qtopiaconverter.cpp
index 39d366b..9693a68 100644
--- a/kabc/plugins/qtopia/qtopiaconverter.cpp
+++ b/kabc/plugins/qtopia/qtopiaconverter.cpp
@@ -1,673 +1,673 @@
1/* 1/*
2 This file is part of libkabc. 2 This file is part of libkabc.
3 Copyright (c) 2002 Tobias Koenig <tokoe@kde.org> 3 Copyright (c) 2002 Tobias Koenig <tokoe@kde.org>
4 4
5 This library is free software; you can redistribute it and/or 5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Library General Public 6 modify it under the terms of the GNU Library General Public
7 License as published by the Free Software Foundation; either 7 License as published by the Free Software Foundation; either
8 version 2 of the License, or (at your option) any later version. 8 version 2 of the License, or (at your option) any later version.
9 9
10 This library is distributed in the hope that it will be useful, 10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Library General Public License for more details. 13 Library General Public License for more details.
14 14
15 You should have received a copy of the GNU Library General Public License 15 You should have received a copy of the GNU Library General Public License
16 along with this library; see the file COPYING.LIB. If not, write to 16 along with this library; see the file COPYING.LIB. If not, write to
17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 Boston, MA 02111-1307, USA. 18 Boston, MA 02111-1307, USA.
19*/ 19*/
20 20
21/* 21/*
22Enhanced Version of the file for platform independent KDE tools. 22Enhanced Version of the file for platform independent KDE tools.
23Copyright (c) 2004 Ulf Schenk 23Copyright (c) 2004 Ulf Schenk
24 24
25$Id$ 25$Id$
26*/ 26*/
27 27
28//US 28//US
29#include "kglobal.h" 29#include "kglobal.h"
30#include "klocale.h" 30#include "klocale.h"
31 31
32 32
33#include "qtopiaconverter.h" 33#include "qtopiaconverter.h"
34 34
35#include <qfile.h> 35#include <qfile.h>
36#include <qdir.h> 36#include <qdir.h>
37#include <qtextstream.h> 37#include <qtextstream.h>
38//#include <.h> 38//#include <.h>
39 39
40#include <libkdepim/ksyncprofile.h> 40#include <libkdepim/ksyncprofile.h>
41 41
42 42
43using namespace KABC; 43using namespace KABC;
44 44
45QtopiaConverter::QtopiaConverter() 45QtopiaConverter::QtopiaConverter()
46{ 46{
47 m_edit = 0; 47 m_edit = 0;
48} 48}
49 49
50QtopiaConverter::~QtopiaConverter() 50QtopiaConverter::~QtopiaConverter()
51{ 51{
52 deinit(); 52 deinit();
53} 53}
54 54
55bool QtopiaConverter::init() 55bool QtopiaConverter::init()
56{ 56{
57 QString fn = QDir::homeDirPath() +"/Settings/Categories.xml"; 57 QString fn = QDir::homeDirPath() +"/Settings/Categories.xml";
58 m_edit = new CategoryEdit( fn); 58 m_edit = new CategoryEdit( fn);
59 return true; 59 return true;
60} 60}
61 61
62void QtopiaConverter::deinit() 62void QtopiaConverter::deinit()
63{ 63{
64 if (m_edit) 64 if (m_edit)
65 { 65 {
66 delete m_edit; 66 delete m_edit;
67 m_edit = 0; 67 m_edit = 0;
68 } 68 }
69} 69}
70QString QtopiaConverter::categoriesToNumber( const QStringList &list, const QString &app ) 70QString QtopiaConverter::categoriesToNumber( const QStringList &list, const QString &app )
71{ 71{
72 startover: 72 startover:
73 QStringList dummy; 73 QStringList dummy;
74 QValueList<OpieCategories>::ConstIterator catIt; 74 QValueList<OpieCategories>::ConstIterator catIt;
75 QValueList<OpieCategories> categories = m_edit->categories(); 75 QValueList<OpieCategories> categories = m_edit->categories();
76 bool found = false; 76 bool found = false;
77 for ( QStringList::ConstIterator listIt = list.begin(); listIt != list.end(); ++listIt ) { 77 for ( QStringList::ConstIterator listIt = list.begin(); listIt != list.end(); ++listIt ) {
78 /* skip empty category name */ 78 /* skip empty category name */
79 if ( (*listIt).isEmpty() ) continue; 79 if ( (*listIt).isEmpty() ) continue;
80 80
81 found = false; 81 found = false;
82 for ( catIt = categories.begin(); catIt != categories.end(); ++catIt ) { 82 for ( catIt = categories.begin(); catIt != categories.end(); ++catIt ) {
83 /* 83 /*
84 * We currently do not take app into account 84 * We currently do not take app into account
85 * if name matches and the id isn't already in dummy we'll add it 85 * if name matches and the id isn't already in dummy we'll add it
86 */ 86 */
87 if ( (*catIt).name() == (*listIt) && !dummy.contains(( *catIt).id() ) ) { // the same name 87 if ( (*catIt).name() == (*listIt) && !dummy.contains(( *catIt).id() ) ) { // the same name
88 found= true; 88 found= true;
89 dummy << (*catIt).id(); 89 dummy << (*catIt).id();
90 } 90 }
91 } 91 }
92 /* if not found and the category is not empty 92 /* if not found and the category is not empty
93 * 93 *
94 * generate a new category and start over again 94 * generate a new category and start over again
95 * ugly goto to reiterate 95 * ugly goto to reiterate
96 */ 96 */
97 97
98 if ( !found && !(*listIt).isEmpty() ){ 98 if ( !found && !(*listIt).isEmpty() ){
99 m_edit->addCategory( app, (*listIt) ); // generate a new category 99 m_edit->addCategory( app, (*listIt) ); // generate a new category
100 goto startover; 100 goto startover;
101 } 101 }
102 } 102 }
103 103
104 return dummy.join(";"); 104 return dummy.join(";");
105} 105}
106 106
107 107
108// FROM TT timeconversion.cpp GPLed 108// FROM TT timeconversion.cpp GPLed
109QDate QtopiaConverter::fromString( const QString &datestr ) 109QDate QtopiaConverter::fromString( const QString &datestr )
110{ 110{
111 if (datestr.isEmpty() ) 111 if (datestr.isEmpty() )
112 return QDate(); 112 return QDate();
113 113
114 int monthPos = datestr.find('.'); 114 int monthPos = datestr.find('.');
115 int yearPos = datestr.find('.', monthPos+1 ); 115 int yearPos = datestr.find('.', monthPos+1 );
116 if ( monthPos == -1 || yearPos == -1 ) { 116 if ( monthPos == -1 || yearPos == -1 ) {
117 return QDate(); 117 return QDate();
118 } 118 }
119 int d = datestr.left( monthPos ).toInt(); 119 int d = datestr.left( monthPos ).toInt();
120 int m = datestr.mid( monthPos+1, yearPos - monthPos - 1 ).toInt(); 120 int m = datestr.mid( monthPos+1, yearPos - monthPos - 1 ).toInt();
121 int y = datestr.mid( yearPos+1 ).toInt(); 121 int y = datestr.mid( yearPos+1 ).toInt();
122 QDate date ( y,m,d ); 122 QDate date ( y,m,d );
123 123
124 124
125 return date; 125 return date;
126} 126}
127 127
128QDate QtopiaConverter::dateFromString( const QString& s ) 128QDate QtopiaConverter::dateFromString( const QString& s )
129{ 129{
130 QDate date; 130 QDate date;
131 131
132 if ( s.isEmpty() ) 132 if ( s.isEmpty() )
133 return date; 133 return date;
134 134
135 // Be backward compatible to old Opie format: 135 // Be backward compatible to old Opie format:
136 // Try to load old format. If it fails, try new ISO-Format! 136 // Try to load old format. If it fails, try new ISO-Format!
137 date = fromString ( s ); 137 date = fromString ( s );
138 if ( date.isValid() ) 138 if ( date.isValid() )
139 return date; 139 return date;
140 140
141 // Read ISO-Format (YYYYMMDD) 141 // Read ISO-Format (YYYYMMDD)
142 int year = s.mid(0, 4).toInt(); 142 int year = s.mid(0, 4).toInt();
143 int month = s.mid(4,2).toInt(); 143 int month = s.mid(4,2).toInt();
144 int day = s.mid(6,2).toInt(); 144 int day = s.mid(6,2).toInt();
145 145
146 // do some quick sanity checking 146 // do some quick sanity checking
147 if ( year < 1900 || year > 3000 ) 147 if ( year < 1900 || year > 3000 )
148 return date; 148 return date;
149 149
150 if ( month < 0 || month > 12 ) 150 if ( month < 0 || month > 12 )
151 return date; 151 return date;
152 152
153 if ( day < 0 || day > 31 ) 153 if ( day < 0 || day > 31 )
154 return date; 154 return date;
155 155
156 156
157 date.setYMD( year, month, day ); 157 date.setYMD( year, month, day );
158 158
159 if ( !date.isValid() ) 159 if ( !date.isValid() )
160 return QDate(); 160 return QDate();
161 161
162 162
163 return date; 163 return date;
164} 164}
165QString QtopiaConverter::dateToString( const QDate &d ) 165QString QtopiaConverter::dateToString( const QDate &d )
166{ 166{
167 if ( d.isNull() || !d.isValid() ) 167 if ( d.isNull() || !d.isValid() )
168 return QString::null; 168 return QString::null;
169 169
170 // ISO format in year, month, day (YYYYMMDD); e.g. 20021231 170 // ISO format in year, month, day (YYYYMMDD); e.g. 20021231
171 QString year = QString::number( d.year() ); 171 QString year = QString::number( d.year() );
172 QString month = QString::number( d.month() ); 172 QString month = QString::number( d.month() );
173 month = month.rightJustify( 2, '0' ); 173 month = month.rightJustify( 2, '0' );
174 QString day = QString::number( d.day() ); 174 QString day = QString::number( d.day() );
175 day = day.rightJustify( 2, '0' ); 175 day = day.rightJustify( 2, '0' );
176 176
177 QString str = year + month + day; 177 QString str = year + month + day;
178 178
179 return str; 179 return str;
180} 180}
181 181
182bool QtopiaConverter::qtopiaToAddressee( const QDomElement& el, Addressee &adr ) 182bool QtopiaConverter::qtopiaToAddressee( const QDomElement& el, Addressee &adr )
183{ 183{
184 { //LR 184 { //LR
185 185
186 adr.setUid( el.attribute("Uid" ) ); 186 adr.setUid( el.attribute("Uid" ) );
187 adr.setFamilyName( el.attribute( "LastName" ) ); 187 adr.setFamilyName( el.attribute( "LastName" ) );
188 adr.setGivenName( el.attribute( "FirstName" ) ); 188 adr.setGivenName( el.attribute( "FirstName" ) );
189 adr.setAdditionalName( el.attribute( "MiddleName" ) ); 189 adr.setAdditionalName( el.attribute( "MiddleName" ) );
190 adr.setSuffix( el.attribute( "Suffix" ) ); 190 adr.setSuffix( el.attribute( "Suffix" ) );
191 adr.setNickName( el.attribute( "Nickname" ) ); 191 adr.setNickName( el.attribute( "Nickname" ) );
192 192
193 QDate date = dateFromString( el.attribute( "Birthday" ) ); 193 QDate date = dateFromString( el.attribute( "Birthday" ) );
194 if ( date.isValid() ) 194 if ( date.isValid() )
195 adr.setBirthday( date ); 195 adr.setBirthday( date );
196 196
197 adr.setRole( el.attribute( "JobTitle" ) ); 197 adr.setRole( el.attribute( "JobTitle" ) );
198 if ( !el.attribute( "FileAs" ).isEmpty() ) 198 if ( !el.attribute( "FileAs" ).isEmpty() )
199 adr.setFormattedName( el.attribute( "FileAs" ) ); 199 adr.setFormattedName( el.attribute( "FileAs" ) );
200 200
201 adr.setOrganization( el.attribute( "Company" ) ); 201 adr.setOrganization( el.attribute( "Company" ) );
202 202
203 KABC::PhoneNumber businessPhoneNum( el.attribute( "BusinessPhone" ), 203 KABC::PhoneNumber businessPhoneNum( el.attribute( "BusinessPhone" ),
204 KABC::PhoneNumber::Work ); 204 KABC::PhoneNumber::Work | KABC::PhoneNumber::Pref );
205 KABC::PhoneNumber businessFaxNum( el.attribute( "BusinessFax" ), 205 KABC::PhoneNumber businessFaxNum( el.attribute( "BusinessFax" ),
206 KABC::PhoneNumber::Work | KABC::PhoneNumber::Fax ); 206 KABC::PhoneNumber::Work | KABC::PhoneNumber::Fax );
207 KABC::PhoneNumber businessMobile( el.attribute( "BusinessMobile" ), 207 KABC::PhoneNumber businessMobile( el.attribute( "BusinessMobile" ),
208 KABC::PhoneNumber::Work | KABC::PhoneNumber::Cell ); 208 KABC::PhoneNumber::Car );
209 KABC::PhoneNumber businessPager( el.attribute( "BusinessPager" ), 209 KABC::PhoneNumber businessPager( el.attribute( "BusinessPager" ),
210 KABC::PhoneNumber::Work | KABC::PhoneNumber::Pager ); 210 KABC::PhoneNumber::Pager );
211 if ( !businessPhoneNum.number().isEmpty() ) 211 if ( !businessPhoneNum.number().isEmpty() )
212 adr.insertPhoneNumber( businessPhoneNum ); 212 adr.insertPhoneNumber( businessPhoneNum );
213 if ( !businessFaxNum.number().isEmpty() ) 213 if ( !businessFaxNum.number().isEmpty() )
214 adr.insertPhoneNumber( businessFaxNum ); 214 adr.insertPhoneNumber( businessFaxNum );
215 if ( !businessMobile.number().isEmpty() ) 215 if ( !businessMobile.number().isEmpty() )
216 adr.insertPhoneNumber( businessMobile ); 216 adr.insertPhoneNumber( businessMobile );
217 if ( !businessPager.number().isEmpty() ) 217 if ( !businessPager.number().isEmpty() )
218 adr.insertPhoneNumber( businessPager ); 218 adr.insertPhoneNumber( businessPager );
219 219
220 // Handle multiple mail addresses 220 // Handle multiple mail addresses
221 QString DefaultEmail = el.attribute( "DefaultEmail" ); 221 QString DefaultEmail = el.attribute( "DefaultEmail" );
222 if ( !DefaultEmail.isEmpty() ) 222 if ( !DefaultEmail.isEmpty() )
223 adr.insertEmail( DefaultEmail, true ); // preferred 223 adr.insertEmail( DefaultEmail, true ); // preferred
224 224
225 QStringList Emails = QStringList::split(" ",el.attribute("Emails")); 225 QStringList Emails = QStringList::split(" ",el.attribute("Emails"));
226 int i; 226 int i;
227 for (i = 0;i < Emails.count();++i) { 227 for (i = 0;i < Emails.count();++i) {
228 if ( Emails[i] != DefaultEmail ) 228 if ( Emails[i] != DefaultEmail )
229 adr.insertEmail( Emails[i], false ); 229 adr.insertEmail( Emails[i], false );
230 } 230 }
231 231
232 KABC::PhoneNumber homePhoneNum( el.attribute( "HomePhone" ), 232 KABC::PhoneNumber homePhoneNum( el.attribute( "HomePhone" ),
233 KABC::PhoneNumber::Home ); 233 KABC::PhoneNumber::Home | KABC::PhoneNumber::Pref);
234 KABC::PhoneNumber homeFax( el.attribute( "HomeFax" ), 234 KABC::PhoneNumber homeFax( el.attribute( "HomeFax" ),
235 KABC::PhoneNumber::Home | KABC::PhoneNumber::Fax ); 235 KABC::PhoneNumber::Home | KABC::PhoneNumber::Fax );
236 236
237 KABC::PhoneNumber homeMobile( el.attribute( "HomeMobile" ), 237 KABC::PhoneNumber homeMobile( el.attribute( "HomeMobile" ),
238 KABC::PhoneNumber::Cell ); 238 KABC::PhoneNumber::Cell );
239 239
240 if ( !homePhoneNum.number().isEmpty() ) 240 if ( !homePhoneNum.number().isEmpty() )
241 adr.insertPhoneNumber( homePhoneNum ); 241 adr.insertPhoneNumber( homePhoneNum );
242 if ( !homeFax.number().isEmpty() ) 242 if ( !homeFax.number().isEmpty() )
243 adr.insertPhoneNumber( homeFax ); 243 adr.insertPhoneNumber( homeFax );
244 if ( !homeMobile.number().isEmpty() ) 244 if ( !homeMobile.number().isEmpty() )
245 adr.insertPhoneNumber( homeMobile ); 245 adr.insertPhoneNumber( homeMobile );
246 246
247 KABC::Address business( KABC::Address::Work ); 247 KABC::Address business( KABC::Address::Work );
248 business.setStreet( el.attribute( "BusinessStreet" ) ); 248 business.setStreet( el.attribute( "BusinessStreet" ) );
249 business.setLocality( el.attribute( "BusinessCity" ) ); 249 business.setLocality( el.attribute( "BusinessCity" ) );
250 business.setRegion( el.attribute( "BusinessState" ) ); 250 business.setRegion( el.attribute( "BusinessState" ) );
251 business.setPostalCode( el.attribute( "BusinessZip" ) ); 251 business.setPostalCode( el.attribute( "BusinessZip" ) );
252 business.setCountry( el.attribute( "BusinessCountry" ) ); 252 business.setCountry( el.attribute( "BusinessCountry" ) );
253 253
254 if ( !business.isEmpty() ) 254 if ( !business.isEmpty() )
255 adr.insertAddress( business ); 255 adr.insertAddress( business );
256 256
257 KABC::Address home( KABC::Address::Home ); 257 KABC::Address home( KABC::Address::Home );
258 home.setStreet( el.attribute( "HomeStreet" ) ); 258 home.setStreet( el.attribute( "HomeStreet" ) );
259 home.setLocality( el.attribute( "HomeCity" ) ); 259 home.setLocality( el.attribute( "HomeCity" ) );
260 home.setRegion( el.attribute( "HomeState" ) ); 260 home.setRegion( el.attribute( "HomeState" ) );
261 home.setPostalCode( el.attribute( "HomeZip" ) ); 261 home.setPostalCode( el.attribute( "HomeZip" ) );
262 home.setCountry( el.attribute( "HomeCountry" ) ); 262 home.setCountry( el.attribute( "HomeCountry" ) );
263 263
264 if ( !home.isEmpty() ) 264 if ( !home.isEmpty() )
265 adr.insertAddress( home ); 265 adr.insertAddress( home );
266 266
267 adr.setNickName( el.attribute( "Nickname" ) ); 267 adr.setNickName( el.attribute( "Nickname" ) );
268 adr.setNote( el.attribute( "Notes" ) ); 268 adr.setNote( el.attribute( "Notes" ) );
269 269
270 { 270 {
271 QStringList categories = QStringList::split(";", el.attribute("Categories" ) ); 271 QStringList categories = QStringList::split(";", el.attribute("Categories" ) );
272 QString cat; 272 QString cat;
273 QStringList added; 273 QStringList added;
274 for ( uint i = 0; i < categories.count(); i++ ) { 274 for ( uint i = 0; i < categories.count(); i++ ) {
275 cat = m_edit->categoryById( categories[ i ], "Contacts" ); 275 cat = m_edit->categoryById( categories[ i ], "Contacts" );
276 276
277 // if name is not empty and we did not add the 277 // if name is not empty and we did not add the
278 // cat try to repair broken files 278 // cat try to repair broken files
279 if ( !cat.isEmpty() && !added.contains( cat ) ) { 279 if ( !cat.isEmpty() && !added.contains( cat ) ) {
280 adr.insertCategory( cat ); 280 adr.insertCategory( cat );
281 added << cat; 281 added << cat;
282 } 282 }
283 } 283 }
284 } 284 }
285 285
286 if ( !el.attribute( "Department" ).isEmpty() ) 286 if ( !el.attribute( "Department" ).isEmpty() )
287 adr.insertCustom( "KADDRESSBOOK", "X-Department", el.attribute( "Department" ) ); 287 adr.insertCustom( "KADDRESSBOOK", "X-Department", el.attribute( "Department" ) );
288 if ( !el.attribute( "HomeWebPage" ).isEmpty() ) 288 if ( !el.attribute( "HomeWebPage" ).isEmpty() )
289 adr.insertCustom( "opie", "HomeWebPage", el.attribute( "HomeWebPage" ) ); 289 adr.insertCustom( "opie", "HomeWebPage", el.attribute( "HomeWebPage" ) );
290 if ( !el.attribute( "Spouse" ).isEmpty() ) 290 if ( !el.attribute( "Spouse" ).isEmpty() )
291 adr.insertCustom( "KADDRESSBOOK", "X-SpousesName", el.attribute( "Spouse" ) ); 291 adr.insertCustom( "KADDRESSBOOK", "X-SpousesName", el.attribute( "Spouse" ) );
292 if ( !el.attribute( "Gender" ).isEmpty() ) { 292 if ( !el.attribute( "Gender" ).isEmpty() ) {
293 if ( el.attribute( "Gender" ) == "1" ) 293 if ( el.attribute( "Gender" ) == "1" )
294 adr.insertCustom( "KADDRESSBOOK", "X-Gender", "male" ); 294 adr.insertCustom( "KADDRESSBOOK", "X-Gender", "male" );
295 else if ( el.attribute( "Gender" ) == "2" ) 295 else if ( el.attribute( "Gender" ) == "2" )
296 adr.insertCustom( "KADDRESSBOOK", "X-Gender", "female" ); 296 adr.insertCustom( "KADDRESSBOOK", "X-Gender", "female" );
297 } 297 }
298 QDate ann = dateFromString( el.attribute( "Anniversary" ) ); 298 QDate ann = dateFromString( el.attribute( "Anniversary" ) );
299 if ( ann.isValid() ) { 299 if ( ann.isValid() ) {
300 QString dt = KGlobal::locale()->formatDate(ann, true, KLocale::ISODate); 300 QString dt = KGlobal::locale()->formatDate(ann, true, KLocale::ISODate);
301 adr.insertCustom( "KADDRESSBOOK", "X-Anniversary", dt ); 301 adr.insertCustom( "KADDRESSBOOK", "X-Anniversary", dt );
302 } 302 }
303 303
304 if ( !el.attribute( "Children" ).isEmpty() ) 304 if ( !el.attribute( "Children" ).isEmpty() )
305 adr.insertCustom("KADDRESSBOOK", "X-Children", el.attribute("Children") ); 305 adr.insertCustom("KADDRESSBOOK", "X-Children", el.attribute("Children") );
306 if ( !el.attribute( "Office" ).isEmpty() ) 306 if ( !el.attribute( "Office" ).isEmpty() )
307 adr.insertCustom("KADDRESSBOOK", "X-Office", el.attribute("Office") ); 307 adr.insertCustom("KADDRESSBOOK", "X-Office", el.attribute("Office") );
308 if ( !el.attribute( "Profession" ).isEmpty() ) 308 if ( !el.attribute( "Profession" ).isEmpty() )
309 adr.insertCustom("KADDRESSBOOK", "X-Profession", el.attribute("Profession") ); 309 adr.insertCustom("KADDRESSBOOK", "X-Profession", el.attribute("Profession") );
310 if ( !el.attribute( "Assistant" ).isEmpty() ) 310 if ( !el.attribute( "Assistant" ).isEmpty() )
311 adr.insertCustom("KADDRESSBOOK", "X-AssistantsName", el.attribute("Assistant") ); 311 adr.insertCustom("KADDRESSBOOK", "X-AssistantsName", el.attribute("Assistant") );
312 if ( !el.attribute( "Manager" ).isEmpty() ) 312 if ( !el.attribute( "Manager" ).isEmpty() )
313 adr.insertCustom("KADDRESSBOOK", "X-ManagersName", el.attribute("Manager") ); 313 adr.insertCustom("KADDRESSBOOK", "X-ManagersName", el.attribute("Manager") );
314 314
315 315
316 } 316 }
317 return true; 317 return true;
318} 318}
319 319
320bool QtopiaConverter::addresseeToQtopia( const Addressee &ab, QTextStream *stream ) 320bool QtopiaConverter::addresseeToQtopia( const Addressee &ab, QTextStream *stream )
321{ 321{
322 *stream << "<Contact "; 322 *stream << "<Contact ";
323 *stream << "FirstName=\"" << escape(ab.givenName()) << "\" "; 323 *stream << "FirstName=\"" << escape(ab.givenName()) << "\" ";
324 *stream << "MiddleName=\"" << escape(ab.additionalName()) << "\" "; 324 *stream << "MiddleName=\"" << escape(ab.additionalName()) << "\" ";
325 *stream << "LastName=\"" << escape(ab.familyName()) << "\" "; 325 *stream << "LastName=\"" << escape(ab.familyName()) << "\" ";
326 *stream << "Suffix=\"" << escape(ab.suffix()) << "\" "; 326 *stream << "Suffix=\"" << escape(ab.suffix()) << "\" ";
327 327
328 QString sortStr; 328 QString sortStr;
329 sortStr = ab.formattedName(); 329 sortStr = ab.formattedName();
330 /* is formattedName is empty we use the assembled name as fallback */ 330 /* is formattedName is empty we use the assembled name as fallback */
331 if (sortStr.isEmpty() ) 331 if (sortStr.isEmpty() )
332 sortStr = ab.assembledName(); 332 sortStr = ab.assembledName();
333 *stream << "FileAs=\"" << escape(sortStr) << "\" "; 333 *stream << "FileAs=\"" << escape(sortStr) << "\" ";
334 334
335 *stream << "JobTitle=\"" << escape(ab.role()) << "\" "; 335 *stream << "JobTitle=\"" << escape(ab.role()) << "\" ";
336 *stream << "Department=\"" << escape(ab.custom( "KADDRESSBOOK", "X-Department" )) << "\" "; 336 *stream << "Department=\"" << escape(ab.custom( "KADDRESSBOOK", "X-Department" )) << "\" ";
337 *stream << "Company=\"" << escape(ab.organization()) << "\" "; 337 *stream << "Company=\"" << escape(ab.organization()) << "\" ";
338 338
339 KABC::PhoneNumber businessPhoneNum = ab.phoneNumber(KABC::PhoneNumber::Work ); 339 KABC::PhoneNumber businessPhoneNum = ab.phoneNumber(KABC::PhoneNumber::Work );
340 *stream << "BusinessPhone=\"" << escape( businessPhoneNum.number() ) << "\" "; 340 *stream << "BusinessPhone=\"" << escape( businessPhoneNum.number() ) << "\" ";
341 341
342 KABC::PhoneNumber businessFaxNum = ab.phoneNumber(KABC::PhoneNumber::Work | KABC::PhoneNumber::Fax ); 342 KABC::PhoneNumber businessFaxNum = ab.phoneNumber(KABC::PhoneNumber::Work | KABC::PhoneNumber::Fax );
343 *stream << "BusinessFax=\"" << escape( businessFaxNum.number() )<< "\" "; 343 *stream << "BusinessFax=\"" << escape( businessFaxNum.number() )<< "\" ";
344 344
345 KABC::PhoneNumber businessMobile = ab.phoneNumber(KABC::PhoneNumber::Work | KABC::PhoneNumber::Cell ); 345 KABC::PhoneNumber businessMobile = ab.phoneNumber(KABC::PhoneNumber::Work | KABC::PhoneNumber::Cell );
346 *stream << "BusinessMobile=\"" << escape( businessMobile.number() ) << "\" "; 346 *stream << "BusinessMobile=\"" << escape( businessMobile.number() ) << "\" ";
347 347
348 *stream << "DefaultEmail=\"" << escape( ab.preferredEmail() ) << "\" "; 348 *stream << "DefaultEmail=\"" << escape( ab.preferredEmail() ) << "\" ";
349 QStringList list = ab.emails(); 349 QStringList list = ab.emails();
350 if ( list.count() > 0 ) { 350 if ( list.count() > 0 ) {
351 QStringList::Iterator it = list.begin(); 351 QStringList::Iterator it = list.begin();
352 *stream << "Emails=\"" << escape( *it ); 352 *stream << "Emails=\"" << escape( *it );
353 while (++it != list.end()) 353 while (++it != list.end())
354 *stream << ' ' << escape( *it ); 354 *stream << ' ' << escape( *it );
355 *stream << "\" "; 355 *stream << "\" ";
356 } 356 }
357 357
358 KABC::PhoneNumber homePhoneNum = ab.phoneNumber(KABC::PhoneNumber::Home ); 358 KABC::PhoneNumber homePhoneNum = ab.phoneNumber(KABC::PhoneNumber::Home );
359 *stream << "HomePhone=\"" << escape( homePhoneNum.number() ) << "\" "; 359 *stream << "HomePhone=\"" << escape( homePhoneNum.number() ) << "\" ";
360 360
361 KABC::PhoneNumber homeFax = ab.phoneNumber( KABC::PhoneNumber::Home | KABC::PhoneNumber::Fax ); 361 KABC::PhoneNumber homeFax = ab.phoneNumber( KABC::PhoneNumber::Home | KABC::PhoneNumber::Fax );
362 *stream << "HomeFax=\"" << escape( homeFax.number() ) << "\" "; 362 *stream << "HomeFax=\"" << escape( homeFax.number() ) << "\" ";
363 363
364 KABC::PhoneNumber homeMobile = ab.phoneNumber( KABC::PhoneNumber::Cell ); 364 KABC::PhoneNumber homeMobile = ab.phoneNumber( KABC::PhoneNumber::Cell );
365 *stream << "HomeMobile=\"" << escape( homeMobile.number() ) << "\" "; 365 *stream << "HomeMobile=\"" << escape( homeMobile.number() ) << "\" ";
366 366
367 KABC::Address business = ab.address(KABC::Address::Work ); 367 KABC::Address business = ab.address(KABC::Address::Work );
368 *stream << "BusinessStreet=\"" << escape( business.street() ) << "\" "; 368 *stream << "BusinessStreet=\"" << escape( business.street() ) << "\" ";
369 *stream << "BusinessCity=\"" << escape( business.locality() ) << "\" "; 369 *stream << "BusinessCity=\"" << escape( business.locality() ) << "\" ";
370 *stream << "BusinessZip=\"" << escape( business.postalCode() ) << "\" "; 370 *stream << "BusinessZip=\"" << escape( business.postalCode() ) << "\" ";
371 *stream << "BusinessCountry=\"" << escape( business.country() ) << "\" "; 371 *stream << "BusinessCountry=\"" << escape( business.country() ) << "\" ";
372 *stream << "BusinessState=\"" << escape( business.region() ) << "\" "; 372 *stream << "BusinessState=\"" << escape( business.region() ) << "\" ";
373 //stream << "BusinessPager=\"" << << "\" "; 373 //stream << "BusinessPager=\"" << << "\" ";
374 *stream << "Office=\"" << escape( ab.custom( "KADDRESSBOOK", "X-Office" ) ) << "\" "; 374 *stream << "Office=\"" << escape( ab.custom( "KADDRESSBOOK", "X-Office" ) ) << "\" ";
375 *stream << "Profession=\"" << escape( ab.custom( "KADDRESSBOOK", "X-Profession" ) ) << "\" "; 375 *stream << "Profession=\"" << escape( ab.custom( "KADDRESSBOOK", "X-Profession" ) ) << "\" ";
376 *stream << "Assistant=\"" << escape( ab.custom( "KADDRESSBOOK", "X-AssistantsName") ) << "\" "; 376 *stream << "Assistant=\"" << escape( ab.custom( "KADDRESSBOOK", "X-AssistantsName") ) << "\" ";
377 *stream << "Manager=\"" << escape( ab.custom( "KADDRESSBOOK", "X-ManagersName" ) ) << "\" "; 377 *stream << "Manager=\"" << escape( ab.custom( "KADDRESSBOOK", "X-ManagersName" ) ) << "\" ";
378 378
379 KABC::Address home = ab.address( KABC::Address::Home ); 379 KABC::Address home = ab.address( KABC::Address::Home );
380 *stream << "HomeStreet=\"" << escape( home.street() ) << "\" "; 380 *stream << "HomeStreet=\"" << escape( home.street() ) << "\" ";
381 *stream << "HomeCity=\"" << escape( home.locality() ) << "\" "; 381 *stream << "HomeCity=\"" << escape( home.locality() ) << "\" ";
382 *stream << "HomeState=\"" << escape( home.region() ) << "\" "; 382 *stream << "HomeState=\"" << escape( home.region() ) << "\" ";
383 *stream << "HomeZip=\"" << escape( home.postalCode() ) << "\" "; 383 *stream << "HomeZip=\"" << escape( home.postalCode() ) << "\" ";
384 *stream << "HomeCountry=\"" << escape( home.country() ) << "\" "; 384 *stream << "HomeCountry=\"" << escape( home.country() ) << "\" ";
385 385
386 *stream << "HomeWebPage=\"" << escape( ab.custom( "opie", "HomeWebPage" ) ) << "\" "; 386 *stream << "HomeWebPage=\"" << escape( ab.custom( "opie", "HomeWebPage" ) ) << "\" ";
387 *stream << "Spouse=\"" << escape( ab.custom( "KADDRESSBOOK", "X-SpousesName") ) << "\" "; 387 *stream << "Spouse=\"" << escape( ab.custom( "KADDRESSBOOK", "X-SpousesName") ) << "\" ";
388 QString gen = "0"; 388 QString gen = "0";
389 if ( ab.custom( "KADDRESSBOOK", "X-Gender") == "male" ) 389 if ( ab.custom( "KADDRESSBOOK", "X-Gender") == "male" )
390 gen = "1"; 390 gen = "1";
391 else if ( ab.custom( "KADDRESSBOOK", "X-Gender") == "female" ) 391 else if ( ab.custom( "KADDRESSBOOK", "X-Gender") == "female" )
392 gen = "2"; 392 gen = "2";
393 *stream << "Gender=\"" << escape( gen ) << "\" "; 393 *stream << "Gender=\"" << escape( gen ) << "\" ";
394 394
395 if ( ab.birthday().date().isValid() ) 395 if ( ab.birthday().date().isValid() )
396 *stream << "Birthday=\"" << escape( dateToString(ab.birthday().date() ) ) << "\" "; 396 *stream << "Birthday=\"" << escape( dateToString(ab.birthday().date() ) ) << "\" ";
397 397
398 { 398 {
399 QDate ann = KGlobal::locale()->readDate( ab.custom("KADDRESSBOOK", "X-Anniversary" ), 399 QDate ann = KGlobal::locale()->readDate( ab.custom("KADDRESSBOOK", "X-Anniversary" ),
400 "%Y-%m-%d"); 400 "%Y-%m-%d");
401 if (ann.isValid() ) { 401 if (ann.isValid() ) {
402 *stream << "Anniversary=\"" << escape( dateToString( ann ) ) << "\" "; 402 *stream << "Anniversary=\"" << escape( dateToString( ann ) ) << "\" ";
403 } 403 }
404 } 404 }
405 *stream << "Nickname=\"" << escape( ab.nickName() ) << "\" "; 405 *stream << "Nickname=\"" << escape( ab.nickName() ) << "\" ";
406 *stream << "Children=\"" << escape( ab.custom("KADDRESSBOOK", "X-Children" ) ) << "\" "; 406 *stream << "Children=\"" << escape( ab.custom("KADDRESSBOOK", "X-Children" ) ) << "\" ";
407 *stream << "Notes=\"" << escape( ab.note() ) << "\" "; 407 *stream << "Notes=\"" << escape( ab.note() ) << "\" ";
408 *stream << "Categories=\"" << categoriesToNumber( ab.categories(), "Contacts") << "\" "; 408 *stream << "Categories=\"" << categoriesToNumber( ab.categories(), "Contacts") << "\" ";
409 409
410 QString uid = ab.uid(); 410 QString uid = ab.uid();
411 *stream << "Uid=\"" << uid << "\" "; 411 *stream << "Uid=\"" << uid << "\" ";
412 //*stream << map.toString( "addressbook", uid ); 412 //*stream << map.toString( "addressbook", uid );
413 *stream << " />" << "\n"; 413 *stream << " />" << "\n";
414 414
415 return true; 415 return true;
416} 416}
417 417
418 418
419#if 0 419#if 0
420 420
421KTempFile* AddressBook::fromKDE( KSync::AddressBookSyncee *syncee, ExtraMap& map ) 421KTempFile* AddressBook::fromKDE( KSync::AddressBookSyncee *syncee, ExtraMap& map )
422{ 422{
423 423
424} 424}
425 425
426QStringList AddressBook::attributes()const { 426QStringList AddressBook::attributes()const {
427 QStringList lst; 427 QStringList lst;
428 lst << "FirstName"; 428 lst << "FirstName";
429 lst << "MiddleName"; 429 lst << "MiddleName";
430 lst << "LastName"; 430 lst << "LastName";
431 lst << "Suffix"; 431 lst << "Suffix";
432 lst << "FileAs"; 432 lst << "FileAs";
433 lst << "JobTitle"; 433 lst << "JobTitle";
434 lst << "Department"; 434 lst << "Department";
435 lst << "Company"; 435 lst << "Company";
436 lst << "BusinessPhone"; 436 lst << "BusinessPhone";
437 lst << "BusinessFax"; 437 lst << "BusinessFax";
438 lst << "BusinessMobile"; 438 lst << "BusinessMobile";
439 lst << "DefaultEmail"; 439 lst << "DefaultEmail";
440 lst << "Emails"; 440 lst << "Emails";
441 lst << "HomePhone"; 441 lst << "HomePhone";
442 lst << "HomeFax"; 442 lst << "HomeFax";
443 lst << "HomeMobile"; 443 lst << "HomeMobile";
444 lst << "BusinessStreet"; 444 lst << "BusinessStreet";
445 lst << "BusinessCity"; 445 lst << "BusinessCity";
446 lst << "BusinessZip"; 446 lst << "BusinessZip";
447 lst << "BusinessCountry"; 447 lst << "BusinessCountry";
448 lst << "BusinessState"; 448 lst << "BusinessState";
449 lst << "Office"; 449 lst << "Office";
450 lst << "Profession"; 450 lst << "Profession";
451 lst << "Assistant"; 451 lst << "Assistant";
452 lst << "Manager"; 452 lst << "Manager";
453 lst << "HomeStreet"; 453 lst << "HomeStreet";
454 lst << "HomeCity"; 454 lst << "HomeCity";
455 lst << "HomeState"; 455 lst << "HomeState";
456 lst << "HomeZip"; 456 lst << "HomeZip";
457 lst << "HomeCountry"; 457 lst << "HomeCountry";
458 lst << "HomeWebPage"; 458 lst << "HomeWebPage";
459 lst << "Spouse"; 459 lst << "Spouse";
460 lst << "Gender"; 460 lst << "Gender";
461 lst << "Anniversary"; 461 lst << "Anniversary";
462 lst << "Nickname"; 462 lst << "Nickname";
463 lst << "Children"; 463 lst << "Children";
464 lst << "Notes"; 464 lst << "Notes";
465 lst << "Categories"; 465 lst << "Categories";
466 lst << "Uid"; 466 lst << "Uid";
467 lst << "Birthday"; 467 lst << "Birthday";
468 468
469 return lst; 469 return lst;
470} 470}
471 471
472 472
473 473
474#endif 474#endif
475 475
476 476
477CategoryEdit::CategoryEdit(){ 477CategoryEdit::CategoryEdit(){
478} 478}
479CategoryEdit::CategoryEdit(const QString &fileName){ 479CategoryEdit::CategoryEdit(const QString &fileName){
480 parse( fileName ); 480 parse( fileName );
481} 481}
482CategoryEdit::~CategoryEdit(){ 482CategoryEdit::~CategoryEdit(){
483} 483}
484void CategoryEdit::save(const QString& fileName)const{ 484void CategoryEdit::save(const QString& fileName)const{
485 QFile file( fileName ); 485 QFile file( fileName );
486 QString endl = "\n"; 486 QString endl = "\n";
487 if ( file.open( IO_WriteOnly ) ) { 487 if ( file.open( IO_WriteOnly ) ) {
488 QTextStream stream( &file ); 488 QTextStream stream( &file );
489 stream.setEncoding( QTextStream::UnicodeUTF8 ); 489 stream.setEncoding( QTextStream::UnicodeUTF8 );
490 stream << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" << endl; 490 stream << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" << endl;
491 stream << "<!DOCTYPE CategoryList>" << endl; 491 stream << "<!DOCTYPE CategoryList>" << endl;
492 stream << "<Categories>" << endl; 492 stream << "<Categories>" << endl;
493 for ( QValueList<OpieCategories>::ConstIterator it = m_categories.begin(); 493 for ( QValueList<OpieCategories>::ConstIterator it = m_categories.begin();
494 it != m_categories.end(); ++it ) 494 it != m_categories.end(); ++it )
495 { 495 {
496 stream << "<Category id=\""<< ( (*it).id() ) << "\" "; 496 stream << "<Category id=\""<< ( (*it).id() ) << "\" ";
497 497
498 if ( !(*it).app().isEmpty() ) 498 if ( !(*it).app().isEmpty() )
499 stream << " app=\""<< ( (*it).app() ) << "\" "; 499 stream << " app=\""<< ( (*it).app() ) << "\" ";
500 500
501 stream << "name=\"" << ( (*it).name() ) << "\" "; 501 stream << "name=\"" << ( (*it).name() ) << "\" ";
502 stream << " />" << endl; 502 stream << " />" << endl;
503 } 503 }
504 stream << "</Categories>" << endl; 504 stream << "</Categories>" << endl;
505 file.close(); 505 file.close();
506 } 506 }
507} 507}
508int CategoryEdit::addCategory( const QString &name, int id ){ 508int CategoryEdit::addCategory( const QString &name, int id ){
509 return addCategory( QString::null, name, id ); 509 return addCategory( QString::null, name, id );
510} 510}
511int CategoryEdit::addCategory( const QString &appName, const QString &name, int id ){ 511int CategoryEdit::addCategory( const QString &appName, const QString &name, int id ){
512 if ( id == 0 ) { 512 if ( id == 0 ) {
513 // code from tt 513 // code from tt
514 //generate uid 514 //generate uid
515 QDateTime dt = QDateTime::currentDateTime(); 515 QDateTime dt = QDateTime::currentDateTime();
516 id = -1 * (int) dt.secsTo( QDateTime(QDate( 2000,1,1)) ); 516 id = -1 * (int) dt.secsTo( QDateTime(QDate( 2000,1,1)) );
517 while ( ids.contains( id ) ){ 517 while ( ids.contains( id ) ){
518 id += -1; 518 id += -1;
519 if ( id > 0 ) 519 if ( id > 0 )
520 id = -1; 520 id = -1;
521 } 521 }
522 } 522 }
523 ids.insert( id, TRUE ); 523 ids.insert( id, TRUE );
524 OpieCategories categories(QString::number(id), name, appName); 524 OpieCategories categories(QString::number(id), name, appName);
525 //pending FIXME LR m_categories.remove( categories); 525 //pending FIXME LR m_categories.remove( categories);
526 m_categories.append( categories); 526 m_categories.append( categories);
527 return id; 527 return id;
528} 528}
529/* 529/*
530 * we parse the simple Category File here 530 * we parse the simple Category File here
531 * We also keep track of global Cats 531 * We also keep track of global Cats
532 * and Of Organizer and Contact cats and then 532 * and Of Organizer and Contact cats and then
533 * we will add them to the kde side... 533 * we will add them to the kde side...
534 */ 534 */
535void CategoryEdit::parse( const QString &tempFile ){ 535void CategoryEdit::parse( const QString &tempFile ){
536 clear(); 536 clear();
537 537
538 QDomDocument doc( "mydocument" ); 538 QDomDocument doc( "mydocument" );
539 QFile f( tempFile ); 539 QFile f( tempFile );
540 if ( !f.open( IO_ReadOnly ) ) 540 if ( !f.open( IO_ReadOnly ) )
541 return; 541 return;
542 542
543 if ( !doc.setContent( &f ) ) { 543 if ( !doc.setContent( &f ) ) {
544 f.close(); 544 f.close();
545 return; 545 return;
546 } 546 }
547 f.close(); 547 f.close();
548 548
549 QStringList global, contact, organizer; 549 QStringList global, contact, organizer;
550 550
551 // print out the element names of all elements that are a direct child 551 // print out the element names of all elements that are a direct child
552 // of the outermost element. 552 // of the outermost element.
553 QDomElement docElem = doc.documentElement(); 553 QDomElement docElem = doc.documentElement();
554 QDomNode n = docElem.firstChild(); 554 QDomNode n = docElem.firstChild();
555 if( docElem.nodeName() == QString::fromLatin1("Categories") ){ 555 if( docElem.nodeName() == QString::fromLatin1("Categories") ){
556 while( !n.isNull() ) { 556 while( !n.isNull() ) {
557 QDomElement e = n.toElement(); // try to convert the node to an element. 557 QDomElement e = n.toElement(); // try to convert the node to an element.
558 if( !e.isNull() ) { // the node was really an element. 558 if( !e.isNull() ) { // the node was really an element.
559 QString id = e.attribute("id" ); 559 QString id = e.attribute("id" );
560 QString app = e.attribute("app" ); 560 QString app = e.attribute("app" );
561 QString name = e.attribute("name"); 561 QString name = e.attribute("name");
562 562
563 /* 563 /*
564 * see where it belongs default to global 564 * see where it belongs default to global
565 */ 565 */
566 if (app == QString::fromLatin1("Calendar") || app == QString::fromLatin1("Todo List") ) 566 if (app == QString::fromLatin1("Calendar") || app == QString::fromLatin1("Todo List") )
567 organizer.append( name ); 567 organizer.append( name );
568 else if ( app == QString::fromLatin1("Contacts") ) 568 else if ( app == QString::fromLatin1("Contacts") )
569 contact.append( name ); 569 contact.append( name );
570 else 570 else
571 global.append( name ); 571 global.append( name );
572 572
573 OpieCategories category( id, name, app ); 573 OpieCategories category( id, name, app );
574 m_categories.append( category ); // cheater 574 m_categories.append( category ); // cheater
575 } 575 }
576 n = n.nextSibling(); 576 n = n.nextSibling();
577 } 577 }
578 } 578 }
579 updateKDE( "kaddressbookrc", global + contact ); 579 updateKDE( "kaddressbookrc", global + contact );
580 updateKDE( "korganizerrc", global + organizer ); 580 updateKDE( "korganizerrc", global + organizer );
581 581
582} 582}
583void CategoryEdit::clear() 583void CategoryEdit::clear()
584{ 584{
585 ids.clear(); 585 ids.clear();
586 m_categories.clear(); 586 m_categories.clear();
587} 587}
588QString CategoryEdit::categoryById( const QString &id, const QString &app )const 588QString CategoryEdit::categoryById( const QString &id, const QString &app )const
589{ 589{
590 QValueList<OpieCategories>::ConstIterator it; 590 QValueList<OpieCategories>::ConstIterator it;
591 QString category; 591 QString category;
592 QString fallback; 592 QString fallback;
593 for( it = m_categories.begin(); it != m_categories.end(); ++it ){ 593 for( it = m_categories.begin(); it != m_categories.end(); ++it ){
594 if( id.stripWhiteSpace() == (*it).id().stripWhiteSpace() ){ 594 if( id.stripWhiteSpace() == (*it).id().stripWhiteSpace() ){
595 if( app == (*it).app() ){ 595 if( app == (*it).app() ){
596 category = (*it).name(); 596 category = (*it).name();
597 break; 597 break;
598 }else{ 598 }else{
599 fallback = (*it).name(); 599 fallback = (*it).name();
600 } 600 }
601 } 601 }
602 } 602 }
603 return category.isEmpty() ? fallback : category; 603 return category.isEmpty() ? fallback : category;
604} 604}
605QStringList CategoryEdit::categoriesByIds( const QStringList& ids, 605QStringList CategoryEdit::categoriesByIds( const QStringList& ids,
606 const QString& app) { 606 const QString& app) {
607 607
608 QStringList list; 608 QStringList list;
609 QStringList::ConstIterator it; 609 QStringList::ConstIterator it;
610 QString temp; 610 QString temp;
611 for ( it = ids.begin(); it != ids.end(); ++it ) { 611 for ( it = ids.begin(); it != ids.end(); ++it ) {
612 temp = categoryById( (*it), app ); 612 temp = categoryById( (*it), app );
613 if (!temp.isEmpty() ) 613 if (!temp.isEmpty() )
614 list << temp; 614 list << temp;
615 } 615 }
616 616
617 return list; 617 return list;
618} 618}
619void CategoryEdit::updateKDE( const QString& configFile, const QStringList& cats ) { 619void CategoryEdit::updateKDE( const QString& configFile, const QStringList& cats ) {
620 KConfig conf(configFile); 620 KConfig conf(configFile);
621 conf.setGroup("General"); 621 conf.setGroup("General");
622 QStringList avail = conf.readListEntry("Custom Categories"); 622 QStringList avail = conf.readListEntry("Custom Categories");
623 for (QStringList::ConstIterator it = cats.begin(); it != cats.end(); ++it ) { 623 for (QStringList::ConstIterator it = cats.begin(); it != cats.end(); ++it ) {
624 if (!avail.contains( (*it) ) ) 624 if (!avail.contains( (*it) ) )
625 avail << (*it); 625 avail << (*it);
626 } 626 }
627 conf.writeEntry("Custom Categories", avail ); 627 conf.writeEntry("Custom Categories", avail );
628} 628}
629 629
630 630
631 631
632OpieCategories::OpieCategories() 632OpieCategories::OpieCategories()
633{ 633{
634 634
635} 635}
636OpieCategories::OpieCategories(const QString &id, const QString &name, const QString &app ) 636OpieCategories::OpieCategories(const QString &id, const QString &name, const QString &app )
637{ 637{
638 m_name = name; 638 m_name = name;
639 m_id = id; 639 m_id = id;
640 m_app = app; 640 m_app = app;
641} 641}
642OpieCategories::OpieCategories(const OpieCategories &op ) 642OpieCategories::OpieCategories(const OpieCategories &op )
643{ 643{
644 (*this) = op; 644 (*this) = op;
645} 645}
646QString OpieCategories::id() const 646QString OpieCategories::id() const
647{ 647{
648 return m_id; 648 return m_id;
649} 649}
650QString OpieCategories::name() const 650QString OpieCategories::name() const
651{ 651{
652 return m_name; 652 return m_name;
653} 653}
654QString OpieCategories::app() const 654QString OpieCategories::app() const
655{ 655{
656 return m_app; 656 return m_app;
657} 657}
658OpieCategories &OpieCategories::operator=(const OpieCategories &op ) 658OpieCategories &OpieCategories::operator=(const OpieCategories &op )
659{ 659{
660 m_name = op.m_name; 660 m_name = op.m_name;
661 m_app = op.m_app; 661 m_app = op.m_app;
662 m_id = op.m_id; 662 m_id = op.m_id;
663 return (*this); 663 return (*this);
664} 664}
665 665
666 666
667bool operator== (const OpieCategories& a, const OpieCategories &b ) 667bool operator== (const OpieCategories& a, const OpieCategories &b )
668{ 668{
669 if ( a.id() == b.id() && a.name() == b.name() && a.app() == b.app() ) 669 if ( a.id() == b.id() && a.name() == b.name() && a.app() == b.app() )
670 return true; 670 return true;
671 return false; 671 return false;
672} 672}
673 673
diff --git a/kabc/plugins/sharpdtm/sharpdtmconverter.cpp b/kabc/plugins/sharpdtm/sharpdtmconverter.cpp
index 4adcae4..3d429fa 100644
--- a/kabc/plugins/sharpdtm/sharpdtmconverter.cpp
+++ b/kabc/plugins/sharpdtm/sharpdtmconverter.cpp
@@ -1,444 +1,444 @@
1/* 1/*
2 This file is part of libkabc. 2 This file is part of libkabc.
3 Copyright (c) 2002 Tobias Koenig <tokoe@kde.org> 3 Copyright (c) 2002 Tobias Koenig <tokoe@kde.org>
4 4
5 This library is free software; you can redistribute it and/or 5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Library General Public 6 modify it under the terms of the GNU Library General Public
7 License as published by the Free Software Foundation; either 7 License as published by the Free Software Foundation; either
8 version 2 of the License, or (at your option) any later version. 8 version 2 of the License, or (at your option) any later version.
9 9
10 This library is distributed in the hope that it will be useful, 10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Library General Public License for more details. 13 Library General Public License for more details.
14 14
15 You should have received a copy of the GNU Library General Public License 15 You should have received a copy of the GNU Library General Public License
16 along with this library; see the file COPYING.LIB. If not, write to 16 along with this library; see the file COPYING.LIB. If not, write to
17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 Boston, MA 02111-1307, USA. 18 Boston, MA 02111-1307, USA.
19*/ 19*/
20 20
21/* 21/*
22Enhanced Version of the file for platform independent KDE tools. 22Enhanced Version of the file for platform independent KDE tools.
23Copyright (c) 2004 Ulf Schenk 23Copyright (c) 2004 Ulf Schenk
24 24
25$Id$ 25$Id$
26*/ 26*/
27 27
28#include "kglobal.h" 28#include "kglobal.h"
29#include <qregexp.h> 29#include <qregexp.h>
30 30
31 31
32#include "sharpdtmconverter.h" 32#include "sharpdtmconverter.h"
33 33
34#include <sl/slcategories.h> 34#include <sl/slcategories.h>
35#include <libkdepim/ksyncprofile.h> 35#include <libkdepim/ksyncprofile.h>
36//US #include <qpe/categoryselect.h> 36//US #include <qpe/categoryselect.h>
37 37
38 38
39using namespace KABC; 39using namespace KABC;
40using namespace SlCategory; 40using namespace SlCategory;
41 41
42SharpDTMConverter::SharpDTMConverter() : catDB(0) 42SharpDTMConverter::SharpDTMConverter() : catDB(0)
43{ 43{
44} 44}
45 45
46SharpDTMConverter::~SharpDTMConverter() 46SharpDTMConverter::~SharpDTMConverter()
47{ 47{
48 deinit(); 48 deinit();
49} 49}
50 50
51bool SharpDTMConverter::init() 51bool SharpDTMConverter::init()
52{ 52{
53 catDB = new SlCategory::SlCategories(); 53 catDB = new SlCategory::SlCategories();
54 54
55 if (!catDB) 55 if (!catDB)
56 return false; 56 return false;
57 57
58// catDB->load( categoryFileName() ); 58// catDB->load( categoryFileName() );
59 return true; 59 return true;
60} 60}
61 61
62void SharpDTMConverter::deinit() 62void SharpDTMConverter::deinit()
63{ 63{
64 if (catDB) 64 if (catDB)
65 { 65 {
66 delete catDB; 66 delete catDB;
67 catDB = 0; 67 catDB = 0;
68 } 68 }
69} 69}
70 70
71bool SharpDTMConverter::sharpToAddressee( const CardId &contact, const SlZDataBase* database, Addressee &addr ) 71bool SharpDTMConverter::sharpToAddressee( const CardId &contact, const SlZDataBase* database, Addressee &addr )
72{ 72{
73 SlZDataBase* db = (SlZDataBase*)database; 73 SlZDataBase* db = (SlZDataBase*)database;
74 74
75 // for syncing: we need setting of the two fields 75 // for syncing: we need setting of the two fields
76 addr.setExternalUID( QString::number( contact ) ); 76 addr.setExternalUID( QString::number( contact ) );
77 addr.setOriginalExternalUID( QString::number( contact ) ); 77 addr.setOriginalExternalUID( QString::number( contact ) );
78 addr.setTempSyncStat( SYNC_TEMPSTATE_NEW_EXTERNAL ); 78 addr.setTempSyncStat( SYNC_TEMPSTATE_NEW_EXTERNAL );
79 79
80 80
81 // name 81 // name
82 //qDebug("SharpDTMConverter::sharpToAddressee check if the fileAs transformation works!!"); 82 //qDebug("SharpDTMConverter::sharpToAddressee check if the fileAs transformation works!!");
83 addr.setFormattedName(db->readField(ZdbAdrs::FileAs)); 83 addr.setFormattedName(db->readField(ZdbAdrs::FileAs));
84 //addr.setName(db->readField(ZdbAdrs::FullName)); 84 //addr.setName(db->readField(ZdbAdrs::FullName));
85 85
86 addr.setFamilyName( db->readField(ZdbAdrs::LastName) ); 86 addr.setFamilyName( db->readField(ZdbAdrs::LastName) );
87 addr.setGivenName( db->readField(ZdbAdrs::FirstName) ); 87 addr.setGivenName( db->readField(ZdbAdrs::FirstName) );
88 addr.setAdditionalName( db->readField(ZdbAdrs::MiddleName) ); 88 addr.setAdditionalName( db->readField(ZdbAdrs::MiddleName) );
89 addr.setPrefix( db->readField(ZdbAdrs::Title) ); 89 addr.setPrefix( db->readField(ZdbAdrs::Title) );
90 addr.setSuffix( db->readField(ZdbAdrs::Suffix) ); 90 addr.setSuffix( db->readField(ZdbAdrs::Suffix) );
91 91
92 92
93 QString emailstr = db->readField(ZdbAdrs::Emails); 93 QString emailstr = db->readField(ZdbAdrs::Emails);
94 emailstr.replace( QRegExp(","), " " ); 94 emailstr.replace( QRegExp(","), " " );
95 emailstr.replace( QRegExp(";"), " " ); 95 emailstr.replace( QRegExp(";"), " " );
96 emailstr.replace( QRegExp(":"), " " ); 96 emailstr.replace( QRegExp(":"), " " );
97 //qDebug("SharpDTMConverter::sharpToAddressee whats the character to seperate the emailadresses? %s ", emailstr.latin1()); 97 //qDebug("SharpDTMConverter::sharpToAddressee whats the character to seperate the emailadresses? %s ", emailstr.latin1());
98 QStringList emails = QStringList::split(" ", emailstr.simplifyWhiteSpace()); 98 QStringList emails = QStringList::split(" ", emailstr.simplifyWhiteSpace());
99 bool defE = false; 99 bool defE = false;
100 bool found = false; 100 bool found = false;
101 for ( QStringList::Iterator it = emails.begin(); it != emails.end(); ++it ) { 101 for ( QStringList::Iterator it = emails.begin(); it != emails.end(); ++it ) {
102 if (found ) 102 if (found )
103 defE = false; 103 defE = false;
104 else 104 else
105 found = defE = ((*it).lower() == db->readField(ZdbAdrs::DefaultEmail).lower()); 105 found = defE = ((*it).lower() == db->readField(ZdbAdrs::DefaultEmail).lower());
106 addr.insertEmail( *it, defE ); 106 addr.insertEmail( *it, defE );
107 } 107 }
108 if ( ! found ) 108 if ( ! found )
109 if (!db->readField(ZdbAdrs::DefaultEmail).isEmpty()) 109 if (!db->readField(ZdbAdrs::DefaultEmail).isEmpty())
110 addr.insertEmail(db->readField(ZdbAdrs::DefaultEmail), true); 110 addr.insertEmail(db->readField(ZdbAdrs::DefaultEmail), true);
111 111
112 // home 112 // home
113 if ((!db->readField(ZdbAdrs::HomeStreet).isEmpty()) || 113 if ((!db->readField(ZdbAdrs::HomeStreet).isEmpty()) ||
114 (!db->readField(ZdbAdrs::HomeCity).isEmpty()) || 114 (!db->readField(ZdbAdrs::HomeCity).isEmpty()) ||
115 (!db->readField(ZdbAdrs::HomeState).isEmpty()) || 115 (!db->readField(ZdbAdrs::HomeState).isEmpty()) ||
116 (!db->readField(ZdbAdrs::HomeZip).isEmpty()) || 116 (!db->readField(ZdbAdrs::HomeZip).isEmpty()) ||
117 (!db->readField(ZdbAdrs::HomeCountry).isEmpty())) 117 (!db->readField(ZdbAdrs::HomeCountry).isEmpty()))
118 { 118 {
119 Address homeaddress; 119 Address homeaddress;
120 homeaddress.setType(Address::Home); 120 homeaddress.setType(Address::Home);
121//US homeaddress.setPostOfficeBox( "" ); 121//US homeaddress.setPostOfficeBox( "" );
122//US homeaddress.setExtended( "" ); 122//US homeaddress.setExtended( "" );
123 homeaddress.setStreet( db->readField(ZdbAdrs::HomeStreet).replace( QRegExp("\\r"), "")); 123 homeaddress.setStreet( db->readField(ZdbAdrs::HomeStreet).replace( QRegExp("\\r"), ""));
124 homeaddress.setLocality( db->readField(ZdbAdrs::HomeCity) ); 124 homeaddress.setLocality( db->readField(ZdbAdrs::HomeCity) );
125 homeaddress.setRegion( db->readField(ZdbAdrs::HomeState) ); 125 homeaddress.setRegion( db->readField(ZdbAdrs::HomeState) );
126 homeaddress.setPostalCode( db->readField(ZdbAdrs::HomeZip) ); 126 homeaddress.setPostalCode( db->readField(ZdbAdrs::HomeZip) );
127 homeaddress.setCountry( db->readField(ZdbAdrs::HomeCountry) ); 127 homeaddress.setCountry( db->readField(ZdbAdrs::HomeCountry) );
128 128
129 addr.insertAddress( homeaddress ); 129 addr.insertAddress( homeaddress );
130 } 130 }
131 131
132 if (!db->readField(ZdbAdrs::HomePhone).isEmpty()) 132 if (!db->readField(ZdbAdrs::HomePhone).isEmpty())
133 { 133 {
134 PhoneNumber homephone; 134 PhoneNumber homephone;
135 homephone.setType( PhoneNumber::Home ); 135 homephone.setType( PhoneNumber::Home | PhoneNumber::Pref );
136 homephone.setNumber( db->readField(ZdbAdrs::HomePhone) ); 136 homephone.setNumber( db->readField(ZdbAdrs::HomePhone) );
137 addr.insertPhoneNumber( homephone ); 137 addr.insertPhoneNumber( homephone );
138 } 138 }
139 139
140 if (!db->readField(ZdbAdrs::HomeFax).isEmpty()) 140 if (!db->readField(ZdbAdrs::HomeFax).isEmpty())
141 { 141 {
142 PhoneNumber homefax; 142 PhoneNumber homefax;
143 homefax.setType( PhoneNumber::Home | PhoneNumber::Fax ); 143 homefax.setType( PhoneNumber::Home | PhoneNumber::Fax );
144 homefax.setNumber( db->readField(ZdbAdrs::HomeFax) ); 144 homefax.setNumber( db->readField(ZdbAdrs::HomeFax) );
145 addr.insertPhoneNumber( homefax ); 145 addr.insertPhoneNumber( homefax );
146 } 146 }
147 147
148 if (!db->readField(ZdbAdrs::HomeMobile).isEmpty()) 148 if (!db->readField(ZdbAdrs::HomeMobile).isEmpty())
149 { 149 {
150 PhoneNumber homemobile; 150 PhoneNumber homemobile;
151 homemobile.setType( PhoneNumber::Home | PhoneNumber::Cell ); 151 homemobile.setType( PhoneNumber::Cell );
152 homemobile.setNumber( db->readField(ZdbAdrs::HomeMobile) ); 152 homemobile.setNumber( db->readField(ZdbAdrs::HomeMobile) );
153 addr.insertPhoneNumber( homemobile ); 153 addr.insertPhoneNumber( homemobile );
154 } 154 }
155 155
156 addr.setUrl( db->readField(ZdbAdrs::HomeWebPage) ); 156 addr.setUrl( db->readField(ZdbAdrs::HomeWebPage) );
157 157
158 158
159 // business 159 // business
160 if ((!db->readField(ZdbAdrs::BusinessStreet).isEmpty()) || 160 if ((!db->readField(ZdbAdrs::BusinessStreet).isEmpty()) ||
161 (!db->readField(ZdbAdrs::BusinessCity).isEmpty()) || 161 (!db->readField(ZdbAdrs::BusinessCity).isEmpty()) ||
162 (!db->readField(ZdbAdrs::BusinessState).isEmpty()) || 162 (!db->readField(ZdbAdrs::BusinessState).isEmpty()) ||
163 (!db->readField(ZdbAdrs::BusinessZip).isEmpty()) || 163 (!db->readField(ZdbAdrs::BusinessZip).isEmpty()) ||
164 (!db->readField(ZdbAdrs::BusinessCountry).isEmpty())) 164 (!db->readField(ZdbAdrs::BusinessCountry).isEmpty()))
165 { 165 {
166 Address businessaddress; 166 Address businessaddress;
167 businessaddress.setType(Address::Work); 167 businessaddress.setType(Address::Work);
168//US businessaddress.setPostOfficeBox( "" ); 168//US businessaddress.setPostOfficeBox( "" );
169//US businessaddress.setExtended( "" ); 169//US businessaddress.setExtended( "" );
170 businessaddress.setStreet( db->readField(ZdbAdrs::BusinessStreet).replace( QRegExp("\\r"), "") ); 170 businessaddress.setStreet( db->readField(ZdbAdrs::BusinessStreet).replace( QRegExp("\\r"), "") );
171 businessaddress.setLocality( db->readField(ZdbAdrs::BusinessCity) ); 171 businessaddress.setLocality( db->readField(ZdbAdrs::BusinessCity) );
172 businessaddress.setRegion( db->readField(ZdbAdrs::BusinessState) ); 172 businessaddress.setRegion( db->readField(ZdbAdrs::BusinessState) );
173 businessaddress.setPostalCode( db->readField(ZdbAdrs::BusinessZip) ); 173 businessaddress.setPostalCode( db->readField(ZdbAdrs::BusinessZip) );
174 businessaddress.setCountry( db->readField(ZdbAdrs::BusinessCountry) ); 174 businessaddress.setCountry( db->readField(ZdbAdrs::BusinessCountry) );
175 175
176 addr.insertAddress( businessaddress ); 176 addr.insertAddress( businessaddress );
177 } 177 }
178 178
179 179
180 if (!db->readField(ZdbAdrs::BusinessPhone).isEmpty()) 180 if (!db->readField(ZdbAdrs::BusinessPhone).isEmpty())
181 { 181 {
182 PhoneNumber businessphone; 182 PhoneNumber businessphone;
183 businessphone.setType( PhoneNumber::Work ); 183 businessphone.setType( PhoneNumber::Work | PhoneNumber::Pref );
184 businessphone.setNumber( db->readField(ZdbAdrs::BusinessPhone) ); 184 businessphone.setNumber( db->readField(ZdbAdrs::BusinessPhone) );
185 addr.insertPhoneNumber( businessphone ); 185 addr.insertPhoneNumber( businessphone );
186 } 186 }
187 187
188 if (!db->readField(ZdbAdrs::BusinessFax).isEmpty()) 188 if (!db->readField(ZdbAdrs::BusinessFax).isEmpty())
189 { 189 {
190 PhoneNumber businessfax; 190 PhoneNumber businessfax;
191 businessfax.setType( PhoneNumber::Work | PhoneNumber::Fax ); 191 businessfax.setType( PhoneNumber::Work | PhoneNumber::Fax );
192 businessfax.setNumber( db->readField(ZdbAdrs::BusinessFax) ); 192 businessfax.setNumber( db->readField(ZdbAdrs::BusinessFax) );
193 addr.insertPhoneNumber( businessfax ); 193 addr.insertPhoneNumber( businessfax );
194 } 194 }
195 195
196 if (!db->readField(ZdbAdrs::BusinessMobile).isEmpty()) 196 if (!db->readField(ZdbAdrs::BusinessMobile).isEmpty())
197 { 197 {
198 PhoneNumber businessmobile; 198 PhoneNumber businessmobile;
199 businessmobile.setType( PhoneNumber::Work | PhoneNumber::Cell ); 199 businessmobile.setType( PhoneNumber::Car );
200 businessmobile.setNumber( db->readField(ZdbAdrs::BusinessMobile) ); 200 businessmobile.setNumber( db->readField(ZdbAdrs::BusinessMobile) );
201 addr.insertPhoneNumber( businessmobile ); 201 addr.insertPhoneNumber( businessmobile );
202 } 202 }
203 203
204 if (!db->readField(ZdbAdrs::BusinessPager).isEmpty()) 204 if (!db->readField(ZdbAdrs::BusinessPager).isEmpty())
205 { 205 {
206 PhoneNumber businesspager; 206 PhoneNumber businesspager;
207 businesspager.setType( PhoneNumber::Work | PhoneNumber::Pager ); 207 businesspager.setType( PhoneNumber::Pager );
208 businesspager.setNumber( db->readField(ZdbAdrs::BusinessPager) ); 208 businesspager.setNumber( db->readField(ZdbAdrs::BusinessPager) );
209 addr.insertPhoneNumber( businesspager ); 209 addr.insertPhoneNumber( businesspager );
210 } 210 }
211 211
212 addr.setRole( db->readField(ZdbAdrs::JobTitle) ); 212 addr.setRole( db->readField(ZdbAdrs::JobTitle) );
213 addr.setOrganization( db->readField(ZdbAdrs::Company) ); 213 addr.setOrganization( db->readField(ZdbAdrs::Company) );
214 addr.insertCustom( "KADDRESSBOOK", "X-Profession", db->readField(ZdbAdrs::Profession) ); 214 addr.insertCustom( "KADDRESSBOOK", "X-Profession", db->readField(ZdbAdrs::Profession) );
215 addr.insertCustom( "KADDRESSBOOK", "X-AssistantsName", db->readField(ZdbAdrs::Assistant) ); 215 addr.insertCustom( "KADDRESSBOOK", "X-AssistantsName", db->readField(ZdbAdrs::Assistant) );
216 addr.insertCustom( "KADDRESSBOOK", "X-Department", db->readField(ZdbAdrs::Department) ); 216 addr.insertCustom( "KADDRESSBOOK", "X-Department", db->readField(ZdbAdrs::Department) );
217 addr.insertCustom( "KADDRESSBOOK", "X-ManagersName", db->readField(ZdbAdrs::Manager) ); 217 addr.insertCustom( "KADDRESSBOOK", "X-ManagersName", db->readField(ZdbAdrs::Manager) );
218 addr.insertCustom( "KADDRESSBOOK", "X-Office", db->readField(ZdbAdrs::Office) ); 218 addr.insertCustom( "KADDRESSBOOK", "X-Office", db->readField(ZdbAdrs::Office) );
219 219
220 //personal 220 //personal
221 addr.insertCustom( "KADDRESSBOOK", "X-SpousesName", db->readField(ZdbAdrs::Spouse) ); 221 addr.insertCustom( "KADDRESSBOOK", "X-SpousesName", db->readField(ZdbAdrs::Spouse) );
222 222
223 QString gen = db->readField(ZdbAdrs::Gender); 223 QString gen = db->readField(ZdbAdrs::Gender);
224 //qDebug("SharpDTMConverter::sharpToAddressee pleas check that gender works!! : Gender: %s", gen.latin1()); 224 //qDebug("SharpDTMConverter::sharpToAddressee pleas check that gender works!! : Gender: %s", gen.latin1());
225 //qDebug("SharpDTMConverter::sharpToAddressee: may be int db->readUshortField(\"ZdbAdrs::Gender\") is here better suited"); 225 //qDebug("SharpDTMConverter::sharpToAddressee: may be int db->readUshortField(\"ZdbAdrs::Gender\") is here better suited");
226 if (gen == "1") 226 if (gen == "1")
227 addr.insertCustom( "KADDRESSBOOK", "X-Gender", "male"); 227 addr.insertCustom( "KADDRESSBOOK", "X-Gender", "male");
228 else if (gen == "2") 228 else if (gen == "2")
229 addr.insertCustom( "KADDRESSBOOK", "X-Gender", "female"); 229 addr.insertCustom( "KADDRESSBOOK", "X-Gender", "female");
230 else 230 else
231 addr.insertCustom( "KADDRESSBOOK", "X-Gender", "undef"); 231 addr.insertCustom( "KADDRESSBOOK", "X-Gender", "undef");
232 232
233 233
234 QDate ann = KGlobal::locale()->readDate( db->readField(ZdbAdrs::Anniversary) ); 234 QDate ann = KGlobal::locale()->readDate( db->readField(ZdbAdrs::Anniversary) );
235 if (ann.isValid()) { 235 if (ann.isValid()) {
236 QString dt = KGlobal::locale()->formatDate(ann, true, KLocale::ISODate); 236 QString dt = KGlobal::locale()->formatDate(ann, true, KLocale::ISODate);
237 //qDebug("qtopiaToAddressee annyversary found:%s", dt.latin1()); 237 //qDebug("qtopiaToAddressee annyversary found:%s", dt.latin1());
238 addr.insertCustom( "KADDRESSBOOK", "X-Anniversary", dt); 238 addr.insertCustom( "KADDRESSBOOK", "X-Anniversary", dt);
239 } else 239 } else
240 addr.insertCustom( "KADDRESSBOOK", "X-Anniversary", " "); 240 addr.insertCustom( "KADDRESSBOOK", "X-Anniversary", " ");
241 241
242 242
243 243
244 addr.insertCustom( "KADDRESSBOOK", "X-Children", db->readField(ZdbAdrs::Children) ); 244 addr.insertCustom( "KADDRESSBOOK", "X-Children", db->readField(ZdbAdrs::Children) );
245 245
246 246
247 QDate birthd = KGlobal::locale()->readDate( db->readField(ZdbAdrs::Birthday) ); 247 QDate birthd = KGlobal::locale()->readDate( db->readField(ZdbAdrs::Birthday) );
248 //qDebug("birtd %s ", birthd.toString().latin1()); 248 //qDebug("birtd %s ", birthd.toString().latin1());
249 if (birthd.isValid()) 249 if (birthd.isValid())
250 addr.setBirthday( birthd ); 250 addr.setBirthday( birthd );
251 251
252 addr.setNickName( db->readField(ZdbAdrs::Nickname) ); 252 addr.setNickName( db->readField(ZdbAdrs::Nickname) );
253 253
254 // others 254 // others
255 //US I put opies BusinessWebPage into Ka/Pi's notes block, because no other native field is available. 255 //US I put opies BusinessWebPage into Ka/Pi's notes block, because no other native field is available.
256 //QString notes = db->readField(ZdbAdrs::Notes); 256 //QString notes = db->readField(ZdbAdrs::Notes);
257 //notes += "\nBusinessWebPage: " + db->readField(ZdbAdrs::BusinessWebPage) + "\n"; 257 //notes += "\nBusinessWebPage: " + db->readField(ZdbAdrs::BusinessWebPage) + "\n";
258 if ( addr.url().isEmpty() ) 258 if ( addr.url().isEmpty() )
259 addr.setUrl( db->readField(ZdbAdrs::BusinessWebPage) ); 259 addr.setUrl( db->readField(ZdbAdrs::BusinessWebPage) );
260 addr.setNote( db->readField(ZdbAdrs::Notes).replace( QRegExp("\\r"), "")); 260 addr.setNote( db->readField(ZdbAdrs::Notes).replace( QRegExp("\\r"), ""));
261 261
262 262
263 263
264//US QString groups() const { return find( Qtopia::Groups ); } 264//US QString groups() const { return find( Qtopia::Groups ); }
265//US QStringList groupList() const; 265//US QStringList groupList() const;
266 266
267 //qDebug("SharpDTMConverter::sharpToAddressee please check that the categories will be converted" ); 267 //qDebug("SharpDTMConverter::sharpToAddressee please check that the categories will be converted" );
268 QArray<int> catArray = db->readCategories(); 268 QArray<int> catArray = db->readCategories();
269 QString cat; 269 QString cat;
270 270
271 for ( unsigned int i=0; i < catArray.size(); i++ ) { 271 for ( unsigned int i=0; i < catArray.size(); i++ ) {
272 cat = catDB->label(catArray[i]); 272 cat = catDB->label(catArray[i]);
273 if ( cat.isEmpty() ) 273 if ( cat.isEmpty() )
274 addr.insertCategory(QString::number(catArray[i])); 274 addr.insertCategory(QString::number(catArray[i]));
275 else 275 else
276 addr.insertCategory( cat ); 276 addr.insertCategory( cat );
277 } 277 }
278 278
279 return true; 279 return true;
280} 280}
281 281
282bool SharpDTMConverter::addresseeToSharp( const Addressee &addr, SlZDataBase* database , const CardId &contact ) 282bool SharpDTMConverter::addresseeToSharp( const Addressee &addr, SlZDataBase* database , const CardId &contact )
283{ 283{
284 bool cellHome = false, cellWork = false; 284 bool cellHome = false, cellWork = false;
285 // name 285 // name
286 database->writeField(ZdbAdrs::LastName, addr.familyName()); 286 database->writeField(ZdbAdrs::LastName, addr.familyName());
287 database->writeField(ZdbAdrs::FirstName, addr.givenName()); 287 database->writeField(ZdbAdrs::FirstName, addr.givenName());
288 database->writeField(ZdbAdrs::MiddleName, addr.additionalName()); 288 database->writeField(ZdbAdrs::MiddleName, addr.additionalName());
289 database->writeField(ZdbAdrs::Title, addr.prefix()); 289 database->writeField(ZdbAdrs::Title, addr.prefix());
290 database->writeField(ZdbAdrs::Suffix, addr.suffix()); 290 database->writeField(ZdbAdrs::Suffix, addr.suffix());
291 291
292 //qDebug("SharpDTMConverter::addresseeToSharp check if the fileAs transformation works!!\n%s",addr.formattedName().latin1() ); 292 //qDebug("SharpDTMConverter::addresseeToSharp check if the fileAs transformation works!!\n%s",addr.formattedName().latin1() );
293 QString formattedName = addr.formattedName(); 293 QString formattedName = addr.formattedName();
294 if ( formattedName.isEmpty() ) { 294 if ( formattedName.isEmpty() ) {
295 if ( !addr.familyName().isEmpty() ) { 295 if ( !addr.familyName().isEmpty() ) {
296 formattedName = addr.familyName(); 296 formattedName = addr.familyName();
297 if ( !addr.givenName().isEmpty() ) { 297 if ( !addr.givenName().isEmpty() ) {
298 formattedName += ", "; 298 formattedName += ", ";
299 formattedName += addr.givenName(); 299 formattedName += addr.givenName();
300 } 300 }
301 } else 301 } else
302 formattedName = addr.givenName(); 302 formattedName = addr.givenName();
303 } 303 }
304 database->writeField(ZdbAdrs::FileAs, formattedName); 304 database->writeField(ZdbAdrs::FileAs, formattedName);
305 database->writeField(ZdbAdrs::FullName, formattedName); 305 database->writeField(ZdbAdrs::FullName, formattedName);
306 306
307 // email 307 // email
308 //qDebug("SharpDTMConverter::addresseeToSharp check which seperator we need here for the emails!!"); 308 //qDebug("SharpDTMConverter::addresseeToSharp check which seperator we need here for the emails!!");
309 //qDebug("SharpDTMConverter::addresseeToSharp its probably the same from sharpToAddressee"); 309 //qDebug("SharpDTMConverter::addresseeToSharp its probably the same from sharpToAddressee");
310 QString emails = addr.emails().join(" "); 310 QString emails = addr.emails().join(" ");
311 database->writeField(ZdbAdrs::Emails, emails ); 311 database->writeField(ZdbAdrs::Emails, emails );
312 312
313 database->writeField(ZdbAdrs::DefaultEmail, addr.preferredEmail() ); 313 database->writeField(ZdbAdrs::DefaultEmail, addr.preferredEmail() );
314 // home 314 // home
315 const Address homeaddress = addr.address(Address::Home); 315 const Address homeaddress = addr.address(Address::Home);
316 database->writeField(ZdbAdrs::HomeStreet, homeaddress.street()); 316 database->writeField(ZdbAdrs::HomeStreet, homeaddress.street());
317 database->writeField(ZdbAdrs::HomeCity, homeaddress.locality()); 317 database->writeField(ZdbAdrs::HomeCity, homeaddress.locality());
318 database->writeField(ZdbAdrs::HomeState, homeaddress.region()); 318 database->writeField(ZdbAdrs::HomeState, homeaddress.region());
319 database->writeField(ZdbAdrs::HomeZip, homeaddress.postalCode()); 319 database->writeField(ZdbAdrs::HomeZip, homeaddress.postalCode());
320 database->writeField(ZdbAdrs::HomeCountry, homeaddress.country()); 320 database->writeField(ZdbAdrs::HomeCountry, homeaddress.country());
321 321
322 PhoneNumber homephone = addr.phoneNumber( PhoneNumber::Home ); 322 PhoneNumber homephone = addr.phoneNumber( PhoneNumber::Home );
323 database->writeField(ZdbAdrs::HomePhone, homephone.number()); 323 database->writeField(ZdbAdrs::HomePhone, homephone.number());
324 PhoneNumber homefax = addr.phoneNumber( PhoneNumber::Home | PhoneNumber::Fax ); 324 PhoneNumber homefax = addr.phoneNumber( PhoneNumber::Home | PhoneNumber::Fax );
325 database->writeField(ZdbAdrs::HomeFax, homefax.number()); 325 database->writeField(ZdbAdrs::HomeFax, homefax.number());
326 PhoneNumber homemobile = addr.phoneNumber( PhoneNumber::Home | PhoneNumber::Cell ); 326 PhoneNumber homemobile = addr.phoneNumber( PhoneNumber::Home | PhoneNumber::Cell );
327 database->writeField(ZdbAdrs::HomeMobile, homemobile.number()); 327 database->writeField(ZdbAdrs::HomeMobile, homemobile.number());
328 if (!homemobile.number().isEmpty()) { 328 if (!homemobile.number().isEmpty()) {
329 cellHome = true; 329 cellHome = true;
330 } 330 }
331 database->writeField(ZdbAdrs::HomeWebPage, addr.url().url()); 331 database->writeField(ZdbAdrs::HomeWebPage, addr.url().url());
332 // business 332 // business
333 const Address businessaddress = addr.address(Address::Work); 333 const Address businessaddress = addr.address(Address::Work);
334 //qDebug("write business address "); 334 //qDebug("write business address ");
335 database->writeField(ZdbAdrs::BusinessStreet, businessaddress.street()); 335 database->writeField(ZdbAdrs::BusinessStreet, businessaddress.street());
336 database->writeField(ZdbAdrs::BusinessCity, businessaddress.locality()); 336 database->writeField(ZdbAdrs::BusinessCity, businessaddress.locality());
337 database->writeField(ZdbAdrs::BusinessState, businessaddress.region()); 337 database->writeField(ZdbAdrs::BusinessState, businessaddress.region());
338 database->writeField(ZdbAdrs::BusinessZip, businessaddress.postalCode()); 338 database->writeField(ZdbAdrs::BusinessZip, businessaddress.postalCode());
339 database->writeField(ZdbAdrs::BusinessCountry, businessaddress.country()); 339 database->writeField(ZdbAdrs::BusinessCountry, businessaddress.country());
340 340
341 PhoneNumber businessphone = addr.phoneNumber( PhoneNumber::Work ); 341 PhoneNumber businessphone = addr.phoneNumber( PhoneNumber::Work );
342 database->writeField(ZdbAdrs::BusinessPhone, businessphone.number()); 342 database->writeField(ZdbAdrs::BusinessPhone, businessphone.number());
343 343
344 PhoneNumber businessfax = addr.phoneNumber( PhoneNumber::Work | PhoneNumber::Fax ); 344 PhoneNumber businessfax = addr.phoneNumber( PhoneNumber::Work | PhoneNumber::Fax );
345 database->writeField(ZdbAdrs::BusinessFax, businessfax.number()); 345 database->writeField(ZdbAdrs::BusinessFax, businessfax.number());
346 346
347 PhoneNumber businessmobile = addr.phoneNumber( PhoneNumber::Work | PhoneNumber::Cell ); 347 PhoneNumber businessmobile = addr.phoneNumber( PhoneNumber::Work | PhoneNumber::Cell );
348 database->writeField(ZdbAdrs::BusinessMobile, businessmobile.number()); 348 database->writeField(ZdbAdrs::BusinessMobile, businessmobile.number());
349 if (!businessmobile.number().isEmpty()) { 349 if (!businessmobile.number().isEmpty()) {
350 cellWork = true; 350 cellWork = true;
351 } 351 }
352 PhoneNumber mobile = addr.phoneNumber( PhoneNumber::Cell ); 352 PhoneNumber mobile = addr.phoneNumber( PhoneNumber::Cell );
353 if (! mobile.number().isEmpty()) { 353 if (! mobile.number().isEmpty()) {
354 if ( ! cellHome ) 354 if ( ! cellHome )
355 database->writeField(ZdbAdrs::HomeMobile, mobile.number()); 355 database->writeField(ZdbAdrs::HomeMobile, mobile.number());
356 else if (! cellWork ) 356 else if (! cellWork )
357 database->writeField(ZdbAdrs::BusinessMobile, mobile.number()); 357 database->writeField(ZdbAdrs::BusinessMobile, mobile.number());
358 } 358 }
359 359
360 PhoneNumber businesspager = addr.phoneNumber( PhoneNumber::Work | PhoneNumber::Pager ); 360 PhoneNumber businesspager = addr.phoneNumber( PhoneNumber::Work | PhoneNumber::Pager );
361 database->writeField(ZdbAdrs::BusinessPager, businesspager.number()); 361 database->writeField(ZdbAdrs::BusinessPager, businesspager.number());
362 362
363 database->writeField(ZdbAdrs::JobTitle, addr.role()); 363 database->writeField(ZdbAdrs::JobTitle, addr.role());
364 database->writeField(ZdbAdrs::Company, addr.organization()); 364 database->writeField(ZdbAdrs::Company, addr.organization());
365 365
366 database->writeField(ZdbAdrs::Profession, addr.custom( "KADDRESSBOOK", "X-Profession" )); 366 database->writeField(ZdbAdrs::Profession, addr.custom( "KADDRESSBOOK", "X-Profession" ));
367 database->writeField(ZdbAdrs::Assistant, addr.custom( "KADDRESSBOOK", "X-AssistantsName" )); 367 database->writeField(ZdbAdrs::Assistant, addr.custom( "KADDRESSBOOK", "X-AssistantsName" ));
368 database->writeField(ZdbAdrs::Department, addr.custom( "KADDRESSBOOK", "X-Department" )); 368 database->writeField(ZdbAdrs::Department, addr.custom( "KADDRESSBOOK", "X-Department" ));
369 database->writeField(ZdbAdrs::Manager, addr.custom( "KADDRESSBOOK", "X-ManagersName" )); 369 database->writeField(ZdbAdrs::Manager, addr.custom( "KADDRESSBOOK", "X-ManagersName" ));
370 database->writeField(ZdbAdrs::Office, addr.custom( "KADDRESSBOOK", "X-Office" )); 370 database->writeField(ZdbAdrs::Office, addr.custom( "KADDRESSBOOK", "X-Office" ));
371 371
372 //personal 372 //personal
373 database->writeField(ZdbAdrs::Spouse, addr.custom( "KADDRESSBOOK", "X-Spouse" )); 373 database->writeField(ZdbAdrs::Spouse, addr.custom( "KADDRESSBOOK", "X-Spouse" ));
374 374
375 QString gt = addr.custom( "KADDRESSBOOK", "X-Gender" ); 375 QString gt = addr.custom( "KADDRESSBOOK", "X-Gender" );
376 //qDebug("SharpDTMConverter::addresseeToSharp please check that gender works!! : Gender: %s", gt.latin1()); 376 //qDebug("SharpDTMConverter::addresseeToSharp please check that gender works!! : Gender: %s", gt.latin1());
377 //qDebug("SharpDTMConverter::addresseeToSharp: may be writeField(\"ZdbAdrs::Gender\", ushort) is here better suited?"); 377 //qDebug("SharpDTMConverter::addresseeToSharp: may be writeField(\"ZdbAdrs::Gender\", ushort) is here better suited?");
378 //qDebug("SharpDTMConverter::addresseeToSharp: check also the reverse functionality in sharpToAddressee"); 378 //qDebug("SharpDTMConverter::addresseeToSharp: check also the reverse functionality in sharpToAddressee");
379 if (gt == "male") 379 if (gt == "male")
380 database->writeField(ZdbAdrs::Gender, "1"); 380 database->writeField(ZdbAdrs::Gender, "1");
381 else if (gt == "female") 381 else if (gt == "female")
382 database->writeField(ZdbAdrs::Gender, "2"); 382 database->writeField(ZdbAdrs::Gender, "2");
383 else 383 else
384 database->writeField(ZdbAdrs::Gender, ""); 384 database->writeField(ZdbAdrs::Gender, "");
385 385
386 QString dateS ; 386 QString dateS ;
387 QDate dt = KGlobal::locale()->readDate(addr.custom("KADDRESSBOOK", "X-Anniversary" ), "%Y-%m-%d"); // = Qt::ISODate 387 QDate dt = KGlobal::locale()->readDate(addr.custom("KADDRESSBOOK", "X-Anniversary" ), "%Y-%m-%d"); // = Qt::ISODate
388 if ( dt.isValid() ) { 388 if ( dt.isValid() ) {
389 dateS = KGlobal::locale()->formatDate(dt, true ); 389 dateS = KGlobal::locale()->formatDate(dt, true );
390 } 390 }
391 database->writeField(ZdbAdrs::Anniversary, dateS ); 391 database->writeField(ZdbAdrs::Anniversary, dateS );
392 database->writeField(ZdbAdrs::Children, addr.custom( "KADDRESSBOOK", "X-Children" )); 392 database->writeField(ZdbAdrs::Children, addr.custom( "KADDRESSBOOK", "X-Children" ));
393 dt = addr.birthday().date(); 393 dt = addr.birthday().date();
394 dateS = ""; 394 dateS = "";
395 if ( dt.isValid() ) { 395 if ( dt.isValid() ) {
396 dateS = KGlobal::locale()->formatDate(dt, true ); 396 dateS = KGlobal::locale()->formatDate(dt, true );
397 } 397 }
398 database->writeField(ZdbAdrs::Birthday, dateS); 398 database->writeField(ZdbAdrs::Birthday, dateS);
399 database->writeField(ZdbAdrs::Nickname, addr.nickName()); 399 database->writeField(ZdbAdrs::Nickname, addr.nickName());
400 400
401 // other 401 // other
402 database->writeField(ZdbAdrs::Notes, addr.note()); 402 database->writeField(ZdbAdrs::Notes, addr.note());
403 403
404//US QString groups() const { return find( Qtopia::Groups ); } 404//US QString groups() const { return find( Qtopia::Groups ); }
405//US QStringList groupList() const; 405//US QStringList groupList() const;
406 406
407 407
408 //qDebug("SharpDTMConverter::addresseeToSharp please check if category transformation works"); 408 //qDebug("SharpDTMConverter::addresseeToSharp please check if category transformation works");
409 409
410 return true; 410 return true;
411} 411}
412 412
413 413
414bool SharpDTMConverter::setCategories( const Addressee &addr, SlZDataBase* database , const CardId &contact ) 414bool SharpDTMConverter::setCategories( const Addressee &addr, SlZDataBase* database , const CardId &contact )
415{ 415{
416 QStringList list = addr.categories(); 416 QStringList list = addr.categories();
417 417
418 QArray<int> ids(list.count()); 418 QArray<int> ids(list.count());
419 uint index = 0; 419 uint index = 0;
420 for(uint i=0; i<ids.size(); i++){ 420 for(uint i=0; i<ids.size(); i++){
421 if(catDB->exists(list[i])){ 421 if(catDB->exists(list[i])){
422 ids[index] = catDB->id(list[i]); 422 ids[index] = catDB->id(list[i]);
423 //qDebug("set exist cat %d %s ",ids[index] , list[i].latin1()); 423 //qDebug("set exist cat %d %s ",ids[index] , list[i].latin1());
424 index++; 424 index++;
425 } else { 425 } else {
426 ids[index] = catDB->addCategory(list[i]); 426 ids[index] = catDB->addCategory(list[i]);
427 //qDebug("add new cat %d %s ",ids[index] , list[i].latin1()); 427 //qDebug("add new cat %d %s ",ids[index] , list[i].latin1());
428 index++; 428 index++;
429 } 429 }
430 } 430 }
431 bool res ; 431 bool res ;
432 432
433 if ( !(res = database->updateCategories(contact, ids) )) 433 if ( !(res = database->updateCategories(contact, ids) ))
434 qDebug("SharpDTMConverter::Error updating categories"); 434 qDebug("SharpDTMConverter::Error updating categories");
435 435
436 return res; 436 return res;
437} 437}
438 438
439QDate SharpDTMConverter::convertDate( QString s) 439QDate SharpDTMConverter::convertDate( QString s)
440{ 440{
441 QDate dt = KGlobal::locale()->readDate( s ); 441 QDate dt = KGlobal::locale()->readDate( s );
442 return dt; 442 return dt;
443 return QDate (); 443 return QDate ();
444} 444}