Added new hidden vCard URI parameter for certain CardDAV systems (such as Zimbra) that do not handle UID properly

git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdelibs@1141499 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
v3.5.13-sru
tpearson 14 years ago
parent d855ad0ae0
commit f5dfb1faa6

@ -47,6 +47,7 @@ KABC::SortMode *Addressee::mSortMode = 0;
struct Addressee::AddresseeData : public KShared
{
QString uid;
QString uri;
--VARIABLES--
PhoneNumber::List phoneNumbers;
@ -180,6 +181,24 @@ QString Addressee::uidLabel()
return i18n("Unique Identifier");
}
void Addressee::setUri( const QString &id )
{
if ( id == mData->uri ) return;
detach();
mData->empty = false;
mData->uri = id;
}
QString Addressee::uri() const
{
return mData->uri;
}
QString Addressee::uriLabel()
{
return i18n("Unique Resource Identifier");
}
--DEFINITIONS--
void Addressee::setNameFromString( const QString &s )

@ -110,6 +110,19 @@ class KABC_EXPORT Addressee
*/
static QString uidLabel();
/**
Set unique resource identifier.
*/
void setUri( const QString &uid );
/**
Return unique resource identifier.
*/
QString uri() const;
/**
Return translated label for uri field.
*/
static QString uriLabel();
--DECLARATIONS--
/**
Set name fields by parsing the given string and trying to associate the

@ -29,6 +29,8 @@
using namespace VCARD;
// There are 31 possible types, not including extensions.
// URI is a custom field designed to store the upstream URI for each contact
// in order to handle certain limited CardDAV systems such as Zimbra
const QCString
VCARD::paramNames [] =
{
@ -62,7 +64,8 @@ VCARD::paramNames [] =
"URL",
"VERSION",
"CLASS",
"KEY"
"KEY",
"URI"
};
const ParamType
@ -99,6 +102,7 @@ VCARD::paramTypesTable[] = {
ParamNone, // CLASS
ParamTextBin, // KEY
ParamTextNS // X
ParamNone, // URI
};
ParamType
@ -152,6 +156,7 @@ VCARD::EntityTypeToParamType(EntityType e)
case EntityName:
case EntityVersion:
case EntityProfile:
case EntityURI:
default: t = ParamNone; break;
//---------------------------------------------------------------//
@ -214,6 +219,7 @@ VCARD::EntityTypeToValueType(EntityType e)
case EntityProfile:
case EntityUID:
case EntityNote:
case EntityURI:
default: t = ValueText; break;
//---------------------------------------------------------------//
@ -344,6 +350,8 @@ VCARD::EntityNameToEntityType(const QCString & s)
t = EntityUID;
else if (s == "URL")
t = EntityURL;
else if (s == "URI")
t = EntityURI;
case 'V':
if (s == "VERSION")
t = EntityVersion;

@ -61,6 +61,7 @@ enum EntityType {
EntitySortString,
EntitySound,
EntityUID,
EntityURI,
EntityURL,
EntityVersion,
EntityClass,

@ -137,6 +137,10 @@ bool VCardFormatImpl::loadAddressee( Addressee& addressee, VCARD::VCard &v )
addressee.setUid( readTextValue( cl ) );
break;
case EntityURI:
addressee.setUri( readTextValue( cl ) );
break;
case EntityEmail:
addressee.insertEmail( readTextValue( cl ) );
break;
@ -278,6 +282,7 @@ void VCardFormatImpl::saveAddressee( const Addressee &addressee, VCARD::VCard *v
addTextValue( v, EntityName, addressee.name() );
addTextValue( v, EntityUID, addressee.uid() );
addTextValue( v, EntityURI, addressee.uri() );
addTextValue( v, EntityFullName, addressee.formattedName() );
QStringList emails = addressee.emails();

@ -227,6 +227,7 @@ QString VCardParser::createVCards( const VCard::List& list )
// iterate over the lines
for ( lineIt = lines.constBegin(); lineIt != lines.constEnd(); ++lineIt ) {
if ( !(*lineIt).value().asString().isEmpty() ) {
if ((*lineIt).identifier() != QString("URI")) {
if ( (*lineIt).hasGroup() )
textLine = (*lineIt).group() + "." + (*lineIt).identifier();
else
@ -276,6 +277,15 @@ QString VCardParser::createVCards( const VCard::List& list )
} else
text.append( textLine + "\r\n" );
}
else {
// URIs can be full of weird symbols, etc. so bypass all checks
textLine = (*lineIt).identifier();
QString value( (*lineIt).value().asString() );
addEscapes( value );
textLine.append( ":" + value );
text.append( textLine + "\r\n" );
}
}
}
}

@ -320,6 +320,9 @@ QString VCardTool::createVCards( Addressee::List list, VCard::Version version )
// UID
card.addLine( VCardLine( "UID", (*addrIt).uid() ) );
// UID
card.addLine( VCardLine( "URI", (*addrIt).uri() ) );
// URL
card.addLine( VCardLine( "URL", (*addrIt).url().url() ) );
@ -580,6 +583,10 @@ Addressee::List VCardTool::parseVCards( const QString& vcard )
else if ( identifier == "uid" )
addr.setUid( (*lineIt).value().asString() );
// URI
else if ( identifier == "uri" )
addr.setUri( (*lineIt).value().asString() );
// URL
else if ( identifier == "url" )
addr.setUrl( KURL( (*lineIt).value().asString() ) );

Loading…
Cancel
Save