-rw-r--r-- | kabc/vcardformatimpl.cpp | 4 |
1 files changed, 1 insertions, 3 deletions
diff --git a/kabc/vcardformatimpl.cpp b/kabc/vcardformatimpl.cpp index ec5ed80..26fd4f0 100644 --- a/kabc/vcardformatimpl.cpp +++ b/kabc/vcardformatimpl.cpp @@ -188,193 +188,193 @@ bool VCardFormatImpl::loadAddressee( Addressee& addressee, VCard *v ) case EntityOrganisation: addressee.setOrganization( readTextValue( cl ) ); break; case EntityNote: addressee.setNote( readTextValue( cl ) ); break; case EntityProductID: addressee.setProductId( readTextValue( cl ) ); break; case EntitySortString: addressee.setSortString( readTextValue( cl ) ); break; case EntityN: readNValue( cl, addressee ); break; case EntityAddress: addressee.insertAddress( readAddressValue( cl ) ); break; case EntityTelephone: addressee.insertPhoneNumber( readTelephoneValue( cl ) ); break; case EntityCategories: addressee.setCategories( QStringList::split( ",", readTextValue( cl ) ) ); break; case EntityBirthday: addressee.setBirthday( readDateValue( cl ) ); break; case EntityRevision: addressee.setRevision( readDateTimeValue( cl ) ); break; case EntityGeo: addressee.setGeo( readGeoValue( cl ) ); break; case EntityTimeZone: addressee.setTimeZone( readUTCValue( cl ) ); break; case EntityVersion: break; case EntityClass: addressee.setSecrecy( readClassValue( cl ) ); break; case EntityKey: addressee.insertKey( readKeyValue( cl ) ); break; case EntityPhoto: addressee.setPhoto( readPictureValue( cl, EntityPhoto, addressee ) ); break; case EntityLogo: addressee.setLogo( readPictureValue( cl, EntityLogo, addressee ) ); break; case EntityAgent: addressee.setAgent( readAgentValue( cl ) ); break; case EntitySound: addressee.setSound( readSoundValue( cl, addressee ) ); break; default: kdDebug(5700) << "VCardFormat::load(): Unsupported entity: " << int( type ) << ": " << cl->asString() << endl; qDebug("VCardFormat::load(): Unsupported entity: %i: %s ", int(type), (const char*)cl->asString()); break; } } for( cl = contentLines.first(); cl; cl = contentLines.next() ) { EntityType type = cl->entityType(); if ( type == EntityLabel ) { int type = readAddressParam( cl ); Address address = addressee.address( type ); if ( address.isEmpty() ) address.setType( type ); address.setLabel( QString::fromUtf8( cl->value()->asString() ) ); addressee.insertAddress( address ); } } - + addressee.makePhoneNumbersOLcompatible(); return true; } void VCardFormatImpl::saveAddressee( const Addressee &addressee, VCard *v, bool intern ) { //US ContentLine cl; //US QString value; addTextValue( v, EntityName, addressee.name() ); addTextValue( v, EntityUID, addressee.uid() ); addTextValue( v, EntityFullName, addressee.formattedName() ); QStringList emails = addressee.emails(); QStringList::ConstIterator it4; for( it4 = emails.begin(); it4 != emails.end(); ++it4 ) { addTextValue( v, EntityEmail, *it4 ); } QStringList customs = addressee.customs(); QStringList::ConstIterator it5; for( it5 = customs.begin(); it5 != customs.end(); ++it5 ) { addCustomValue( v, *it5 ); } addTextValue( v, EntityURL, addressee.url().url() ); addNValue( v, addressee ); addTextValue( v, EntityNickname, addressee.nickName() ); addTextValue( v, EntityMailer, addressee.mailer() ); addTextValue( v, EntityTitle, addressee.title() ); addTextValue( v, EntityRole, addressee.role() ); addTextValue( v, EntityOrganisation, addressee.organization() ); addTextValue( v, EntityNote, addressee.note() ); addTextValue( v, EntityProductID, addressee.productId() ); addTextValue( v, EntitySortString, addressee.sortString() ); Address::List addresses = addressee.addresses(); Address::List::ConstIterator it3; for( it3 = addresses.begin(); it3 != addresses.end(); ++it3 ) { addAddressValue( v, *it3 ); addLabelValue( v, *it3 ); } PhoneNumber::List phoneNumbers = addressee.phoneNumbers(); PhoneNumber::List::ConstIterator it2; for( it2 = phoneNumbers.begin(); it2 != phoneNumbers.end(); ++it2 ) { addTelephoneValue( v, *it2 ); } Key::List keys = addressee.keys(); Key::List::ConstIterator it6; for( it6 = keys.begin(); it6 != keys.end(); ++it6 ) { addKeyValue( v, *it6 ); } addTextValue( v, EntityCategories, addressee.categories().join(",") ); addDateValue( v, EntityBirthday, addressee.birthday().date() ); addDateTimeValue( v, EntityRevision, addressee.revision() ); addGeoValue( v, addressee.geo() ); addUTCValue( v, addressee.timeZone() ); addClassValue( v, addressee.secrecy() ); addPictureValue( v, EntityPhoto, addressee.photo(), addressee, intern ); addPictureValue( v, EntityLogo, addressee.logo(), addressee, intern ); addAgentValue( v, addressee.agent() ); addSoundValue( v, addressee.sound(), addressee, intern ); } void VCardFormatImpl::addCustomValue( VCard *v, const QString &txt ) { if ( txt.isEmpty() ) return; ContentLine cl; cl.setName( "X-" + txt.left( txt.find( ":" ) ).utf8() ); QString value = txt.mid( txt.find( ":" ) + 1 ); if ( value.isEmpty() ) return; cl.setValue( new TextValue( value.utf8() ) ); v->add(cl); } void VCardFormatImpl::addTextValue( VCard *v, EntityType type, const QString &txt ) { if ( txt.isEmpty() ) return; ContentLine cl; cl.setName( EntityTypeToParamName( type ) ); cl.setValue( new TextValue( txt.utf8() ) ); v->add(cl); } @@ -502,226 +502,224 @@ void VCardFormatImpl::addClassValue( VCard *vcard, const Secrecy &secrecy ) 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; qDebug("No value: %s", (const char*)(cl->asString())); 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" ) ); |