summaryrefslogtreecommitdiffabout
path: root/kabc/vcardformatimpl.cpp
Unidiff
Diffstat (limited to 'kabc/vcardformatimpl.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--kabc/vcardformatimpl.cpp51
1 files changed, 27 insertions, 24 deletions
diff --git a/kabc/vcardformatimpl.cpp b/kabc/vcardformatimpl.cpp
index 3fcaf94..bd9a57b 100644
--- a/kabc/vcardformatimpl.cpp
+++ b/kabc/vcardformatimpl.cpp
@@ -44,47 +44,49 @@ using namespace VCARD;
44bool VCardFormatImpl::load( Addressee &addressee, QFile *file ) 44bool VCardFormatImpl::load( Addressee &addressee, QFile *file )
45{ 45{
46 kdDebug(5700) << "VCardFormat::load()" << endl; 46 kdDebug(5700) << "VCardFormat::load()" << endl;
47 47
48 QByteArray fdata = file->readAll(); 48 QByteArray fdata = file->readAll();
49 QCString data(fdata.data(), fdata.size()+1); 49 QCString data(fdata.data(), fdata.size()+1);
50 50
51 VCardEntity e( data ); 51 VCardEntity e( data );
52 52
53 VCardListIterator it( e.cardList() ); 53 VCardListIterator it( e.cardList() );
54 54
55 if ( it.current() ) { 55 if ( it.current() ) {
56 VCard v(*it.current()); 56//US VCard v(*it.current());
57 loadAddressee( addressee, v ); 57//US loadAddressee( addressee, v );
58 loadAddressee( addressee, it.current() );
58 return true; 59 return true;
59 } 60 }
60 61
61 return false; 62 return false;
62} 63}
63 64
64bool VCardFormatImpl::loadAll( AddressBook *addressBook, Resource *resource, QFile *file ) 65bool VCardFormatImpl::loadAll( AddressBook *addressBook, Resource *resource, QFile *file )
65{ 66{
66 kdDebug(5700) << "VCardFormat::loadAll()" << endl; 67 kdDebug(5700) << "VCardFormat::loadAll()" << endl;
67 68
68 QByteArray fdata = file->readAll(); 69 QByteArray fdata = file->readAll();
69 QCString data(fdata.data(), fdata.size()+1); 70 QCString data(fdata.data(), fdata.size()+1);
70 71
71 VCardEntity e( data ); 72 VCardEntity e( data );
72 73
73 VCardListIterator it( e.cardList() ); 74 VCardListIterator it( e.cardList() );
74 75
75 for (; it.current(); ++it) { 76 for (; it.current(); ++it) {
76 VCard v(*it.current()); 77//US VCard v(*it.current());
77 Addressee addressee; 78 Addressee addressee;
78 loadAddressee( addressee, v ); 79//US loadAddressee( addressee, v );
80 loadAddressee( addressee, it.current() );
79 addressee.setResource( resource ); 81 addressee.setResource( resource );
80 addressBook->insertAddressee( addressee ); 82 addressBook->insertAddressee( addressee );
81 } 83 }
82 84
83 return true; 85 return true;
84} 86}
85 87
86void VCardFormatImpl::save( const Addressee &addressee, QFile *file ) 88void VCardFormatImpl::save( const Addressee &addressee, QFile *file )
87{ 89{
88 VCardEntity vcards; 90 VCardEntity vcards;
89 VCardList vcardlist; 91 VCardList vcardlist;
90 vcardlist.setAutoDelete( true ); 92 vcardlist.setAutoDelete( true );
@@ -113,27 +115,27 @@ void VCardFormatImpl::saveAll( AddressBook *ab, Resource *resource, QFile *file
113 saveAddressee( (*it), v, false ); 115 saveAddressee( (*it), v, false );
114 (*it).setChanged( false ); 116 (*it).setChanged( false );
115 vcardlist.append( v ); 117 vcardlist.append( v );
116 } 118 }
117 } 119 }
118 120
119 vcards.setCardList( vcardlist ); 121 vcards.setCardList( vcardlist );
120 122
121 QCString vcardData = vcards.asString(); 123 QCString vcardData = vcards.asString();
122 file->writeBlock( (const char*)vcardData, vcardData.length() ); 124 file->writeBlock( (const char*)vcardData, vcardData.length() );
123} 125}
124 126
125bool VCardFormatImpl::loadAddressee( Addressee& addressee, VCard &v ) 127bool VCardFormatImpl::loadAddressee( Addressee& addressee, VCard *v )
126{ 128{
127 QPtrList<ContentLine> contentLines = v.contentLineList(); 129 QPtrList<ContentLine> contentLines = v->contentLineList();
128 ContentLine *cl; 130 ContentLine *cl;
129 131
130 for( cl = contentLines.first(); cl; cl = contentLines.next() ) { 132 for( cl = contentLines.first(); cl; cl = contentLines.next() ) {
131 QCString n = cl->name(); 133 QCString n = cl->name();
132 if ( n.left( 2 ) == "X-" ) { 134 if ( n.left( 2 ) == "X-" ) {
133 n = n.mid( 2 ); 135 n = n.mid( 2 );
134 int posDash = n.find( "-" ); 136 int posDash = n.find( "-" );
135 addressee.insertCustom( QString::fromUtf8( n.left( posDash ) ), 137 addressee.insertCustom( QString::fromUtf8( n.left( posDash ) ),
136 QString::fromUtf8( n.mid( posDash + 1 ) ), 138 QString::fromUtf8( n.mid( posDash + 1 ) ),
137 QString::fromUtf8( cl->value()->asString() ) ); 139 QString::fromUtf8( cl->value()->asString() ) );
138 continue; 140 continue;
139 } 141 }
@@ -775,37 +777,37 @@ void VCardFormatImpl::addAgentValue( VCARD::VCard *vcard, const Agent &agent )
775 if ( !agent.isIntern() && agent.url().isEmpty() ) 777 if ( !agent.isIntern() && agent.url().isEmpty() )
776 return; 778 return;
777 779
778 ContentLine cl; 780 ContentLine cl;
779 cl.setName( EntityTypeToParamName( EntityAgent ) ); 781 cl.setName( EntityTypeToParamName( EntityAgent ) );
780 782
781 ParamList params; 783 ParamList params;
782 if ( agent.isIntern() ) { 784 if ( agent.isIntern() ) {
783 QString vstr; 785 QString vstr;
784 Addressee *addr = agent.addressee(); 786 Addressee *addr = agent.addressee();
785 if ( addr ) { 787 if ( addr ) {
786 writeToString( (*addr), vstr ); 788 writeToString( (*addr), vstr );
787 789
788 qDebug("VCardFormatImpl::addAgentValue please verify if replace is correct"); 790 qDebug("VCardFormatImpl::addAgentValue please verify if replace is correct");
789/*US 791/*US
790 vstr.replace( ":", "\\:" ); 792 vstr.replace( ":", "\\:" );
791 vstr.replace( ",", "\\," ); 793 vstr.replace( ",", "\\," );
792 vstr.replace( ";", "\\;" ); 794 vstr.replace( ";", "\\;" );
793 vstr.replace( "\r\n", "\\n" ); 795 vstr.replace( "\r\n", "\\n" );
794*/ 796*/
795 vstr.replace( QRegExp(":"), "\\:" ); 797 vstr.replace( QRegExp(":"), "\\:" );
796 vstr.replace( QRegExp(","), "\\," ); 798 vstr.replace( QRegExp(","), "\\," );
797 vstr.replace( QRegExp(";"), "\\;" ); 799 vstr.replace( QRegExp(";"), "\\;" );
798 vstr.replace( QRegExp("\r\n"), "\\n" ); 800 vstr.replace( QRegExp("\r\n"), "\\n" );
799 801
800 cl.setValue( new TextValue( vstr.utf8() ) ); 802 cl.setValue( new TextValue( vstr.utf8() ) );
801 } else 803 } else
802 return; 804 return;
803 } else { 805 } else {
804 cl.setValue( new TextValue( agent.url().utf8() ) ); 806 cl.setValue( new TextValue( agent.url().utf8() ) );
805 params.append( new Param( "VALUE", "uri" ) ); 807 params.append( new Param( "VALUE", "uri" ) );
806 } 808 }
807 809
808 cl.setParamList( params ); 810 cl.setParamList( params );
809 vcard->add( cl ); 811 vcard->add( cl );
810} 812}
811 813
@@ -816,35 +818,35 @@ Agent VCardFormatImpl::readAgentValue( VCARD::ContentLine *cl )
816 TextValue *v = (TextValue *)cl->value(); 818 TextValue *v = (TextValue *)cl->value();
817 819
818 ParamList params = cl->paramList(); 820 ParamList params = cl->paramList();
819 ParamListIterator it( params ); 821 ParamListIterator it( params );
820 for( ; it.current(); ++it ) { 822 for( ; it.current(); ++it ) {
821 if ( (*it)->name() == "VALUE" && (*it)->value() == "uri" ) 823 if ( (*it)->name() == "VALUE" && (*it)->value() == "uri" )
822 isIntern = false; 824 isIntern = false;
823 } 825 }
824 826
825 if ( isIntern ) { 827 if ( isIntern ) {
826 QString vstr = QString::fromUtf8( v->asString() ); 828 QString vstr = QString::fromUtf8( v->asString() );
827 qDebug("VCardFormatImpl::addAgentValue please verify if replace is correct"); 829 qDebug("VCardFormatImpl::addAgentValue please verify if replace is correct");
828/*US 830/*US
829 vstr.replace( "\\n", "\r\n" ); 831 vstr.replace( "\\n", "\r\n" );
830 vstr.replace( "\\:", ":" ); 832 vstr.replace( "\\:", ":" );
831 vstr.replace( "\\,", "," ); 833 vstr.replace( "\\,", "," );
832 vstr.replace( "\\;", ";" ); 834 vstr.replace( "\\;", ";" );
833*/ 835*/
834 vstr.replace( QRegExp("\\n"), "\r\n" ); 836 vstr.replace( QRegExp("\\n"), "\r\n" );
835 vstr.replace( QRegExp("\\:"), ":" ); 837 vstr.replace( QRegExp("\\:"), ":" );
836 vstr.replace( QRegExp("\\,"), "," ); 838 vstr.replace( QRegExp("\\,"), "," );
837 vstr.replace( QRegExp("\\;"), ";" ); 839 vstr.replace( QRegExp("\\;"), ";" );
838 840
839 Addressee *addr = new Addressee; 841 Addressee *addr = new Addressee;
840 readFromString( vstr, *addr ); 842 readFromString( vstr, *addr );
841 agent.setAddressee( addr ); 843 agent.setAddressee( addr );
842 } else { 844 } else {
843 agent.setUrl( QString::fromUtf8( v->asString() ) ); 845 agent.setUrl( QString::fromUtf8( v->asString() ) );
844 } 846 }
845 847
846 return agent; 848 return agent;
847} 849}
848 850
849void VCardFormatImpl::addPictureValue( VCARD::VCard *vcard, VCARD::EntityType type, const Picture &pic, const Addressee &addr, bool intern ) 851void VCardFormatImpl::addPictureValue( VCARD::VCard *vcard, VCARD::EntityType type, const Picture &pic, const Addressee &addr, bool intern )
850{ 852{
@@ -857,40 +859,40 @@ void VCardFormatImpl::addPictureValue( VCARD::VCard *vcard, VCARD::EntityType ty
857 if ( !pic.isIntern() && pic.url().isEmpty() ) 859 if ( !pic.isIntern() && pic.url().isEmpty() )
858 return; 860 return;
859 861
860 ParamList params; 862 ParamList params;
861 if ( pic.isIntern() ) { 863 if ( pic.isIntern() ) {
862 QImage img = pic.data(); 864 QImage img = pic.data();
863 if ( intern ) { // only for vCard export we really write the data inline 865 if ( intern ) { // only for vCard export we really write the data inline
864 QByteArray data; 866 QByteArray data;
865 QDataStream s( data, IO_WriteOnly ); 867 QDataStream s( data, IO_WriteOnly );
866 s.setVersion( 4 ); // to produce valid png files 868 s.setVersion( 4 ); // to produce valid png files
867 s << img; 869 s << img;
868 cl.setValue( new TextValue( KCodecs::base64Encode( data ) ) ); 870 cl.setValue( new TextValue( KCodecs::base64Encode( data ) ) );
869 871
870 } else { // save picture in cache 872 } else { // save picture in cache
871 QString dir; 873 QString dir;
872 if ( type == EntityPhoto ) 874 if ( type == EntityPhoto )
873 dir = "photos"; 875 dir = "photos";
874 if ( type == EntityLogo ) 876 if ( type == EntityLogo )
875 dir = "logos"; 877 dir = "logos";
876 878
877 img.save( locateLocal( "data", "kabc/" + dir + "/" + addr.uid() ), pic.type().utf8() ); 879 img.save( locateLocal( "data", "kabc/" + dir + "/" + addr.uid() ), pic.type().utf8() );
878 cl.setValue( new TextValue( "<dummy>" ) ); 880 cl.setValue( new TextValue( "<dummy>" ) );
879 } 881 }
880 params.append( new Param( "ENCODING", "b" ) ); 882 params.append( new Param( "ENCODING", "b" ) );
881 if ( !pic.type().isEmpty() ) 883 if ( !pic.type().isEmpty() )
882 params.append( new Param( "TYPE", pic.type().utf8() ) ); 884 params.append( new Param( "TYPE", pic.type().utf8() ) );
883 } else { 885 } else {
884 886
885 cl.setValue( new TextValue( pic.url().utf8() ) ); 887 cl.setValue( new TextValue( pic.url().utf8() ) );
886 params.append( new Param( "VALUE", "uri" ) ); 888 params.append( new Param( "VALUE", "uri" ) );
887 } 889 }
888 890
889 cl.setParamList( params ); 891 cl.setParamList( params );
890 vcard->add( cl ); 892 vcard->add( cl );
891} 893}
892 894
893Picture VCardFormatImpl::readPictureValue( VCARD::ContentLine *cl, VCARD::EntityType type, const Addressee &addr ) 895Picture VCardFormatImpl::readPictureValue( VCARD::ContentLine *cl, VCARD::EntityType type, const Addressee &addr )
894{ 896{
895 Picture pic; 897 Picture pic;
896 bool isInline = false; 898 bool isInline = false;
@@ -992,26 +994,27 @@ Sound VCardFormatImpl::readSoundValue( VCARD::ContentLine *cl, const Addressee &
992 sound.setUrl( QString::fromUtf8( v->asString() ) ); 994 sound.setUrl( QString::fromUtf8( v->asString() ) );
993 } 995 }
994 996
995 return sound; 997 return sound;
996} 998}
997 999
998bool VCardFormatImpl::readFromString( const QString &vcard, Addressee &addressee ) 1000bool VCardFormatImpl::readFromString( const QString &vcard, Addressee &addressee )
999{ 1001{
1000 VCardEntity e( vcard.utf8() ); 1002 VCardEntity e( vcard.utf8() );
1001 VCardListIterator it( e.cardList() ); 1003 VCardListIterator it( e.cardList() );
1002 1004
1003 if ( it.current() ) { 1005 if ( it.current() ) {
1004 VCard v(*it.current()); 1006//US VCard v(*it.current());
1005 loadAddressee( addressee, v ); 1007//US loadAddressee( addressee, v );
1008 loadAddressee( addressee, it.current() );
1006 return true; 1009 return true;
1007 } 1010 }
1008 1011
1009 return false; 1012 return false;
1010} 1013}
1011 1014
1012bool VCardFormatImpl::writeToString( const Addressee &addressee, QString &vcard ) 1015bool VCardFormatImpl::writeToString( const Addressee &addressee, QString &vcard )
1013{ 1016{
1014 VCardEntity vcards; 1017 VCardEntity vcards;
1015 VCardList vcardlist; 1018 VCardList vcardlist;
1016 vcardlist.setAutoDelete( true ); 1019 vcardlist.setAutoDelete( true );
1017 1020