-rw-r--r-- | kabc/vcardformatimpl.cpp | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/kabc/vcardformatimpl.cpp b/kabc/vcardformatimpl.cpp index bffaa64..2d6eb3d 100644 --- a/kabc/vcardformatimpl.cpp +++ b/kabc/vcardformatimpl.cpp @@ -466,288 +466,290 @@ void VCardFormatImpl::addGeoValue( VCard *vcard, const Geo &geo ) void VCardFormatImpl::addUTCValue( VCard *vcard, const TimeZone &tz ) { if ( !tz.isValid() ) return; ContentLine cl; cl.setName( EntityTypeToParamName( EntityTimeZone ) ); UTCValue *v = new UTCValue; v->setPositive( tz.offset() >= 0 ); v->setHour( (tz.offset() / 60) * ( tz.offset() >= 0 ? 1 : -1 ) ); v->setMinute( (tz.offset() % 60) * ( tz.offset() >= 0 ? 1 : -1 ) ); cl.setValue( v ); vcard->add(cl); } void VCardFormatImpl::addClassValue( VCard *vcard, const Secrecy &secrecy ) { ContentLine cl; cl.setName( EntityTypeToParamName( EntityClass ) ); ClassValue *v = new ClassValue; switch ( secrecy.type() ) { case Secrecy::Public: v->setType( (int)ClassValue::Public ); break; case Secrecy::Private: v->setType( (int)ClassValue::Private ); break; case Secrecy::Confidential: v->setType( (int)ClassValue::Confidential ); break; } cl.setValue( v ); vcard->add(cl); } Address VCardFormatImpl::readAddressValue( ContentLine *cl ) { Address a; AdrValue *v = (AdrValue *)cl->value(); a.setPostOfficeBox( QString::fromUtf8( v->poBox() ) ); a.setExtended( QString::fromUtf8( v->extAddress() ) ); a.setStreet( QString::fromUtf8( v->street() ) ); a.setLocality( QString::fromUtf8( v->locality() ) ); a.setRegion( QString::fromUtf8( v->region() ) ); a.setPostalCode( QString::fromUtf8( v->postCode() ) ); a.setCountry( QString::fromUtf8( v->countryName() ) ); a.setType( readAddressParam( cl ) ); return a; } int VCardFormatImpl::readAddressParam( ContentLine *cl ) { int type = 0; ParamList params = cl->paramList(); ParamListIterator it( params ); QCString tmpStr; for( ; it.current(); ++it ) { if ( (*it)->name().upper() == "TYPE" ) { tmpStr = (*it)->value().lower(); if ( tmpStr == "dom" ) type |= Address::Dom; else if ( tmpStr == "intl" ) type |= Address::Intl; else if ( tmpStr == "parcel" ) type |= Address::Parcel; else if ( tmpStr == "postal" ) type |= Address::Postal; else if ( tmpStr == "work" ) type |= Address::Work; else if ( tmpStr == "home" ) type |= Address::Home; else if ( tmpStr == "pref" ) type |= Address::Pref; } } return type; } void VCardFormatImpl::addNValue( VCard *vcard, const Addressee &a ) { ContentLine cl; cl.setName(EntityTypeToParamName( EntityN ) ); NValue *v = new NValue; v->setFamily( a.familyName().utf8() ); v->setGiven( a.givenName().utf8() ); v->setMiddle( a.additionalName().utf8() ); v->setPrefix( a.prefix().utf8() ); v->setSuffix( a.suffix().utf8() ); cl.setValue( v ); vcard->add(cl); } void VCardFormatImpl::readNValue( ContentLine *cl, Addressee &a ) { NValue *v = (NValue *)cl->value(); a.setFamilyName( QString::fromUtf8( v->family() ) ); a.setGivenName( QString::fromUtf8( v->given() ) ); a.setAdditionalName( QString::fromUtf8( v->middle() ) ); a.setPrefix( QString::fromUtf8( v->prefix() ) ); a.setSuffix( QString::fromUtf8( v->suffix() ) ); } void VCardFormatImpl::addTelephoneValue( VCard *v, const PhoneNumber &p ) { if ( p.number().isEmpty() ) return; ContentLine cl; cl.setName(EntityTypeToParamName(EntityTelephone)); cl.setValue(new TelValue( p.number().utf8() )); ParamList params; if( p.type() & PhoneNumber::Home ) params.append( new Param( "TYPE", "home" ) ); if( p.type() & PhoneNumber::Work ) params.append( new Param( "TYPE", "work" ) ); if( p.type() & PhoneNumber::Msg ) params.append( new Param( "TYPE", "msg" ) ); if( p.type() & PhoneNumber::Pref ) params.append( new Param( "TYPE", "pref" ) ); if( p.type() & PhoneNumber::Voice ) params.append( new Param( "TYPE", "voice" ) ); if( p.type() & PhoneNumber::Fax ) params.append( new Param( "TYPE", "fax" ) ); if( p.type() & PhoneNumber::Cell ) params.append( new Param( "TYPE", "cell" ) ); if( p.type() & PhoneNumber::Video ) params.append( new Param( "TYPE", "video" ) ); if( p.type() & PhoneNumber::Bbs ) params.append( new Param( "TYPE", "bbs" ) ); if( p.type() & PhoneNumber::Modem ) params.append( new Param( "TYPE", "modem" ) ); if( p.type() & PhoneNumber::Car ) params.append( new Param( "TYPE", "car" ) ); if( p.type() & PhoneNumber::Isdn ) params.append( new Param( "TYPE", "isdn" ) ); if( p.type() & PhoneNumber::Pcs ) params.append( new Param( "TYPE", "pcs" ) ); if( p.type() & PhoneNumber::Pager ) params.append( new Param( "TYPE", "pager" ) ); + if( p.type() & PhoneNumber::Sip ) params.append( new Param( "TYPE", "sip" ) ); cl.setParamList( params ); v->add(cl); } PhoneNumber VCardFormatImpl::readTelephoneValue( ContentLine *cl ) { PhoneNumber p; TelValue *value = (TelValue *)cl->value(); p.setNumber( QString::fromUtf8( value->asString() ) ); int type = 0; ParamList params = cl->paramList(); ParamListIterator it( params ); QCString tmpStr; for( ; it.current(); ++it ) { if ( (*it)->name() == "TYPE" ) { tmpStr = (*it)->value().lower(); if ( tmpStr == "home" ) type |= PhoneNumber::Home; else if ( tmpStr == "work" ) type |= PhoneNumber::Work; else if ( tmpStr == "msg" ) type |= PhoneNumber::Msg; else if ( tmpStr == "pref" ) type |= PhoneNumber::Pref; else if ( tmpStr == "voice" ) type |= PhoneNumber::Voice; else if ( tmpStr == "fax" ) type |= PhoneNumber::Fax; else if ( tmpStr == "cell" ) type |= PhoneNumber::Cell; else if ( tmpStr == "video" ) type |= PhoneNumber::Video; else if ( tmpStr == "bbs" ) type |= PhoneNumber::Bbs; else if ( tmpStr == "modem" ) type |= PhoneNumber::Modem; else if ( tmpStr == "car" ) type |= PhoneNumber::Car; else if ( tmpStr == "isdn" ) type |= PhoneNumber::Isdn; else if ( tmpStr == "pcs" ) type |= PhoneNumber::Pcs; else if ( tmpStr == "pager" ) type |= PhoneNumber::Pager; + else if ( tmpStr == "sip" ) type |= PhoneNumber::Sip; } } p.setType( type ); return p; } QString VCardFormatImpl::readTextValue( ContentLine *cl ) { VCARD::Value *value = cl->value(); if ( value ) { return QString::fromUtf8( value->asString() ); } else { kdDebug(5700) << "No value: " << cl->asString() << endl; return QString::null; } } QDate VCardFormatImpl::readDateValue( ContentLine *cl ) { DateValue *dateValue = (DateValue *)cl->value(); if ( dateValue ) return dateValue->qdate(); else return QDate(); } QDateTime VCardFormatImpl::readDateTimeValue( ContentLine *cl ) { DateValue *dateValue = (DateValue *)cl->value(); if ( dateValue ) return dateValue->qdt(); else return QDateTime(); } Geo VCardFormatImpl::readGeoValue( ContentLine *cl ) { GeoValue *geoValue = (GeoValue *)cl->value(); if ( geoValue ) { Geo geo( geoValue->latitude(), geoValue->longitude() ); return geo; } else return Geo(); } TimeZone VCardFormatImpl::readUTCValue( ContentLine *cl ) { UTCValue *utcValue = (UTCValue *)cl->value(); if ( utcValue ) { TimeZone tz; tz.setOffset(((utcValue->hour()*60)+utcValue->minute())*(utcValue->positive() ? 1 : -1)); return tz; } else return TimeZone(); } Secrecy VCardFormatImpl::readClassValue( ContentLine *cl ) { ClassValue *classValue = (ClassValue *)cl->value(); if ( classValue ) { Secrecy secrecy; switch ( classValue->type() ) { case ClassValue::Public: secrecy.setType( Secrecy::Public ); break; case ClassValue::Private: secrecy.setType( Secrecy::Private ); break; case ClassValue::Confidential: secrecy.setType( Secrecy::Confidential ); break; } return secrecy; } else return Secrecy(); } void VCardFormatImpl::addKeyValue( VCARD::VCard *vcard, const Key &key ) { ContentLine cl; cl.setName( EntityTypeToParamName( EntityKey ) ); ParamList params; if ( key.isBinary() ) { cl.setValue( new TextValue( KCodecs::base64Encode( key.binaryData() ) ) ); params.append( new Param( "ENCODING", "b" ) ); } else { cl.setValue( new TextValue( key.textData().utf8() ) ); } switch ( key.type() ) { case Key::X509: params.append( new Param( "TYPE", "X509" ) ); break; case Key::PGP: params.append( new Param( "TYPE", "PGP" ) ); break; case Key::Custom: params.append( new Param( "TYPE", key.customTypeString().utf8() ) ); break; } cl.setParamList( params ); vcard->add( cl ); } Key VCardFormatImpl::readKeyValue( VCARD::ContentLine *cl ) { Key key; bool isBinary = false; TextValue *v = (TextValue *)cl->value(); ParamList params = cl->paramList(); ParamListIterator it( params ); for( ; it.current(); ++it ) { if ( (*it)->name() == "ENCODING" && (*it)->value() == "b" ) isBinary = true; if ( (*it)->name() == "TYPE" ) { if ( (*it)->value().isEmpty() ) continue; if ( (*it)->value() == "X509" ) key.setType( Key::X509 ); else if ( (*it)->value() == "PGP" ) key.setType( Key::PGP ); else { key.setType( Key::Custom ); |