summaryrefslogtreecommitdiffabout
path: root/kabc
Side-by-side diff
Diffstat (limited to 'kabc') (more/less context) (ignore whitespace changes)
-rw-r--r--kabc/addressee.cpp74
-rw-r--r--kabc/addressee.h2
-rw-r--r--kabc/field.cpp10
-rw-r--r--kabc/phonenumber.cpp112
-rw-r--r--kabc/phonenumber.h5
-rw-r--r--kabc/vcard21parser.cpp14
-rw-r--r--kabc/vcardformatimpl.cpp4
-rw-r--r--kabc/vcardparser/vcardtool.cpp2
8 files changed, 196 insertions, 27 deletions
diff --git a/kabc/addressee.cpp b/kabc/addressee.cpp
index 7e1e414..661bdf6 100644
--- a/kabc/addressee.cpp
+++ b/kabc/addressee.cpp
@@ -588,3 +588,55 @@ void Addressee::simplifyEmails()
}
+void Addressee::makePhoneNumbersOLcompatible()
+{
+ KABC::PhoneNumber::List::Iterator phoneIter;
+ KABC::PhoneNumber::List::Iterator phoneIter2;
+ for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end();
+ ++phoneIter ) {
+ ( *phoneIter ).makeCompat();
+ }
+ int hasHome = hasPhoneNumberType( PhoneNumber::Home | PhoneNumber::Pref );
+ int hasHome2 = hasPhoneNumberType( PhoneNumber::Home );
+ int hasWork = hasPhoneNumberType( PhoneNumber::Work | PhoneNumber::Pref );
+ int hasWork2 = hasPhoneNumberType( PhoneNumber::Work );
+ int hasCell = hasPhoneNumberType( PhoneNumber::Cell );
+ int hasCell2 = hasPhoneNumberType( PhoneNumber::Car );
+ for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end();
+ ++phoneIter ) {
+ if ( (*phoneIter).type() == PhoneNumber::Home && ! hasHome ) {
+ (*phoneIter).setType( PhoneNumber::Home | PhoneNumber::Pref );
+ ++hasHome;
+ if ( hasHome2 ) --hasHome2;
+ } else if ( ( (*phoneIter).type() == PhoneNumber::Home | PhoneNumber::Pref) && hasHome>1 && !hasHome2 ) {
+ (*phoneIter).setType( PhoneNumber::Home );
+ --hasHome;
+ ++hasHome2;
+ } else if ( (*phoneIter).type() == PhoneNumber::Work && ! hasWork ) {
+ (*phoneIter).setType( PhoneNumber::Work | PhoneNumber::Pref );
+ ++hasWork;
+ if ( hasWork2 ) --hasWork2;
+ } else if ( ( (*phoneIter).type() == PhoneNumber::Work | PhoneNumber::Pref) && hasWork > 1 && ! hasWork2 ) {
+ (*phoneIter).setType( PhoneNumber::Work );
+ --hasWork;
+ ++hasWork2;
+ } else if ( (*phoneIter).type() == PhoneNumber::Cell && hasCell > 1 && !hasCell2) {
+ (*phoneIter).setType( PhoneNumber::Car );
+ ++hasCell2;
+ --hasCell;
+ } else if ( (*phoneIter).type() == PhoneNumber::Car && hasCell2 > 1 && !hasCell) {
+ (*phoneIter).setType( PhoneNumber::Cell );
+ ++hasCell;
+ --hasCell2;
+ } else{
+ phoneIter2 = phoneIter;
+ ++phoneIter2;
+ for ( ; phoneIter2 != mData->phoneNumbers.end();
+ ++phoneIter2 ) {
+ if ( (*phoneIter2).type() == (*phoneIter).type() ) {
+ (*phoneIter2).setType( PhoneNumber::Voice );
+ }
+ }
+ }
+ }
+}
void Addressee::simplifyPhoneNumbers()
@@ -999,3 +1051,3 @@ QString Addressee::businessPhoneLabel()
{
- return i18n("Business Phone");
+ return i18n("Work Phone");
}
@@ -1009,3 +1061,3 @@ QString Addressee::mobileWorkPhoneLabel()
{
- return i18n("Mobile (work)");
+ return i18n("Mobile2 (work)");
}
@@ -1013,3 +1065,3 @@ QString Addressee::mobileHomePhoneLabel()
{
- return i18n("Mobile (home)");
+ return i18n("Mobile");
}
@@ -1019,3 +1071,3 @@ QString Addressee::homeFaxLabel()
{
- return i18n("Home Fax");
+ return i18n("Fax (Home)");
}
@@ -1025,3 +1077,3 @@ QString Addressee::businessFaxLabel()
{
- return i18n("Business Fax");
+ return i18n("Fax (Work)");
}
@@ -1031,3 +1083,3 @@ QString Addressee::carPhoneLabel()
{
- return i18n("Car Phone");
+ return i18n("Mobile2 (work)");
}
@@ -1654,2 +1706,12 @@ PhoneNumber::List Addressee::phoneNumbers() const
+int Addressee::hasPhoneNumberType( int type )
+{
+ int retval = 0;
+ PhoneNumber::List::ConstIterator it;
+ for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) {
+ if ( (*it).type() == type )
+ ++retval;
+ }
+ return retval;
+}
PhoneNumber::List Addressee::phoneNumbers( int type ) const
diff --git a/kabc/addressee.h b/kabc/addressee.h
index d1c07cb..0c488eb 100644
--- a/kabc/addressee.h
+++ b/kabc/addressee.h
@@ -124,2 +124,4 @@ class Addressee
void simplifyPhoneNumberTypes();
+ void makePhoneNumbersOLcompatible();
+ int hasPhoneNumberType( int type );
bool removeVoice();
diff --git a/kabc/field.cpp b/kabc/field.cpp
index fd51026..20885de 100644
--- a/kabc/field.cpp
+++ b/kabc/field.cpp
@@ -291,5 +291,5 @@ QString Field::value( const KABC::Addressee &a )
case FieldImpl::HomePhone:
- return a.phoneNumber( PhoneNumber::Home ).number();
+ return a.phoneNumber( PhoneNumber::Home| PhoneNumber::Pref ).number();
case FieldImpl::BusinessPhone:
- return a.phoneNumber( PhoneNumber::Work ).number();
+ return a.phoneNumber( PhoneNumber::Work| PhoneNumber::Pref ).number();
case FieldImpl::MobilePhone:
@@ -297,5 +297,5 @@ QString Field::value( const KABC::Addressee &a )
case FieldImpl::MobileWorkPhone:
- return a.phoneNumber( PhoneNumber::Cell | PhoneNumber::Work ).number();
+ return a.phoneNumber( PhoneNumber::Car ).number();
case FieldImpl::MobileHomePhone:
- return a.phoneNumber( PhoneNumber::Cell | PhoneNumber::Home ).number();
+ return a.phoneNumber( PhoneNumber::Cell ).number();
case FieldImpl::HomeFax:
@@ -311,3 +311,3 @@ QString Field::value( const KABC::Addressee &a )
case FieldImpl::Sip:
- return a.phoneNumber( PhoneNumber::Sip ).number();
+ return a.phoneNumber( PhoneNumber::Pcs | PhoneNumber::Pref ).number();
case FieldImpl::HomeAddressStreet:
diff --git a/kabc/phonenumber.cpp b/kabc/phonenumber.cpp
index 4c6231d..0d46ba7 100644
--- a/kabc/phonenumber.cpp
+++ b/kabc/phonenumber.cpp
@@ -67,3 +67,58 @@ bool PhoneNumber::operator!=( const PhoneNumber &p ) const
}
+void PhoneNumber::makeCompat()
+{
+ mType = getCompatType( mType );
+}
+int PhoneNumber::getCompatType( int type )
+{
+
+ if ((type & Cell) == Cell) {
+ if ((type & Work) == Work)
+ return Car;
+ return Cell;
+ }
+ if ((type & Home) == Home) {
+ if ((type & Pref) == Pref)
+ return (Home | Pref);
+ if ((type & Fax) == Fax)
+ return (Home | Fax);
+ return (Home);
+ }
+ if ((type & Work) == Work) {
+ if ((type & Pref) == Pref)
+ return (Work| Pref);
+ if ((type & Fax) == Fax)
+ return (Fax |Work);
+ if ((type & Msg) == Msg) {
+ if ((type & Voice) == Voice)
+ return ( Msg | Voice |Work);
+ return ( Msg | Work);
+ }
+ return Work;
+ }
+ if ((type & Pcs) == Pcs) {
+ if ((type & Pref) == Pref)
+ return Pcs | Pref;
+ return Pcs;
+ }
+ if ((type & Car) == Car)
+ return Car;
+ if ((type & Pager) == Pager)
+ return Pager;
+ if ((type & Isdn) == Isdn)
+ return Isdn;
+ if ((type & Video) == Video)
+ return Video;
+
+ if ((type & Msg) == Msg)
+ return Msg;
+ if ((type & Fax) == Fax)
+ return Fax;
+
+ if ((type & Pref) == Pref)
+ return Pref;
+ return Voice;
+
+}
bool PhoneNumber::simplifyNumber()
@@ -165,3 +220,3 @@ PhoneNumber::TypeList PhoneNumber::typeList()
list << Home << Work << Msg << Pref << Voice << Fax << Cell << Video
- << Bbs << Modem << Car << Isdn << Pcs << Pager << Sip;
+ << Bbs << Modem << Car << Isdn << Pcs << Pager;
@@ -177,4 +232,56 @@ QString PhoneNumber::typeLabel( int type )
{
- QString typeString;
+ if ((type & Cell) == Cell)
+ return i18n("Mobile");
+ if ((type & Home) == Home) {
+ if ((type & Pref) == Pref)
+ return i18n("Home");
+ if ((type & Fax) == Fax)
+ return i18n("Fax (Home)");
+ return i18n("Home2");
+ }
+ if ((type & Work) == Work) {
+ if ((type & Pref) == Pref)
+ return i18n("Work");
+ if ((type & Fax) == Fax)
+ return i18n("Fax (Work)");
+ if ((type & Msg) == Msg) {
+ if ((type & Voice) == Voice)
+ return i18n("Assistent");
+ return i18n("Company");
+ }
+ return i18n("Work2");
+ }
+ if ((type & Pcs) == Pcs) {
+ if ((type & Pref) == Pref)
+ return i18n("SIP");
+ return i18n("VoIP");
+ }
+ if ((type & Car) == Car)
+ return i18n("Mobile2 (Work)");
+ if ((type & Pager) == Pager)
+ return i18n("Pager");
+ if ((type & Isdn) == Isdn)
+ return i18n("ISDN");
+ if ((type & Video) == Video)
+ return i18n("Video");
+
+ if ((type & Msg) == Msg)
+ return i18n("Callback");
+ if ((type & Fax) == Fax)
+ return i18n("Fax (Other)");
+
+ if ((type & Pref) == Pref)
+ return i18n("Primary");
+
+
+ return i18n("Other");
+
+
+#if 0
+
+
+
+ QString typeString;
+
@@ -222,2 +329,3 @@ QString PhoneNumber::typeLabel( int type )
return typeString.stripWhiteSpace();
+#endif
}
diff --git a/kabc/phonenumber.h b/kabc/phonenumber.h
index 2d4d3e0..b9d6a17 100644
--- a/kabc/phonenumber.h
+++ b/kabc/phonenumber.h
@@ -66,3 +66,2 @@ class PhoneNumber
@li @p Pager - Pager
- @li @p SIP - VoIP
*/
@@ -70,3 +69,3 @@ class PhoneNumber
Cell = 64, Video = 128, Bbs = 256, Modem = 512, Car = 1024,
- Isdn = 2048, Pcs = 4096, Pager = 8192, Sip = 16384 };
+ Isdn = 2048, Pcs = 4096, Pager = 8192 };
@@ -153,2 +152,4 @@ class PhoneNumber
void simplifyType();
+ void makeCompat();
+ int getCompatType( int type );
diff --git a/kabc/vcard21parser.cpp b/kabc/vcard21parser.cpp
index 277de22..60d02b8 100644
--- a/kabc/vcard21parser.cpp
+++ b/kabc/vcard21parser.cpp
@@ -172,4 +172,3 @@ bool VCardLineX::isValid() const
qualifiers.contains(VCARD_TEL_VIDEO) ||
- qualifiers.contains(VCARD_TEL_PCS) ||
- qualifiers.contains(VCARD_TEL_SIP)
+ qualifiers.contains(VCARD_TEL_PCS)
) )
@@ -281,5 +280,5 @@ KABC::Addressee VCard21Parser::readFromString( const QString &data)
if ( (*i).qualifiers.contains( VCARD_TEL_PREF ) )
- type |= PhoneNumber::Pref;
- // if ( (*i).qualifiers.contains( VCARD_TEL_VOICE ) )
- // type |= PhoneNumber::Voice;
+ type |= PhoneNumber::Pref;
+ if ( (*i).qualifiers.contains( VCARD_TEL_VOICE ) )
+ type |= PhoneNumber::Voice;
if ( (*i).qualifiers.contains( VCARD_TEL_FAX ) )
@@ -304,4 +303,3 @@ KABC::Addressee VCard21Parser::readFromString( const QString &data)
type |= PhoneNumber::Pcs;
- if ( (*i).qualifiers.contains( VCARD_TEL_SIP ) )
- type |= PhoneNumber::Sip;
+
}
@@ -310,3 +308,3 @@ KABC::Addressee VCard21Parser::readFromString( const QString &data)
}
-
+ addressee.makePhoneNumbersOLcompatible();
//set the addressee's addresses
diff --git a/kabc/vcardformatimpl.cpp b/kabc/vcardformatimpl.cpp
index ec5ed80..26fd4f0 100644
--- a/kabc/vcardformatimpl.cpp
+++ b/kabc/vcardformatimpl.cpp
@@ -283,3 +283,3 @@ bool VCardFormatImpl::loadAddressee( Addressee& addressee, VCard *v )
}
-
+ addressee.makePhoneNumbersOLcompatible();
return true;
@@ -597,3 +597,2 @@ void VCardFormatImpl::addTelephoneValue( VCard *v, const PhoneNumber &p )
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 );
@@ -630,3 +629,2 @@ PhoneNumber VCardFormatImpl::readTelephoneValue( ContentLine *cl )
else if ( tmpStr == "pager" ) type |= PhoneNumber::Pager;
- else if ( tmpStr == "sip" ) type |= PhoneNumber::Sip;
}
diff --git a/kabc/vcardparser/vcardtool.cpp b/kabc/vcardparser/vcardtool.cpp
index c3d92b6..204326e 100644
--- a/kabc/vcardparser/vcardtool.cpp
+++ b/kabc/vcardparser/vcardtool.cpp
@@ -578,3 +578,3 @@ Addressee::List VCardTool::parseVCards( const QString& vcard )
}
-
+ addr.makePhoneNumbersOLcompatible();
addrList.append( addr );