author | eilers <eilers> | 2004-11-19 11:27:04 (UTC) |
---|---|---|
committer | eilers <eilers> | 2004-11-19 11:27:04 (UTC) |
commit | 58759f9d1219ecb5eddc9c8c19f89004ee2a942a (patch) (unidiff) | |
tree | 6f34792623e60de8b73d0de52075864675980944 | |
parent | 362e353e4ee43a5aa37fd4c264ad0b40bbd0098b (diff) | |
download | opie-58759f9d1219ecb5eddc9c8c19f89004ee2a942a.zip opie-58759f9d1219ecb5eddc9c8c19f89004ee2a942a.tar.gz opie-58759f9d1219ecb5eddc9c8c19f89004ee2a942a.tar.bz2 |
Make VCARD importer more stable if something parsed which was not expected.
Thus, we are now able to import VCards from Evolution 2 and Apple Addressbook..
This is fixing issue #1479
-rw-r--r-- | libopie2/opiepim/backend/ocontactaccessbackend_vcard.cpp | 36 | ||||
-rw-r--r-- | libopie2/opiepim/backend/ocontactaccessbackend_vcard.h | 7 |
2 files changed, 36 insertions, 7 deletions
diff --git a/libopie2/opiepim/backend/ocontactaccessbackend_vcard.cpp b/libopie2/opiepim/backend/ocontactaccessbackend_vcard.cpp index 43e530a..5bb21c7 100644 --- a/libopie2/opiepim/backend/ocontactaccessbackend_vcard.cpp +++ b/libopie2/opiepim/backend/ocontactaccessbackend_vcard.cpp | |||
@@ -48,7 +48,9 @@ namespace Opie { | |||
48 | 48 | ||
49 | OPimContactAccessBackend_VCard::OPimContactAccessBackend_VCard ( const QString& , const QString& filename ): | 49 | OPimContactAccessBackend_VCard::OPimContactAccessBackend_VCard ( const QString& , const QString& filename ): |
50 | m_dirty( false ), | 50 | m_dirty( false ), |
51 | m_file( filename ) | 51 | m_file( filename ), |
52 | version_major( 1 ), | ||
53 | version_minor( 0 ) | ||
52 | { | 54 | { |
53 | load(); | 55 | load(); |
54 | } | 56 | } |
@@ -186,22 +188,30 @@ bool OPimContactAccessBackend_VCard::wasChangedExternally() | |||
186 | OPimContact OPimContactAccessBackend_VCard::parseVObject( VObject *obj ) | 188 | OPimContact OPimContactAccessBackend_VCard::parseVObject( VObject *obj ) |
187 | { | 189 | { |
188 | OPimContact c; | 190 | OPimContact c; |
189 | |||
190 | VObjectIterator it; | 191 | VObjectIterator it; |
191 | initPropIterator( &it, obj ); | 192 | initPropIterator( &it, obj ); |
192 | while( moreIteration( &it ) ) { | 193 | while( moreIteration( &it ) ) { |
193 | VObject *o = nextVObject( &it ); | 194 | VObject *o = nextVObject( &it ); |
194 | QCString name = vObjectName( o ); | 195 | QCString name = vObjectName( o ); |
195 | QString value = QString::fromUtf8( vObjectStringZValue( o ) ); | 196 | QString value = QString::fromUtf8( vObjectStringZValue( o ) ); |
196 | odebug << "(1)Read: %s" << QString( value ).latin1() << oendl; | 197 | odebug << "(1)Read: " << name << " " << QString( value ).latin1() << oendl; |
197 | if ( name == VCNameProp ) { | 198 | if ( name == VCVersionProp ) { |
199 | |||
200 | odebug << "Version: " << value << oendl; | ||
201 | QStringList version = QStringList::split( ".", value ); | ||
202 | version_major = version[0].toUInt(); | ||
203 | version_minor = version[1].toUInt(); | ||
204 | odebug << "Major: "<< version_major << " Minor: " << version_minor << oendl; | ||
205 | |||
206 | } | ||
207 | else if ( name == VCNameProp ) { | ||
198 | VObjectIterator nit; | 208 | VObjectIterator nit; |
199 | initPropIterator( &nit, o ); | 209 | initPropIterator( &nit, o ); |
200 | while( moreIteration( &nit ) ) { | 210 | while( moreIteration( &nit ) ) { |
201 | VObject *o = nextVObject( &nit ); | 211 | VObject *o = nextVObject( &nit ); |
202 | QCString name = vObjectTypeInfo( o ); | 212 | QCString name = vObjectTypeInfo( o ); |
203 | QString value = QString::fromUtf8( vObjectStringZValue( o ) ); | 213 | QString value = QString::fromUtf8( vObjectStringZValue( o ) ); |
204 | odebug << "(2)Read: %s" << value.latin1() << oendl; | 214 | odebug << "Nametype is: "<< name << " Value: " << value.latin1() << oendl; |
205 | if ( name == VCNamePrefixesProp ) | 215 | if ( name == VCNamePrefixesProp ) |
206 | c.setTitle( value ); | 216 | c.setTitle( value ); |
207 | else if ( name == VCNameSuffixesProp ) | 217 | else if ( name == VCNameSuffixesProp ) |
@@ -226,8 +236,9 @@ OPimContact OPimContactAccessBackend_VCard::parseVObject( VObject *obj ) | |||
226 | initPropIterator( &nit, o ); | 236 | initPropIterator( &nit, o ); |
227 | while( moreIteration( &nit ) ) { | 237 | while( moreIteration( &nit ) ) { |
228 | VObject *o = nextVObject( &nit ); | 238 | VObject *o = nextVObject( &nit ); |
229 | QCString name = vObjectName( o ); | 239 | QCString name = vObjectTypeInfo( o ); |
230 | QString value = QString::fromUtf8( vObjectStringZValue( o ) ); | 240 | QString value = QString::fromUtf8( vObjectStringZValue( o ) ); |
241 | odebug << "AddressType is: "<< name << " Value: " << value.latin1() << oendl; | ||
231 | if ( name == VCHomeProp ) | 242 | if ( name == VCHomeProp ) |
232 | work = FALSE; | 243 | work = FALSE; |
233 | else if ( name == VCWorkProp ) | 244 | else if ( name == VCWorkProp ) |
@@ -274,6 +285,7 @@ OPimContact OPimContactAccessBackend_VCard::parseVObject( VObject *obj ) | |||
274 | while( moreIteration( &nit ) ) { | 285 | while( moreIteration( &nit ) ) { |
275 | VObject *o = nextVObject( &nit ); | 286 | VObject *o = nextVObject( &nit ); |
276 | QCString name = vObjectTypeInfo( o ); | 287 | QCString name = vObjectTypeInfo( o ); |
288 | odebug << "Telephonetype is: "<< name << " Value: " << value.latin1() << oendl; | ||
277 | if ( name == VCHomeProp ) | 289 | if ( name == VCHomeProp ) |
278 | type |= HOME; | 290 | type |= HOME; |
279 | else if ( name == VCWorkProp ) | 291 | else if ( name == VCWorkProp ) |
@@ -288,6 +300,8 @@ OPimContact OPimContactAccessBackend_VCard::parseVObject( VObject *obj ) | |||
288 | type |= PAGER; | 300 | type |= PAGER; |
289 | else if ( name == VCPreferredProp ) | 301 | else if ( name == VCPreferredProp ) |
290 | ; | 302 | ; |
303 | else if ( name.left( 2 ) == "X-" || name.left( 2 ) == "x-" ) | ||
304 | ; // Ignore | ||
291 | else | 305 | else |
292 | type |= UNKNOWN; | 306 | type |= UNKNOWN; |
293 | } | 307 | } |
@@ -297,6 +311,8 @@ OPimContact OPimContactAccessBackend_VCard::parseVObject( VObject *obj ) | |||
297 | if ( ( type & (VOICE|CELL|FAX|PAGER) ) == 0 ) // default | 311 | if ( ( type & (VOICE|CELL|FAX|PAGER) ) == 0 ) // default |
298 | type |= VOICE; | 312 | type |= VOICE; |
299 | 313 | ||
314 | odebug << "value %s %d" << value.data() << type << oendl; | ||
315 | |||
300 | if ( (type & (VOICE|HOME) ) == (VOICE|HOME) && (type & (CELL|HOME) ) != (CELL|HOME) ) | 316 | if ( (type & (VOICE|HOME) ) == (VOICE|HOME) && (type & (CELL|HOME) ) != (CELL|HOME) ) |
301 | c.setHomePhone( value ); | 317 | c.setHomePhone( value ); |
302 | if ( ( type & (FAX|HOME) ) == (FAX|HOME) ) | 318 | if ( ( type & (FAX|HOME) ) == (FAX|HOME) ) |
@@ -321,11 +337,15 @@ OPimContact OPimContactAccessBackend_VCard::parseVObject( VObject *obj ) | |||
321 | while( moreIteration( &nit ) ) { | 337 | while( moreIteration( &nit ) ) { |
322 | VObject *o = nextVObject( &nit ); | 338 | VObject *o = nextVObject( &nit ); |
323 | QCString name = vObjectTypeInfo( o ); | 339 | QCString name = vObjectTypeInfo( o ); |
340 | odebug << "Emailtype is: "<< name << " Value: " << value.latin1() << oendl; | ||
324 | if ( name != VCInternetProp && name != VCHomeProp && | 341 | if ( name != VCInternetProp && name != VCHomeProp && |
325 | name != VCWorkProp && | 342 | name != VCWorkProp && |
326 | name != VCPreferredProp ) | 343 | name != VCPreferredProp && |
344 | name.left( 2 ) != "X-" && name.left( 2 ) != "x-" ){ | ||
327 | // ### preffered should map to default email | 345 | // ### preffered should map to default email |
328 | valid = FALSE; | 346 | valid = FALSE; |
347 | odebug << "Email was detected as invalid!" << oendl; | ||
348 | } | ||
329 | } | 349 | } |
330 | if ( valid ) { | 350 | if ( valid ) { |
331 | c.insertEmail( email ); | 351 | c.insertEmail( email ); |
@@ -582,4 +602,6 @@ VObject* OPimContactAccessBackend_VCard::safeAddProp( VObject *o, const char *pr | |||
582 | return ret; | 602 | return ret; |
583 | } | 603 | } |
584 | 604 | ||
605 | |||
606 | |||
585 | } | 607 | } |
diff --git a/libopie2/opiepim/backend/ocontactaccessbackend_vcard.h b/libopie2/opiepim/backend/ocontactaccessbackend_vcard.h index 1faf747..b734530 100644 --- a/libopie2/opiepim/backend/ocontactaccessbackend_vcard.h +++ b/libopie2/opiepim/backend/ocontactaccessbackend_vcard.h | |||
@@ -75,6 +75,13 @@ private: | |||
75 | bool m_dirty : 1; | 75 | bool m_dirty : 1; |
76 | QString m_file; | 76 | QString m_file; |
77 | QMap<int, OPimContact> m_map; | 77 | QMap<int, OPimContact> m_map; |
78 | |||
79 | /** | ||
80 | * Version of parsed VCard | ||
81 | */ | ||
82 | uint version_major; | ||
83 | uint version_minor; | ||
84 | |||
78 | }; | 85 | }; |
79 | 86 | ||
80 | } | 87 | } |