summaryrefslogtreecommitdiff
authoreilers <eilers>2003-01-13 15:49:31 (UTC)
committer eilers <eilers>2003-01-13 15:49:31 (UTC)
commit6bae3504f8eacd604bc6d543d3eb09f996221dcc (patch) (unidiff)
tree14032f862c724319b7b538e054cd53c11994bb4d
parent01f7b3b512bbb729ac44808748365699748f3d4c (diff)
downloadopie-6bae3504f8eacd604bc6d543d3eb09f996221dcc.zip
opie-6bae3504f8eacd604bc6d543d3eb09f996221dcc.tar.gz
opie-6bae3504f8eacd604bc6d543d3eb09f996221dcc.tar.bz2
Fixing crash when businesscard.vcf is missing..
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libopie/pim/ocontactaccessbackend_vcard.cpp13
-rw-r--r--libopie2/opiepim/backend/ocontactaccessbackend_vcard.cpp13
2 files changed, 22 insertions, 4 deletions
diff --git a/libopie/pim/ocontactaccessbackend_vcard.cpp b/libopie/pim/ocontactaccessbackend_vcard.cpp
index ca9e410..1dc6b48 100644
--- a/libopie/pim/ocontactaccessbackend_vcard.cpp
+++ b/libopie/pim/ocontactaccessbackend_vcard.cpp
@@ -1,252 +1,261 @@
1/* 1/*
2 * VCard Backend for the OPIE-Contact Database. 2 * VCard Backend for the OPIE-Contact Database.
3 * 3 *
4 * Copyright (C) 2000 Trolltech AS. All rights reserved. 4 * Copyright (C) 2000 Trolltech AS. All rights reserved.
5 * Copyright (c) 2002 by Stefan Eilers (Eilers.Stefan@epost.de) 5 * Copyright (c) 2002 by Stefan Eilers (Eilers.Stefan@epost.de)
6 * 6 *
7 * ===================================================================== 7 * =====================================================================
8 *This program is free software; you can redistribute it and/or 8 *This program is free software; you can redistribute it and/or
9 *modify it under the terms of the GNU Library General Public 9 *modify it under the terms of the GNU Library General Public
10 * License as published by the Free Software Foundation; either 10 * License as published by the Free Software Foundation; either
11 * version 2 of the License, or (at your option) any later version. 11 * version 2 of the License, or (at your option) any later version.
12 * ===================================================================== 12 * =====================================================================
13 * ToDo: 13 * ToDo:
14 * 14 *
15 * ===================================================================== 15 * =====================================================================
16 * Version: $Id$ 16 * Version: $Id$
17 * ===================================================================== 17 * =====================================================================
18 * History: 18 * History:
19 * $Log$ 19 * $Log$
20 * Revision 1.6 2003/01/13 15:49:31 eilers
21 * Fixing crash when businesscard.vcf is missing..
22 *
20 * Revision 1.5 2002/12/07 13:26:22 eilers 23 * Revision 1.5 2002/12/07 13:26:22 eilers
21 * Fixing bug in storing anniversary.. 24 * Fixing bug in storing anniversary..
22 * 25 *
23 * Revision 1.4 2002/11/13 14:14:51 eilers 26 * Revision 1.4 2002/11/13 14:14:51 eilers
24 * Added sorted for Contacts.. 27 * Added sorted for Contacts..
25 * 28 *
26 * Revision 1.3 2002/11/11 16:41:09 kergoth 29 * Revision 1.3 2002/11/11 16:41:09 kergoth
27 * no default arguments in implementation 30 * no default arguments in implementation
28 * 31 *
29 * Revision 1.2 2002/11/10 15:41:53 eilers 32 * Revision 1.2 2002/11/10 15:41:53 eilers
30 * Bugfixes.. 33 * Bugfixes..
31 * 34 *
32 * Revision 1.1 2002/11/09 14:34:52 eilers 35 * Revision 1.1 2002/11/09 14:34:52 eilers
33 * Added VCard Backend. 36 * Added VCard Backend.
34 * 37 *
35 */ 38 */
36#include "ocontactaccessbackend_vcard.h" 39#include "ocontactaccessbackend_vcard.h"
37#include "../../library/backend/vobject_p.h" 40#include "../../library/backend/vobject_p.h"
38#include "../../library/backend/qfiledirect_p.h" 41#include "../../library/backend/qfiledirect_p.h"
39 42
40#include <qpe/timeconversion.h> 43#include <qpe/timeconversion.h>
41 44
42#include <qfile.h> 45#include <qfile.h>
43 46
44OContactAccessBackend_VCard::OContactAccessBackend_VCard ( QString , QString filename ): 47OContactAccessBackend_VCard::OContactAccessBackend_VCard ( QString , QString filename ):
45 m_dirty( false ), 48 m_dirty( false ),
46 m_file( filename ) 49 m_file( filename )
47{ 50{
48 load(); 51 load();
49} 52}
50 53
51 54
52bool OContactAccessBackend_VCard::load () 55bool OContactAccessBackend_VCard::load ()
53{ 56{
54 m_map.clear(); 57 m_map.clear();
55 m_dirty = false; 58 m_dirty = false;
56 59
57 VObject* obj = 0l; 60 VObject* obj = 0l;
58 obj = Parse_MIME_FromFileName( QFile::encodeName(m_file).data() ); 61
59 if ( !obj ) 62 if ( QFile( m_file ).exists() ){
63 obj = Parse_MIME_FromFileName( QFile::encodeName(m_file).data() );
64 if ( !obj )
65 return false;
66 }else{
67 qWarning("File \"%s\" not found !", m_file.latin1() );
60 return false; 68 return false;
69 }
61 70
62 while ( obj ) { 71 while ( obj ) {
63 OContact con = parseVObject( obj ); 72 OContact con = parseVObject( obj );
64 /* 73 /*
65 * if uid is 0 assign a new one 74 * if uid is 0 assign a new one
66 * this at least happens on 75 * this at least happens on
67 * Nokia6210 76 * Nokia6210
68 */ 77 */
69 if ( con.uid() == 0 ){ 78 if ( con.uid() == 0 ){
70 con.setUid( 1 ); 79 con.setUid( 1 );
71 qWarning("assigned new uid %d",con.uid() ); 80 qWarning("assigned new uid %d",con.uid() );
72 } 81 }
73 82
74 m_map.insert( con.uid(), con ); 83 m_map.insert( con.uid(), con );
75 84
76 VObject *t = obj; 85 VObject *t = obj;
77 obj = nextVObjectInList(obj); 86 obj = nextVObjectInList(obj);
78 cleanVObject( t ); 87 cleanVObject( t );
79 } 88 }
80 89
81 return true; 90 return true;
82 91
83} 92}
84bool OContactAccessBackend_VCard::reload() 93bool OContactAccessBackend_VCard::reload()
85{ 94{
86 return load(); 95 return load();
87} 96}
88bool OContactAccessBackend_VCard::save() 97bool OContactAccessBackend_VCard::save()
89{ 98{
90 if (!m_dirty ) 99 if (!m_dirty )
91 return true; 100 return true;
92 101
93 QFileDirect file( m_file ); 102 QFileDirect file( m_file );
94 if (!file.open(IO_WriteOnly ) ) 103 if (!file.open(IO_WriteOnly ) )
95 return false; 104 return false;
96 105
97 VObject *obj; 106 VObject *obj;
98 obj = newVObject( VCCalProp ); 107 obj = newVObject( VCCalProp );
99 addPropValue( obj, VCVersionProp, "1.0" ); 108 addPropValue( obj, VCVersionProp, "1.0" );
100 109
101 VObject *vo; 110 VObject *vo;
102 for(QMap<int, OContact>::ConstIterator it=m_map.begin(); it !=m_map.end(); ++it ){ 111 for(QMap<int, OContact>::ConstIterator it=m_map.begin(); it !=m_map.end(); ++it ){
103 vo = createVObject( *it ); 112 vo = createVObject( *it );
104 writeVObject( file.directHandle() , vo ); 113 writeVObject( file.directHandle() , vo );
105 cleanVObject( vo ); 114 cleanVObject( vo );
106 } 115 }
107 cleanStrTbl(); 116 cleanStrTbl();
108 117
109 m_dirty = false; 118 m_dirty = false;
110 return true; 119 return true;
111 120
112 121
113} 122}
114void OContactAccessBackend_VCard::clear () 123void OContactAccessBackend_VCard::clear ()
115{ 124{
116 m_map.clear(); 125 m_map.clear();
117 m_dirty = true; // ??? sure ? (se) 126 m_dirty = true; // ??? sure ? (se)
118} 127}
119 128
120bool OContactAccessBackend_VCard::add ( const OContact& newcontact ) 129bool OContactAccessBackend_VCard::add ( const OContact& newcontact )
121{ 130{
122 m_map.insert( newcontact.uid(), newcontact ); 131 m_map.insert( newcontact.uid(), newcontact );
123 m_dirty = true; 132 m_dirty = true;
124 return true; 133 return true;
125} 134}
126 135
127bool OContactAccessBackend_VCard::remove ( int uid ) 136bool OContactAccessBackend_VCard::remove ( int uid )
128{ 137{
129 m_map.remove( uid ); 138 m_map.remove( uid );
130 m_dirty = true; 139 m_dirty = true;
131 return true; 140 return true;
132} 141}
133 142
134bool OContactAccessBackend_VCard::replace ( const OContact &contact ) 143bool OContactAccessBackend_VCard::replace ( const OContact &contact )
135{ 144{
136 m_map.replace( contact.uid(), contact ); 145 m_map.replace( contact.uid(), contact );
137 m_dirty = true; 146 m_dirty = true;
138 return true; 147 return true;
139} 148}
140 149
141OContact OContactAccessBackend_VCard::find ( int uid ) const 150OContact OContactAccessBackend_VCard::find ( int uid ) const
142{ 151{
143 return m_map[uid]; 152 return m_map[uid];
144} 153}
145 154
146QArray<int> OContactAccessBackend_VCard::allRecords() const 155QArray<int> OContactAccessBackend_VCard::allRecords() const
147{ 156{
148 QArray<int> ar( m_map.count() ); 157 QArray<int> ar( m_map.count() );
149 QMap<int, OContact>::ConstIterator it; 158 QMap<int, OContact>::ConstIterator it;
150 int i = 0; 159 int i = 0;
151 for ( it = m_map.begin(); it != m_map.end(); ++it ) { 160 for ( it = m_map.begin(); it != m_map.end(); ++it ) {
152 ar[i] = it.key(); 161 ar[i] = it.key();
153 i++; 162 i++;
154 } 163 }
155 return ar; 164 return ar;
156} 165}
157 166
158// Not implemented 167// Not implemented
159QArray<int> OContactAccessBackend_VCard::queryByExample ( const OContact&, int ) 168QArray<int> OContactAccessBackend_VCard::queryByExample ( const OContact&, int )
160{ 169{
161 QArray<int> ar(0); 170 QArray<int> ar(0);
162 return ar; 171 return ar;
163} 172}
164 173
165// Not implemented 174// Not implemented
166QArray<int> OContactAccessBackend_VCard::matchRegexp( const QRegExp& ) const 175QArray<int> OContactAccessBackend_VCard::matchRegexp( const QRegExp& ) const
167{ 176{
168 QArray<int> ar(0); 177 QArray<int> ar(0);
169 return ar; 178 return ar;
170} 179}
171 180
172const uint OContactAccessBackend_VCard::querySettings() 181const uint OContactAccessBackend_VCard::querySettings()
173{ 182{
174 return 0; // No search possible 183 return 0; // No search possible
175} 184}
176 185
177bool OContactAccessBackend_VCard::hasQuerySettings (uint ) const 186bool OContactAccessBackend_VCard::hasQuerySettings (uint ) const
178{ 187{
179 return false; // No search possible, therefore all settings invalid ;) 188 return false; // No search possible, therefore all settings invalid ;)
180} 189}
181 190
182bool OContactAccessBackend_VCard::wasChangedExternally() 191bool OContactAccessBackend_VCard::wasChangedExternally()
183{ 192{
184 return false; // Don't expect concurrent access 193 return false; // Don't expect concurrent access
185} 194}
186 195
187// Not implemented 196// Not implemented
188QArray<int> OContactAccessBackend_VCard::sorted( bool , int, int, int ) 197QArray<int> OContactAccessBackend_VCard::sorted( bool , int, int, int )
189{ 198{
190 QArray<int> ar(0); 199 QArray<int> ar(0);
191 return ar; 200 return ar;
192} 201}
193 202
194// *** Private stuff *** 203// *** Private stuff ***
195 204
196 205
197OContact OContactAccessBackend_VCard::parseVObject( VObject *obj ) 206OContact OContactAccessBackend_VCard::parseVObject( VObject *obj )
198{ 207{
199 OContact c; 208 OContact c;
200 209
201 VObjectIterator it; 210 VObjectIterator it;
202 initPropIterator( &it, obj ); 211 initPropIterator( &it, obj );
203 while( moreIteration( &it ) ) { 212 while( moreIteration( &it ) ) {
204 VObject *o = nextVObject( &it ); 213 VObject *o = nextVObject( &it );
205 QCString name = vObjectName( o ); 214 QCString name = vObjectName( o );
206 QCString value = vObjectStringZValue( o ); 215 QCString value = vObjectStringZValue( o );
207 if ( name == VCNameProp ) { 216 if ( name == VCNameProp ) {
208 VObjectIterator nit; 217 VObjectIterator nit;
209 initPropIterator( &nit, o ); 218 initPropIterator( &nit, o );
210 while( moreIteration( &nit ) ) { 219 while( moreIteration( &nit ) ) {
211 VObject *o = nextVObject( &nit ); 220 VObject *o = nextVObject( &nit );
212 QCString name = vObjectTypeInfo( o ); 221 QCString name = vObjectTypeInfo( o );
213 QString value = vObjectStringZValue( o ); 222 QString value = vObjectStringZValue( o );
214 if ( name == VCNamePrefixesProp ) 223 if ( name == VCNamePrefixesProp )
215 c.setTitle( value ); 224 c.setTitle( value );
216 else if ( name == VCNameSuffixesProp ) 225 else if ( name == VCNameSuffixesProp )
217 c.setSuffix( value ); 226 c.setSuffix( value );
218 else if ( name == VCFamilyNameProp ) 227 else if ( name == VCFamilyNameProp )
219 c.setLastName( value ); 228 c.setLastName( value );
220 else if ( name == VCGivenNameProp ) 229 else if ( name == VCGivenNameProp )
221 c.setFirstName( value ); 230 c.setFirstName( value );
222 else if ( name == VCAdditionalNamesProp ) 231 else if ( name == VCAdditionalNamesProp )
223 c.setMiddleName( value ); 232 c.setMiddleName( value );
224 } 233 }
225 } 234 }
226 else if ( name == VCAdrProp ) { 235 else if ( name == VCAdrProp ) {
227 bool work = TRUE; // default address is work address 236 bool work = TRUE; // default address is work address
228 QString street; 237 QString street;
229 QString city; 238 QString city;
230 QString region; 239 QString region;
231 QString postal; 240 QString postal;
232 QString country; 241 QString country;
233 242
234 VObjectIterator nit; 243 VObjectIterator nit;
235 initPropIterator( &nit, o ); 244 initPropIterator( &nit, o );
236 while( moreIteration( &nit ) ) { 245 while( moreIteration( &nit ) ) {
237 VObject *o = nextVObject( &nit ); 246 VObject *o = nextVObject( &nit );
238 QCString name = vObjectName( o ); 247 QCString name = vObjectName( o );
239 QString value = vObjectStringZValue( o ); 248 QString value = vObjectStringZValue( o );
240 if ( name == VCHomeProp ) 249 if ( name == VCHomeProp )
241 work = FALSE; 250 work = FALSE;
242 else if ( name == VCWorkProp ) 251 else if ( name == VCWorkProp )
243 work = TRUE; 252 work = TRUE;
244 else if ( name == VCStreetAddressProp ) 253 else if ( name == VCStreetAddressProp )
245 street = value; 254 street = value;
246 else if ( name == VCCityProp ) 255 else if ( name == VCCityProp )
247 city = value; 256 city = value;
248 else if ( name == VCRegionProp ) 257 else if ( name == VCRegionProp )
249 region = value; 258 region = value;
250 else if ( name == VCPostalCodeProp ) 259 else if ( name == VCPostalCodeProp )
251 postal = value; 260 postal = value;
252 else if ( name == VCCountryNameProp ) 261 else if ( name == VCCountryNameProp )
diff --git a/libopie2/opiepim/backend/ocontactaccessbackend_vcard.cpp b/libopie2/opiepim/backend/ocontactaccessbackend_vcard.cpp
index ca9e410..1dc6b48 100644
--- a/libopie2/opiepim/backend/ocontactaccessbackend_vcard.cpp
+++ b/libopie2/opiepim/backend/ocontactaccessbackend_vcard.cpp
@@ -1,252 +1,261 @@
1/* 1/*
2 * VCard Backend for the OPIE-Contact Database. 2 * VCard Backend for the OPIE-Contact Database.
3 * 3 *
4 * Copyright (C) 2000 Trolltech AS. All rights reserved. 4 * Copyright (C) 2000 Trolltech AS. All rights reserved.
5 * Copyright (c) 2002 by Stefan Eilers (Eilers.Stefan@epost.de) 5 * Copyright (c) 2002 by Stefan Eilers (Eilers.Stefan@epost.de)
6 * 6 *
7 * ===================================================================== 7 * =====================================================================
8 *This program is free software; you can redistribute it and/or 8 *This program is free software; you can redistribute it and/or
9 *modify it under the terms of the GNU Library General Public 9 *modify it under the terms of the GNU Library General Public
10 * License as published by the Free Software Foundation; either 10 * License as published by the Free Software Foundation; either
11 * version 2 of the License, or (at your option) any later version. 11 * version 2 of the License, or (at your option) any later version.
12 * ===================================================================== 12 * =====================================================================
13 * ToDo: 13 * ToDo:
14 * 14 *
15 * ===================================================================== 15 * =====================================================================
16 * Version: $Id$ 16 * Version: $Id$
17 * ===================================================================== 17 * =====================================================================
18 * History: 18 * History:
19 * $Log$ 19 * $Log$
20 * Revision 1.6 2003/01/13 15:49:31 eilers
21 * Fixing crash when businesscard.vcf is missing..
22 *
20 * Revision 1.5 2002/12/07 13:26:22 eilers 23 * Revision 1.5 2002/12/07 13:26:22 eilers
21 * Fixing bug in storing anniversary.. 24 * Fixing bug in storing anniversary..
22 * 25 *
23 * Revision 1.4 2002/11/13 14:14:51 eilers 26 * Revision 1.4 2002/11/13 14:14:51 eilers
24 * Added sorted for Contacts.. 27 * Added sorted for Contacts..
25 * 28 *
26 * Revision 1.3 2002/11/11 16:41:09 kergoth 29 * Revision 1.3 2002/11/11 16:41:09 kergoth
27 * no default arguments in implementation 30 * no default arguments in implementation
28 * 31 *
29 * Revision 1.2 2002/11/10 15:41:53 eilers 32 * Revision 1.2 2002/11/10 15:41:53 eilers
30 * Bugfixes.. 33 * Bugfixes..
31 * 34 *
32 * Revision 1.1 2002/11/09 14:34:52 eilers 35 * Revision 1.1 2002/11/09 14:34:52 eilers
33 * Added VCard Backend. 36 * Added VCard Backend.
34 * 37 *
35 */ 38 */
36#include "ocontactaccessbackend_vcard.h" 39#include "ocontactaccessbackend_vcard.h"
37#include "../../library/backend/vobject_p.h" 40#include "../../library/backend/vobject_p.h"
38#include "../../library/backend/qfiledirect_p.h" 41#include "../../library/backend/qfiledirect_p.h"
39 42
40#include <qpe/timeconversion.h> 43#include <qpe/timeconversion.h>
41 44
42#include <qfile.h> 45#include <qfile.h>
43 46
44OContactAccessBackend_VCard::OContactAccessBackend_VCard ( QString , QString filename ): 47OContactAccessBackend_VCard::OContactAccessBackend_VCard ( QString , QString filename ):
45 m_dirty( false ), 48 m_dirty( false ),
46 m_file( filename ) 49 m_file( filename )
47{ 50{
48 load(); 51 load();
49} 52}
50 53
51 54
52bool OContactAccessBackend_VCard::load () 55bool OContactAccessBackend_VCard::load ()
53{ 56{
54 m_map.clear(); 57 m_map.clear();
55 m_dirty = false; 58 m_dirty = false;
56 59
57 VObject* obj = 0l; 60 VObject* obj = 0l;
58 obj = Parse_MIME_FromFileName( QFile::encodeName(m_file).data() ); 61
59 if ( !obj ) 62 if ( QFile( m_file ).exists() ){
63 obj = Parse_MIME_FromFileName( QFile::encodeName(m_file).data() );
64 if ( !obj )
65 return false;
66 }else{
67 qWarning("File \"%s\" not found !", m_file.latin1() );
60 return false; 68 return false;
69 }
61 70
62 while ( obj ) { 71 while ( obj ) {
63 OContact con = parseVObject( obj ); 72 OContact con = parseVObject( obj );
64 /* 73 /*
65 * if uid is 0 assign a new one 74 * if uid is 0 assign a new one
66 * this at least happens on 75 * this at least happens on
67 * Nokia6210 76 * Nokia6210
68 */ 77 */
69 if ( con.uid() == 0 ){ 78 if ( con.uid() == 0 ){
70 con.setUid( 1 ); 79 con.setUid( 1 );
71 qWarning("assigned new uid %d",con.uid() ); 80 qWarning("assigned new uid %d",con.uid() );
72 } 81 }
73 82
74 m_map.insert( con.uid(), con ); 83 m_map.insert( con.uid(), con );
75 84
76 VObject *t = obj; 85 VObject *t = obj;
77 obj = nextVObjectInList(obj); 86 obj = nextVObjectInList(obj);
78 cleanVObject( t ); 87 cleanVObject( t );
79 } 88 }
80 89
81 return true; 90 return true;
82 91
83} 92}
84bool OContactAccessBackend_VCard::reload() 93bool OContactAccessBackend_VCard::reload()
85{ 94{
86 return load(); 95 return load();
87} 96}
88bool OContactAccessBackend_VCard::save() 97bool OContactAccessBackend_VCard::save()
89{ 98{
90 if (!m_dirty ) 99 if (!m_dirty )
91 return true; 100 return true;
92 101
93 QFileDirect file( m_file ); 102 QFileDirect file( m_file );
94 if (!file.open(IO_WriteOnly ) ) 103 if (!file.open(IO_WriteOnly ) )
95 return false; 104 return false;
96 105
97 VObject *obj; 106 VObject *obj;
98 obj = newVObject( VCCalProp ); 107 obj = newVObject( VCCalProp );
99 addPropValue( obj, VCVersionProp, "1.0" ); 108 addPropValue( obj, VCVersionProp, "1.0" );
100 109
101 VObject *vo; 110 VObject *vo;
102 for(QMap<int, OContact>::ConstIterator it=m_map.begin(); it !=m_map.end(); ++it ){ 111 for(QMap<int, OContact>::ConstIterator it=m_map.begin(); it !=m_map.end(); ++it ){
103 vo = createVObject( *it ); 112 vo = createVObject( *it );
104 writeVObject( file.directHandle() , vo ); 113 writeVObject( file.directHandle() , vo );
105 cleanVObject( vo ); 114 cleanVObject( vo );
106 } 115 }
107 cleanStrTbl(); 116 cleanStrTbl();
108 117
109 m_dirty = false; 118 m_dirty = false;
110 return true; 119 return true;
111 120
112 121
113} 122}
114void OContactAccessBackend_VCard::clear () 123void OContactAccessBackend_VCard::clear ()
115{ 124{
116 m_map.clear(); 125 m_map.clear();
117 m_dirty = true; // ??? sure ? (se) 126 m_dirty = true; // ??? sure ? (se)
118} 127}
119 128
120bool OContactAccessBackend_VCard::add ( const OContact& newcontact ) 129bool OContactAccessBackend_VCard::add ( const OContact& newcontact )
121{ 130{
122 m_map.insert( newcontact.uid(), newcontact ); 131 m_map.insert( newcontact.uid(), newcontact );
123 m_dirty = true; 132 m_dirty = true;
124 return true; 133 return true;
125} 134}
126 135
127bool OContactAccessBackend_VCard::remove ( int uid ) 136bool OContactAccessBackend_VCard::remove ( int uid )
128{ 137{
129 m_map.remove( uid ); 138 m_map.remove( uid );
130 m_dirty = true; 139 m_dirty = true;
131 return true; 140 return true;
132} 141}
133 142
134bool OContactAccessBackend_VCard::replace ( const OContact &contact ) 143bool OContactAccessBackend_VCard::replace ( const OContact &contact )
135{ 144{
136 m_map.replace( contact.uid(), contact ); 145 m_map.replace( contact.uid(), contact );
137 m_dirty = true; 146 m_dirty = true;
138 return true; 147 return true;
139} 148}
140 149
141OContact OContactAccessBackend_VCard::find ( int uid ) const 150OContact OContactAccessBackend_VCard::find ( int uid ) const
142{ 151{
143 return m_map[uid]; 152 return m_map[uid];
144} 153}
145 154
146QArray<int> OContactAccessBackend_VCard::allRecords() const 155QArray<int> OContactAccessBackend_VCard::allRecords() const
147{ 156{
148 QArray<int> ar( m_map.count() ); 157 QArray<int> ar( m_map.count() );
149 QMap<int, OContact>::ConstIterator it; 158 QMap<int, OContact>::ConstIterator it;
150 int i = 0; 159 int i = 0;
151 for ( it = m_map.begin(); it != m_map.end(); ++it ) { 160 for ( it = m_map.begin(); it != m_map.end(); ++it ) {
152 ar[i] = it.key(); 161 ar[i] = it.key();
153 i++; 162 i++;
154 } 163 }
155 return ar; 164 return ar;
156} 165}
157 166
158// Not implemented 167// Not implemented
159QArray<int> OContactAccessBackend_VCard::queryByExample ( const OContact&, int ) 168QArray<int> OContactAccessBackend_VCard::queryByExample ( const OContact&, int )
160{ 169{
161 QArray<int> ar(0); 170 QArray<int> ar(0);
162 return ar; 171 return ar;
163} 172}
164 173
165// Not implemented 174// Not implemented
166QArray<int> OContactAccessBackend_VCard::matchRegexp( const QRegExp& ) const 175QArray<int> OContactAccessBackend_VCard::matchRegexp( const QRegExp& ) const
167{ 176{
168 QArray<int> ar(0); 177 QArray<int> ar(0);
169 return ar; 178 return ar;
170} 179}
171 180
172const uint OContactAccessBackend_VCard::querySettings() 181const uint OContactAccessBackend_VCard::querySettings()
173{ 182{
174 return 0; // No search possible 183 return 0; // No search possible
175} 184}
176 185
177bool OContactAccessBackend_VCard::hasQuerySettings (uint ) const 186bool OContactAccessBackend_VCard::hasQuerySettings (uint ) const
178{ 187{
179 return false; // No search possible, therefore all settings invalid ;) 188 return false; // No search possible, therefore all settings invalid ;)
180} 189}
181 190
182bool OContactAccessBackend_VCard::wasChangedExternally() 191bool OContactAccessBackend_VCard::wasChangedExternally()
183{ 192{
184 return false; // Don't expect concurrent access 193 return false; // Don't expect concurrent access
185} 194}
186 195
187// Not implemented 196// Not implemented
188QArray<int> OContactAccessBackend_VCard::sorted( bool , int, int, int ) 197QArray<int> OContactAccessBackend_VCard::sorted( bool , int, int, int )
189{ 198{
190 QArray<int> ar(0); 199 QArray<int> ar(0);
191 return ar; 200 return ar;
192} 201}
193 202
194// *** Private stuff *** 203// *** Private stuff ***
195 204
196 205
197OContact OContactAccessBackend_VCard::parseVObject( VObject *obj ) 206OContact OContactAccessBackend_VCard::parseVObject( VObject *obj )
198{ 207{
199 OContact c; 208 OContact c;
200 209
201 VObjectIterator it; 210 VObjectIterator it;
202 initPropIterator( &it, obj ); 211 initPropIterator( &it, obj );
203 while( moreIteration( &it ) ) { 212 while( moreIteration( &it ) ) {
204 VObject *o = nextVObject( &it ); 213 VObject *o = nextVObject( &it );
205 QCString name = vObjectName( o ); 214 QCString name = vObjectName( o );
206 QCString value = vObjectStringZValue( o ); 215 QCString value = vObjectStringZValue( o );
207 if ( name == VCNameProp ) { 216 if ( name == VCNameProp ) {
208 VObjectIterator nit; 217 VObjectIterator nit;
209 initPropIterator( &nit, o ); 218 initPropIterator( &nit, o );
210 while( moreIteration( &nit ) ) { 219 while( moreIteration( &nit ) ) {
211 VObject *o = nextVObject( &nit ); 220 VObject *o = nextVObject( &nit );
212 QCString name = vObjectTypeInfo( o ); 221 QCString name = vObjectTypeInfo( o );
213 QString value = vObjectStringZValue( o ); 222 QString value = vObjectStringZValue( o );
214 if ( name == VCNamePrefixesProp ) 223 if ( name == VCNamePrefixesProp )
215 c.setTitle( value ); 224 c.setTitle( value );
216 else if ( name == VCNameSuffixesProp ) 225 else if ( name == VCNameSuffixesProp )
217 c.setSuffix( value ); 226 c.setSuffix( value );
218 else if ( name == VCFamilyNameProp ) 227 else if ( name == VCFamilyNameProp )
219 c.setLastName( value ); 228 c.setLastName( value );
220 else if ( name == VCGivenNameProp ) 229 else if ( name == VCGivenNameProp )
221 c.setFirstName( value ); 230 c.setFirstName( value );
222 else if ( name == VCAdditionalNamesProp ) 231 else if ( name == VCAdditionalNamesProp )
223 c.setMiddleName( value ); 232 c.setMiddleName( value );
224 } 233 }
225 } 234 }
226 else if ( name == VCAdrProp ) { 235 else if ( name == VCAdrProp ) {
227 bool work = TRUE; // default address is work address 236 bool work = TRUE; // default address is work address
228 QString street; 237 QString street;
229 QString city; 238 QString city;
230 QString region; 239 QString region;
231 QString postal; 240 QString postal;
232 QString country; 241 QString country;
233 242
234 VObjectIterator nit; 243 VObjectIterator nit;
235 initPropIterator( &nit, o ); 244 initPropIterator( &nit, o );
236 while( moreIteration( &nit ) ) { 245 while( moreIteration( &nit ) ) {
237 VObject *o = nextVObject( &nit ); 246 VObject *o = nextVObject( &nit );
238 QCString name = vObjectName( o ); 247 QCString name = vObjectName( o );
239 QString value = vObjectStringZValue( o ); 248 QString value = vObjectStringZValue( o );
240 if ( name == VCHomeProp ) 249 if ( name == VCHomeProp )
241 work = FALSE; 250 work = FALSE;
242 else if ( name == VCWorkProp ) 251 else if ( name == VCWorkProp )
243 work = TRUE; 252 work = TRUE;
244 else if ( name == VCStreetAddressProp ) 253 else if ( name == VCStreetAddressProp )
245 street = value; 254 street = value;
246 else if ( name == VCCityProp ) 255 else if ( name == VCCityProp )
247 city = value; 256 city = value;
248 else if ( name == VCRegionProp ) 257 else if ( name == VCRegionProp )
249 region = value; 258 region = value;
250 else if ( name == VCPostalCodeProp ) 259 else if ( name == VCPostalCodeProp )
251 postal = value; 260 postal = value;
252 else if ( name == VCCountryNameProp ) 261 else if ( name == VCCountryNameProp )