author | eilers <eilers> | 2003-01-13 15:49:31 (UTC) |
---|---|---|
committer | eilers <eilers> | 2003-01-13 15:49:31 (UTC) |
commit | 6bae3504f8eacd604bc6d543d3eb09f996221dcc (patch) (unidiff) | |
tree | 14032f862c724319b7b538e054cd53c11994bb4d | |
parent | 01f7b3b512bbb729ac44808748365699748f3d4c (diff) | |
download | opie-6bae3504f8eacd604bc6d543d3eb09f996221dcc.zip opie-6bae3504f8eacd604bc6d543d3eb09f996221dcc.tar.gz opie-6bae3504f8eacd604bc6d543d3eb09f996221dcc.tar.bz2 |
Fixing crash when businesscard.vcf is missing..
-rw-r--r-- | libopie/pim/ocontactaccessbackend_vcard.cpp | 13 | ||||
-rw-r--r-- | libopie2/opiepim/backend/ocontactaccessbackend_vcard.cpp | 13 |
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 | ||
44 | OContactAccessBackend_VCard::OContactAccessBackend_VCard ( QString , QString filename ): | 47 | OContactAccessBackend_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 | ||
52 | bool OContactAccessBackend_VCard::load () | 55 | bool 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 | } |
84 | bool OContactAccessBackend_VCard::reload() | 93 | bool OContactAccessBackend_VCard::reload() |
85 | { | 94 | { |
86 | return load(); | 95 | return load(); |
87 | } | 96 | } |
88 | bool OContactAccessBackend_VCard::save() | 97 | bool 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 | } |
114 | void OContactAccessBackend_VCard::clear () | 123 | void 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 | ||
120 | bool OContactAccessBackend_VCard::add ( const OContact& newcontact ) | 129 | bool 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 | ||
127 | bool OContactAccessBackend_VCard::remove ( int uid ) | 136 | bool 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 | ||
134 | bool OContactAccessBackend_VCard::replace ( const OContact &contact ) | 143 | bool 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 | ||
141 | OContact OContactAccessBackend_VCard::find ( int uid ) const | 150 | OContact OContactAccessBackend_VCard::find ( int uid ) const |
142 | { | 151 | { |
143 | return m_map[uid]; | 152 | return m_map[uid]; |
144 | } | 153 | } |
145 | 154 | ||
146 | QArray<int> OContactAccessBackend_VCard::allRecords() const | 155 | QArray<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 |
159 | QArray<int> OContactAccessBackend_VCard::queryByExample ( const OContact&, int ) | 168 | QArray<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 |
166 | QArray<int> OContactAccessBackend_VCard::matchRegexp( const QRegExp& ) const | 175 | QArray<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 | ||
172 | const uint OContactAccessBackend_VCard::querySettings() | 181 | const uint OContactAccessBackend_VCard::querySettings() |
173 | { | 182 | { |
174 | return 0; // No search possible | 183 | return 0; // No search possible |
175 | } | 184 | } |
176 | 185 | ||
177 | bool OContactAccessBackend_VCard::hasQuerySettings (uint ) const | 186 | bool 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 | ||
182 | bool OContactAccessBackend_VCard::wasChangedExternally() | 191 | bool 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 |
188 | QArray<int> OContactAccessBackend_VCard::sorted( bool , int, int, int ) | 197 | QArray<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 | ||
197 | OContact OContactAccessBackend_VCard::parseVObject( VObject *obj ) | 206 | OContact 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 | ||
44 | OContactAccessBackend_VCard::OContactAccessBackend_VCard ( QString , QString filename ): | 47 | OContactAccessBackend_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 | ||
52 | bool OContactAccessBackend_VCard::load () | 55 | bool 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 | } |
84 | bool OContactAccessBackend_VCard::reload() | 93 | bool OContactAccessBackend_VCard::reload() |
85 | { | 94 | { |
86 | return load(); | 95 | return load(); |
87 | } | 96 | } |
88 | bool OContactAccessBackend_VCard::save() | 97 | bool 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 | } |
114 | void OContactAccessBackend_VCard::clear () | 123 | void 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 | ||
120 | bool OContactAccessBackend_VCard::add ( const OContact& newcontact ) | 129 | bool 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 | ||
127 | bool OContactAccessBackend_VCard::remove ( int uid ) | 136 | bool 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 | ||
134 | bool OContactAccessBackend_VCard::replace ( const OContact &contact ) | 143 | bool 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 | ||
141 | OContact OContactAccessBackend_VCard::find ( int uid ) const | 150 | OContact OContactAccessBackend_VCard::find ( int uid ) const |
142 | { | 151 | { |
143 | return m_map[uid]; | 152 | return m_map[uid]; |
144 | } | 153 | } |
145 | 154 | ||
146 | QArray<int> OContactAccessBackend_VCard::allRecords() const | 155 | QArray<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 |
159 | QArray<int> OContactAccessBackend_VCard::queryByExample ( const OContact&, int ) | 168 | QArray<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 |
166 | QArray<int> OContactAccessBackend_VCard::matchRegexp( const QRegExp& ) const | 175 | QArray<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 | ||
172 | const uint OContactAccessBackend_VCard::querySettings() | 181 | const uint OContactAccessBackend_VCard::querySettings() |
173 | { | 182 | { |
174 | return 0; // No search possible | 183 | return 0; // No search possible |
175 | } | 184 | } |
176 | 185 | ||
177 | bool OContactAccessBackend_VCard::hasQuerySettings (uint ) const | 186 | bool 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 | ||
182 | bool OContactAccessBackend_VCard::wasChangedExternally() | 191 | bool 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 |
188 | QArray<int> OContactAccessBackend_VCard::sorted( bool , int, int, int ) | 197 | QArray<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 | ||
197 | OContact OContactAccessBackend_VCard::parseVObject( VObject *obj ) | 206 | OContact 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 ) |