-rw-r--r-- | kabc/addressee.cpp | 74 | ||||
-rw-r--r-- | kabc/addressee.h | 2 | ||||
-rw-r--r-- | kabc/field.cpp | 10 | ||||
-rw-r--r-- | kabc/phonenumber.cpp | 112 | ||||
-rw-r--r-- | kabc/phonenumber.h | 5 | ||||
-rw-r--r-- | kabc/vcard21parser.cpp | 14 | ||||
-rw-r--r-- | kabc/vcardformatimpl.cpp | 4 | ||||
-rw-r--r-- | kabc/vcardparser/vcardtool.cpp | 2 |
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 | |||
@@ -587,5 +587,57 @@ void Addressee::simplifyEmails() | |||
587 | mData->emails.append( email ); | 587 | mData->emails.append( email ); |
588 | } | 588 | } |
589 | void Addressee::makePhoneNumbersOLcompatible() | ||
590 | { | ||
591 | KABC::PhoneNumber::List::Iterator phoneIter; | ||
592 | KABC::PhoneNumber::List::Iterator phoneIter2; | ||
593 | for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end(); | ||
594 | ++phoneIter ) { | ||
595 | ( *phoneIter ).makeCompat(); | ||
596 | } | ||
597 | int hasHome = hasPhoneNumberType( PhoneNumber::Home | PhoneNumber::Pref ); | ||
598 | int hasHome2 = hasPhoneNumberType( PhoneNumber::Home ); | ||
599 | int hasWork = hasPhoneNumberType( PhoneNumber::Work | PhoneNumber::Pref ); | ||
600 | int hasWork2 = hasPhoneNumberType( PhoneNumber::Work ); | ||
601 | int hasCell = hasPhoneNumberType( PhoneNumber::Cell ); | ||
602 | int hasCell2 = hasPhoneNumberType( PhoneNumber::Car ); | ||
603 | for ( phoneIter = mData->phoneNumbers.begin(); phoneIter != mData->phoneNumbers.end(); | ||
604 | ++phoneIter ) { | ||
605 | if ( (*phoneIter).type() == PhoneNumber::Home && ! hasHome ) { | ||
606 | (*phoneIter).setType( PhoneNumber::Home | PhoneNumber::Pref ); | ||
607 | ++hasHome; | ||
608 | if ( hasHome2 ) --hasHome2; | ||
609 | } else if ( ( (*phoneIter).type() == PhoneNumber::Home | PhoneNumber::Pref) && hasHome>1 && !hasHome2 ) { | ||
610 | (*phoneIter).setType( PhoneNumber::Home ); | ||
611 | --hasHome; | ||
612 | ++hasHome2; | ||
613 | } else if ( (*phoneIter).type() == PhoneNumber::Work && ! hasWork ) { | ||
614 | (*phoneIter).setType( PhoneNumber::Work | PhoneNumber::Pref ); | ||
615 | ++hasWork; | ||
616 | if ( hasWork2 ) --hasWork2; | ||
617 | } else if ( ( (*phoneIter).type() == PhoneNumber::Work | PhoneNumber::Pref) && hasWork > 1 && ! hasWork2 ) { | ||
618 | (*phoneIter).setType( PhoneNumber::Work ); | ||
619 | --hasWork; | ||
620 | ++hasWork2; | ||
621 | } else if ( (*phoneIter).type() == PhoneNumber::Cell && hasCell > 1 && !hasCell2) { | ||
622 | (*phoneIter).setType( PhoneNumber::Car ); | ||
623 | ++hasCell2; | ||
624 | --hasCell; | ||
625 | } else if ( (*phoneIter).type() == PhoneNumber::Car && hasCell2 > 1 && !hasCell) { | ||
626 | (*phoneIter).setType( PhoneNumber::Cell ); | ||
627 | ++hasCell; | ||
628 | --hasCell2; | ||
629 | } else{ | ||
630 | phoneIter2 = phoneIter; | ||
631 | ++phoneIter2; | ||
632 | for ( ; phoneIter2 != mData->phoneNumbers.end(); | ||
633 | ++phoneIter2 ) { | ||
634 | if ( (*phoneIter2).type() == (*phoneIter).type() ) { | ||
635 | (*phoneIter2).setType( PhoneNumber::Voice ); | ||
589 | 636 | ||
637 | } | ||
638 | } | ||
639 | } | ||
640 | } | ||
641 | } | ||
590 | void Addressee::simplifyPhoneNumbers() | 642 | void Addressee::simplifyPhoneNumbers() |
591 | { | 643 | { |
@@ -998,5 +1050,5 @@ QString Addressee::homePhoneLabel() | |||
998 | QString Addressee::businessPhoneLabel() | 1050 | QString Addressee::businessPhoneLabel() |
999 | { | 1051 | { |
1000 | return i18n("Business Phone"); | 1052 | return i18n("Work Phone"); |
1001 | } | 1053 | } |
1002 | 1054 | ||
@@ -1008,9 +1060,9 @@ QString Addressee::mobilePhoneLabel() | |||
1008 | QString Addressee::mobileWorkPhoneLabel() | 1060 | QString Addressee::mobileWorkPhoneLabel() |
1009 | { | 1061 | { |
1010 | return i18n("Mobile (work)"); | 1062 | return i18n("Mobile2 (work)"); |
1011 | } | 1063 | } |
1012 | QString Addressee::mobileHomePhoneLabel() | 1064 | QString Addressee::mobileHomePhoneLabel() |
1013 | { | 1065 | { |
1014 | return i18n("Mobile (home)"); | 1066 | return i18n("Mobile"); |
1015 | } | 1067 | } |
1016 | 1068 | ||
@@ -1018,5 +1070,5 @@ QString Addressee::mobileHomePhoneLabel() | |||
1018 | QString Addressee::homeFaxLabel() | 1070 | QString Addressee::homeFaxLabel() |
1019 | { | 1071 | { |
1020 | return i18n("Home Fax"); | 1072 | return i18n("Fax (Home)"); |
1021 | } | 1073 | } |
1022 | 1074 | ||
@@ -1024,5 +1076,5 @@ QString Addressee::homeFaxLabel() | |||
1024 | QString Addressee::businessFaxLabel() | 1076 | QString Addressee::businessFaxLabel() |
1025 | { | 1077 | { |
1026 | return i18n("Business Fax"); | 1078 | return i18n("Fax (Work)"); |
1027 | } | 1079 | } |
1028 | 1080 | ||
@@ -1030,5 +1082,5 @@ QString Addressee::businessFaxLabel() | |||
1030 | QString Addressee::carPhoneLabel() | 1082 | QString Addressee::carPhoneLabel() |
1031 | { | 1083 | { |
1032 | return i18n("Car Phone"); | 1084 | return i18n("Mobile2 (work)"); |
1033 | } | 1085 | } |
1034 | 1086 | ||
@@ -1653,4 +1705,14 @@ PhoneNumber::List Addressee::phoneNumbers() const | |||
1653 | } | 1705 | } |
1654 | 1706 | ||
1707 | int Addressee::hasPhoneNumberType( int type ) | ||
1708 | { | ||
1709 | int retval = 0; | ||
1710 | PhoneNumber::List::ConstIterator it; | ||
1711 | for( it = mData->phoneNumbers.begin(); it != mData->phoneNumbers.end(); ++it ) { | ||
1712 | if ( (*it).type() == type ) | ||
1713 | ++retval; | ||
1714 | } | ||
1715 | return retval; | ||
1716 | } | ||
1655 | PhoneNumber::List Addressee::phoneNumbers( int type ) const | 1717 | PhoneNumber::List Addressee::phoneNumbers( int type ) const |
1656 | { | 1718 | { |
diff --git a/kabc/addressee.h b/kabc/addressee.h index d1c07cb..0c488eb 100644 --- a/kabc/addressee.h +++ b/kabc/addressee.h | |||
@@ -123,4 +123,6 @@ class Addressee | |||
123 | void simplifyPhoneNumbers(); | 123 | void simplifyPhoneNumbers(); |
124 | void simplifyPhoneNumberTypes(); | 124 | void simplifyPhoneNumberTypes(); |
125 | void makePhoneNumbersOLcompatible(); | ||
126 | int hasPhoneNumberType( int type ); | ||
125 | bool removeVoice(); | 127 | bool removeVoice(); |
126 | bool containsAdr(const Addressee& addr ); | 128 | bool containsAdr(const Addressee& addr ); |
diff --git a/kabc/field.cpp b/kabc/field.cpp index fd51026..20885de 100644 --- a/kabc/field.cpp +++ b/kabc/field.cpp | |||
@@ -290,13 +290,13 @@ QString Field::value( const KABC::Addressee &a ) | |||
290 | return a.categories().join(","); | 290 | return a.categories().join(","); |
291 | case FieldImpl::HomePhone: | 291 | case FieldImpl::HomePhone: |
292 | return a.phoneNumber( PhoneNumber::Home ).number(); | 292 | return a.phoneNumber( PhoneNumber::Home| PhoneNumber::Pref ).number(); |
293 | case FieldImpl::BusinessPhone: | 293 | case FieldImpl::BusinessPhone: |
294 | return a.phoneNumber( PhoneNumber::Work ).number(); | 294 | return a.phoneNumber( PhoneNumber::Work| PhoneNumber::Pref ).number(); |
295 | case FieldImpl::MobilePhone: | 295 | case FieldImpl::MobilePhone: |
296 | return a.phoneNumber( PhoneNumber::Cell ).number(); | 296 | return a.phoneNumber( PhoneNumber::Cell ).number(); |
297 | case FieldImpl::MobileWorkPhone: | 297 | case FieldImpl::MobileWorkPhone: |
298 | return a.phoneNumber( PhoneNumber::Cell | PhoneNumber::Work ).number(); | 298 | return a.phoneNumber( PhoneNumber::Car ).number(); |
299 | case FieldImpl::MobileHomePhone: | 299 | case FieldImpl::MobileHomePhone: |
300 | return a.phoneNumber( PhoneNumber::Cell | PhoneNumber::Home ).number(); | 300 | return a.phoneNumber( PhoneNumber::Cell ).number(); |
301 | case FieldImpl::HomeFax: | 301 | case FieldImpl::HomeFax: |
302 | return a.phoneNumber( PhoneNumber::Home | PhoneNumber::Fax ).number(); | 302 | return a.phoneNumber( PhoneNumber::Home | PhoneNumber::Fax ).number(); |
@@ -310,5 +310,5 @@ QString Field::value( const KABC::Addressee &a ) | |||
310 | return a.phoneNumber( PhoneNumber::Pager ).number(); | 310 | return a.phoneNumber( PhoneNumber::Pager ).number(); |
311 | case FieldImpl::Sip: | 311 | case FieldImpl::Sip: |
312 | return a.phoneNumber( PhoneNumber::Sip ).number(); | 312 | return a.phoneNumber( PhoneNumber::Pcs | PhoneNumber::Pref ).number(); |
313 | case FieldImpl::HomeAddressStreet: | 313 | case FieldImpl::HomeAddressStreet: |
314 | return a.address( Address::Home ).street(); | 314 | return a.address( Address::Home ).street(); |
diff --git a/kabc/phonenumber.cpp b/kabc/phonenumber.cpp index 4c6231d..0d46ba7 100644 --- a/kabc/phonenumber.cpp +++ b/kabc/phonenumber.cpp | |||
@@ -66,5 +66,60 @@ bool PhoneNumber::operator!=( const PhoneNumber &p ) const | |||
66 | return !( p == *this ); | 66 | return !( p == *this ); |
67 | } | 67 | } |
68 | void PhoneNumber::makeCompat() | ||
69 | { | ||
70 | mType = getCompatType( mType ); | ||
71 | } | ||
72 | int PhoneNumber::getCompatType( int type ) | ||
73 | { | ||
74 | |||
75 | if ((type & Cell) == Cell) { | ||
76 | if ((type & Work) == Work) | ||
77 | return Car; | ||
78 | return Cell; | ||
79 | } | ||
80 | if ((type & Home) == Home) { | ||
81 | if ((type & Pref) == Pref) | ||
82 | return (Home | Pref); | ||
83 | if ((type & Fax) == Fax) | ||
84 | return (Home | Fax); | ||
85 | return (Home); | ||
86 | } | ||
87 | if ((type & Work) == Work) { | ||
88 | if ((type & Pref) == Pref) | ||
89 | return (Work| Pref); | ||
90 | if ((type & Fax) == Fax) | ||
91 | return (Fax |Work); | ||
92 | if ((type & Msg) == Msg) { | ||
93 | if ((type & Voice) == Voice) | ||
94 | return ( Msg | Voice |Work); | ||
95 | return ( Msg | Work); | ||
96 | } | ||
97 | return Work; | ||
98 | } | ||
99 | if ((type & Pcs) == Pcs) { | ||
100 | if ((type & Pref) == Pref) | ||
101 | return Pcs | Pref; | ||
102 | return Pcs; | ||
103 | } | ||
104 | if ((type & Car) == Car) | ||
105 | return Car; | ||
106 | if ((type & Pager) == Pager) | ||
107 | return Pager; | ||
108 | if ((type & Isdn) == Isdn) | ||
109 | return Isdn; | ||
110 | if ((type & Video) == Video) | ||
111 | return Video; | ||
112 | |||
113 | if ((type & Msg) == Msg) | ||
114 | return Msg; | ||
115 | if ((type & Fax) == Fax) | ||
116 | return Fax; | ||
117 | |||
118 | if ((type & Pref) == Pref) | ||
119 | return Pref; | ||
68 | 120 | ||
121 | return Voice; | ||
122 | |||
123 | } | ||
69 | bool PhoneNumber::simplifyNumber() | 124 | bool PhoneNumber::simplifyNumber() |
70 | { | 125 | { |
@@ -164,5 +219,5 @@ PhoneNumber::TypeList PhoneNumber::typeList() | |||
164 | 219 | ||
165 | list << Home << Work << Msg << Pref << Voice << Fax << Cell << Video | 220 | list << Home << Work << Msg << Pref << Voice << Fax << Cell << Video |
166 | << Bbs << Modem << Car << Isdn << Pcs << Pager << Sip; | 221 | << Bbs << Modem << Car << Isdn << Pcs << Pager; |
167 | 222 | ||
168 | return list; | 223 | return list; |
@@ -176,6 +231,58 @@ QString PhoneNumber::label( int type ) | |||
176 | QString PhoneNumber::typeLabel( int type ) | 231 | QString PhoneNumber::typeLabel( int type ) |
177 | { | 232 | { |
178 | QString typeString; | 233 | if ((type & Cell) == Cell) |
234 | return i18n("Mobile"); | ||
235 | if ((type & Home) == Home) { | ||
236 | if ((type & Pref) == Pref) | ||
237 | return i18n("Home"); | ||
238 | if ((type & Fax) == Fax) | ||
239 | return i18n("Fax (Home)"); | ||
240 | return i18n("Home2"); | ||
241 | } | ||
179 | 242 | ||
243 | if ((type & Work) == Work) { | ||
244 | if ((type & Pref) == Pref) | ||
245 | return i18n("Work"); | ||
246 | if ((type & Fax) == Fax) | ||
247 | return i18n("Fax (Work)"); | ||
248 | if ((type & Msg) == Msg) { | ||
249 | if ((type & Voice) == Voice) | ||
250 | return i18n("Assistent"); | ||
251 | return i18n("Company"); | ||
252 | } | ||
253 | return i18n("Work2"); | ||
254 | } | ||
255 | if ((type & Pcs) == Pcs) { | ||
256 | if ((type & Pref) == Pref) | ||
257 | return i18n("SIP"); | ||
258 | return i18n("VoIP"); | ||
259 | } | ||
260 | if ((type & Car) == Car) | ||
261 | return i18n("Mobile2 (Work)"); | ||
262 | if ((type & Pager) == Pager) | ||
263 | return i18n("Pager"); | ||
264 | if ((type & Isdn) == Isdn) | ||
265 | return i18n("ISDN"); | ||
266 | if ((type & Video) == Video) | ||
267 | return i18n("Video"); | ||
268 | |||
269 | if ((type & Msg) == Msg) | ||
270 | return i18n("Callback"); | ||
271 | if ((type & Fax) == Fax) | ||
272 | return i18n("Fax (Other)"); | ||
273 | |||
274 | if ((type & Pref) == Pref) | ||
275 | return i18n("Primary"); | ||
276 | |||
277 | |||
278 | return i18n("Other"); | ||
279 | |||
280 | |||
281 | #if 0 | ||
282 | |||
283 | |||
284 | |||
285 | QString typeString; | ||
286 | |||
180 | 287 | ||
181 | if ((type & Cell) == Cell) | 288 | if ((type & Cell) == Cell) |
@@ -221,4 +328,5 @@ QString PhoneNumber::typeLabel( int type ) | |||
221 | 328 | ||
222 | return typeString.stripWhiteSpace(); | 329 | return typeString.stripWhiteSpace(); |
330 | #endif | ||
223 | } | 331 | } |
224 | 332 | ||
diff --git a/kabc/phonenumber.h b/kabc/phonenumber.h index 2d4d3e0..b9d6a17 100644 --- a/kabc/phonenumber.h +++ b/kabc/phonenumber.h | |||
@@ -65,9 +65,8 @@ class PhoneNumber | |||
65 | @li @p Pcs - Personal Communication Service | 65 | @li @p Pcs - Personal Communication Service |
66 | @li @p Pager - Pager | 66 | @li @p Pager - Pager |
67 | @li @p SIP - VoIP | ||
68 | */ | 67 | */ |
69 | enum Types { Home = 1, Work = 2, Msg = 4, Pref = 8, Voice = 16, Fax = 32, | 68 | enum Types { Home = 1, Work = 2, Msg = 4, Pref = 8, Voice = 16, Fax = 32, |
70 | Cell = 64, Video = 128, Bbs = 256, Modem = 512, Car = 1024, | 69 | Cell = 64, Video = 128, Bbs = 256, Modem = 512, Car = 1024, |
71 | Isdn = 2048, Pcs = 4096, Pager = 8192, Sip = 16384 }; | 70 | Isdn = 2048, Pcs = 4096, Pager = 8192 }; |
72 | 71 | ||
73 | /** | 72 | /** |
@@ -152,4 +151,6 @@ class PhoneNumber | |||
152 | bool simplifyNumber(); | 151 | bool simplifyNumber(); |
153 | void simplifyType(); | 152 | void simplifyType(); |
153 | void makeCompat(); | ||
154 | int getCompatType( int type ); | ||
154 | 155 | ||
155 | private: | 156 | private: |
diff --git a/kabc/vcard21parser.cpp b/kabc/vcard21parser.cpp index 277de22..60d02b8 100644 --- a/kabc/vcard21parser.cpp +++ b/kabc/vcard21parser.cpp | |||
@@ -171,6 +171,5 @@ bool VCardLineX::isValid() const | |||
171 | qualifiers.contains(VCARD_TEL_ISDN) || | 171 | qualifiers.contains(VCARD_TEL_ISDN) || |
172 | qualifiers.contains(VCARD_TEL_VIDEO) || | 172 | qualifiers.contains(VCARD_TEL_VIDEO) || |
173 | qualifiers.contains(VCARD_TEL_PCS) || | 173 | qualifiers.contains(VCARD_TEL_PCS) |
174 | qualifiers.contains(VCARD_TEL_SIP) | ||
175 | ) ) | 174 | ) ) |
176 | return true; | 175 | return true; |
@@ -280,7 +279,7 @@ KABC::Addressee VCard21Parser::readFromString( const QString &data) | |||
280 | type |= PhoneNumber::Work; | 279 | type |= PhoneNumber::Work; |
281 | if ( (*i).qualifiers.contains( VCARD_TEL_PREF ) ) | 280 | if ( (*i).qualifiers.contains( VCARD_TEL_PREF ) ) |
282 | type |= PhoneNumber::Pref; | 281 | type |= PhoneNumber::Pref; |
283 | // if ( (*i).qualifiers.contains( VCARD_TEL_VOICE ) ) | 282 | if ( (*i).qualifiers.contains( VCARD_TEL_VOICE ) ) |
284 | // type |= PhoneNumber::Voice; | 283 | type |= PhoneNumber::Voice; |
285 | if ( (*i).qualifiers.contains( VCARD_TEL_FAX ) ) | 284 | if ( (*i).qualifiers.contains( VCARD_TEL_FAX ) ) |
286 | type |= PhoneNumber::Fax; | 285 | type |= PhoneNumber::Fax; |
@@ -303,11 +302,10 @@ KABC::Addressee VCard21Parser::readFromString( const QString &data) | |||
303 | if ( (*i).qualifiers.contains( VCARD_TEL_PCS ) ) | 302 | if ( (*i).qualifiers.contains( VCARD_TEL_PCS ) ) |
304 | type |= PhoneNumber::Pcs; | 303 | type |= PhoneNumber::Pcs; |
305 | if ( (*i).qualifiers.contains( VCARD_TEL_SIP ) ) | 304 | |
306 | type |= PhoneNumber::Sip; | ||
307 | } | 305 | } |
308 | addressee.insertPhoneNumber( PhoneNumber( (*i).parameters[ 0 ], type ) ); | 306 | addressee.insertPhoneNumber( PhoneNumber( (*i).parameters[ 0 ], type ) ); |
309 | } | 307 | } |
310 | } | 308 | } |
311 | 309 | addressee.makePhoneNumbersOLcompatible(); | |
312 | //set the addressee's addresses | 310 | //set the addressee's addresses |
313 | for ( QValueListIterator<VCardLineX> i = mVCard->_vcdata->begin();i != mVCard->_vcdata->end(); ++i ) { | 311 | for ( QValueListIterator<VCardLineX> i = mVCard->_vcdata->begin();i != mVCard->_vcdata->end(); ++i ) { |
diff --git a/kabc/vcardformatimpl.cpp b/kabc/vcardformatimpl.cpp index ec5ed80..26fd4f0 100644 --- a/kabc/vcardformatimpl.cpp +++ b/kabc/vcardformatimpl.cpp | |||
@@ -282,5 +282,5 @@ bool VCardFormatImpl::loadAddressee( Addressee& addressee, VCard *v ) | |||
282 | } | 282 | } |
283 | } | 283 | } |
284 | 284 | addressee.makePhoneNumbersOLcompatible(); | |
285 | return true; | 285 | return true; |
286 | } | 286 | } |
@@ -596,5 +596,4 @@ void VCardFormatImpl::addTelephoneValue( VCard *v, const PhoneNumber &p ) | |||
596 | if( p.type() & PhoneNumber::Pcs ) params.append( new Param( "TYPE", "pcs" ) ); | 596 | if( p.type() & PhoneNumber::Pcs ) params.append( new Param( "TYPE", "pcs" ) ); |
597 | if( p.type() & PhoneNumber::Pager ) params.append( new Param( "TYPE", "pager" ) ); | 597 | if( p.type() & PhoneNumber::Pager ) params.append( new Param( "TYPE", "pager" ) ); |
598 | if( p.type() & PhoneNumber::Sip ) params.append( new Param( "TYPE", "sip" ) ); | ||
599 | cl.setParamList( params ); | 598 | cl.setParamList( params ); |
600 | 599 | ||
@@ -629,5 +628,4 @@ PhoneNumber VCardFormatImpl::readTelephoneValue( ContentLine *cl ) | |||
629 | else if ( tmpStr == "pcs" ) type |= PhoneNumber::Pcs; | 628 | else if ( tmpStr == "pcs" ) type |= PhoneNumber::Pcs; |
630 | else if ( tmpStr == "pager" ) type |= PhoneNumber::Pager; | 629 | else if ( tmpStr == "pager" ) type |= PhoneNumber::Pager; |
631 | else if ( tmpStr == "sip" ) type |= PhoneNumber::Sip; | ||
632 | } | 630 | } |
633 | } | 631 | } |
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 | |||
@@ -577,5 +577,5 @@ Addressee::List VCardTool::parseVCards( const QString& vcard ) | |||
577 | } | 577 | } |
578 | } | 578 | } |
579 | 579 | addr.makePhoneNumbersOLcompatible(); | |
580 | addrList.append( addr ); | 580 | addrList.append( addr ); |
581 | } | 581 | } |