summaryrefslogtreecommitdiff
path: root/libopie2
Unidiff
Diffstat (limited to 'libopie2') (more/less context) (ignore whitespace changes)
-rw-r--r--libopie2/opiepim/backend/odatebookaccessbackend_xml.cpp2
1 files changed, 1 insertions, 1 deletions
diff --git a/libopie2/opiepim/backend/odatebookaccessbackend_xml.cpp b/libopie2/opiepim/backend/odatebookaccessbackend_xml.cpp
index 2ff36e3..107c178 100644
--- a/libopie2/opiepim/backend/odatebookaccessbackend_xml.cpp
+++ b/libopie2/opiepim/backend/odatebookaccessbackend_xml.cpp
@@ -119,385 +119,385 @@ namespace {
119 FRecChildren, 119 FRecChildren,
120 FExceptions 120 FExceptions
121 }; 121 };
122 122
123 // FIXME: Use OPimEvent::toMap() here !! (eilers) 123 // FIXME: Use OPimEvent::toMap() here !! (eilers)
124 inline void save( const OPimEvent& ev, QString& buf ) { 124 inline void save( const OPimEvent& ev, QString& buf ) {
125 owarn << "Saving " << ev.uid() << " " << ev.description() << "" << oendl; 125 owarn << "Saving " << ev.uid() << " " << ev.description() << "" << oendl;
126 buf += " description=\"" + Qtopia::escapeString(ev.description() ) + "\""; 126 buf += " description=\"" + Qtopia::escapeString(ev.description() ) + "\"";
127 if (!ev.location().isEmpty() ) 127 if (!ev.location().isEmpty() )
128 buf += " location=\"" + Qtopia::escapeString(ev.location() ) + "\""; 128 buf += " location=\"" + Qtopia::escapeString(ev.location() ) + "\"";
129 129
130 buf += " categories=\""+ Qtopia::escapeString( Qtopia::Record::idsToString( ev.categories() ) ) + "\""; 130 buf += " categories=\""+ Qtopia::escapeString( Qtopia::Record::idsToString( ev.categories() ) ) + "\"";
131 buf += " uid=\"" + QString::number( ev.uid() ) + "\""; 131 buf += " uid=\"" + QString::number( ev.uid() ) + "\"";
132 132
133 if (ev.isAllDay() ) 133 if (ev.isAllDay() )
134 buf += " type=\"AllDay\""; // is that all ?? (eilers) 134 buf += " type=\"AllDay\""; // is that all ?? (eilers)
135 135
136 if (ev.hasNotifiers() ) { 136 if (ev.hasNotifiers() ) {
137 OPimAlarm alarm = ev.notifiers().alarms()[0]; // take only the first 137 OPimAlarm alarm = ev.notifiers().alarms()[0]; // take only the first
138 int minutes = alarm.dateTime().secsTo( ev.startDateTime() ) / 60; 138 int minutes = alarm.dateTime().secsTo( ev.startDateTime() ) / 60;
139 buf += " alarm=\"" + QString::number(minutes) + "\" sound=\""; 139 buf += " alarm=\"" + QString::number(minutes) + "\" sound=\"";
140 if ( alarm.sound() == OPimAlarm::Loud ) 140 if ( alarm.sound() == OPimAlarm::Loud )
141 buf += "loud"; 141 buf += "loud";
142 else 142 else
143 buf += "silent"; 143 buf += "silent";
144 buf += "\""; 144 buf += "\"";
145 } 145 }
146 if ( ev.hasRecurrence() ) { 146 if ( ev.hasRecurrence() ) {
147 buf += ev.recurrence().toString(); 147 buf += ev.recurrence().toString();
148 } 148 }
149 149
150 /* 150 /*
151 * fscking timezones :) well, we'll first convert 151 * fscking timezones :) well, we'll first convert
152 * the QDateTime to a QDateTime in UTC time 152 * the QDateTime to a QDateTime in UTC time
153 * and then we'll create a nice time_t 153 * and then we'll create a nice time_t
154 */ 154 */
155 OPimTimeZone zone( ev.timeZone().isEmpty() ? OPimTimeZone::current() : ev.timeZone() ); 155 OPimTimeZone zone( ev.timeZone().isEmpty() ? OPimTimeZone::current() : ev.timeZone() );
156 buf += " start=\"" + QString::number( zone.fromUTCDateTime( zone.toDateTime( ev.startDateTime(), OPimTimeZone::utc() ) ) ) + "\""; 156 buf += " start=\"" + QString::number( zone.fromUTCDateTime( zone.toDateTime( ev.startDateTime(), OPimTimeZone::utc() ) ) ) + "\"";
157 buf += " end=\"" + QString::number( zone.fromUTCDateTime( zone.toDateTime( ev.endDateTime() , OPimTimeZone::utc() ) ) ) + "\""; 157 buf += " end=\"" + QString::number( zone.fromUTCDateTime( zone.toDateTime( ev.endDateTime() , OPimTimeZone::utc() ) ) ) + "\"";
158 if (!ev.note().isEmpty() ) { 158 if (!ev.note().isEmpty() ) {
159 buf += " note=\"" + Qtopia::escapeString( ev.note() ) + "\""; 159 buf += " note=\"" + Qtopia::escapeString( ev.note() ) + "\"";
160 } 160 }
161 161
162 buf += " timezone=\""; 162 buf += " timezone=\"";
163 if ( ev.timeZone().isEmpty() ) 163 if ( ev.timeZone().isEmpty() )
164 buf += "None"; 164 buf += "None";
165 else 165 else
166 buf += ev.timeZone(); 166 buf += ev.timeZone();
167 buf += "\""; 167 buf += "\"";
168 168
169 if (ev.parent() != 0 ) { 169 if (ev.parent() != 0 ) {
170 buf += " recparent=\""+QString::number(ev.parent() )+"\""; 170 buf += " recparent=\""+QString::number(ev.parent() )+"\"";
171 } 171 }
172 172
173 if (ev.children().count() != 0 ) { 173 if (ev.children().count() != 0 ) {
174 QArray<int> children = ev.children(); 174 QArray<int> children = ev.children();
175 buf += " recchildren=\""; 175 buf += " recchildren=\"";
176 for ( uint i = 0; i < children.count(); i++ ) { 176 for ( uint i = 0; i < children.count(); i++ ) {
177 if ( i != 0 ) buf += " "; 177 if ( i != 0 ) buf += " ";
178 buf += QString::number( children[i] ); 178 buf += QString::number( children[i] );
179 } 179 }
180 buf+= "\""; 180 buf+= "\"";
181 } 181 }
182 182
183 // skip custom writing 183 // skip custom writing
184 } 184 }
185 185
186 inline bool forAll( const QMap<int, OPimEvent>& list, QFile& file ) { 186 inline bool forAll( const QMap<int, OPimEvent>& list, QFile& file ) {
187 QMap<int, OPimEvent>::ConstIterator it; 187 QMap<int, OPimEvent>::ConstIterator it;
188 QString buf; 188 QString buf;
189 QCString str; 189 QCString str;
190 int total_written; 190 int total_written;
191 for ( it = list.begin(); it != list.end(); ++it ) { 191 for ( it = list.begin(); it != list.end(); ++it ) {
192 buf = "<event"; 192 buf = "<event";
193 save( it.data(), buf ); 193 save( it.data(), buf );
194 buf += " />\n"; 194 buf += " />\n";
195 str = buf.utf8(); 195 str = buf.utf8();
196 196
197 total_written = file.writeBlock(str.data(), str.length() ); 197 total_written = file.writeBlock(str.data(), str.length() );
198 if ( total_written != int(str.length() ) ) 198 if ( total_written != int(str.length() ) )
199 return false; 199 return false;
200 } 200 }
201 return true; 201 return true;
202 } 202 }
203} 203}
204 204
205namespace Opie { 205namespace Opie {
206ODateBookAccessBackend_XML::ODateBookAccessBackend_XML( const QString& , 206ODateBookAccessBackend_XML::ODateBookAccessBackend_XML( const QString& ,
207 const QString& fileName ) 207 const QString& fileName )
208 : ODateBookAccessBackend() { 208 : ODateBookAccessBackend() {
209 m_name = fileName.isEmpty() ? Global::applicationFileName( "datebook", "datebook.xml" ) : fileName; 209 m_name = fileName.isEmpty() ? Global::applicationFileName( "datebook", "datebook.xml" ) : fileName;
210 m_changed = false; 210 m_changed = false;
211} 211}
212ODateBookAccessBackend_XML::~ODateBookAccessBackend_XML() { 212ODateBookAccessBackend_XML::~ODateBookAccessBackend_XML() {
213} 213}
214bool ODateBookAccessBackend_XML::load() { 214bool ODateBookAccessBackend_XML::load() {
215 return loadFile(); 215 return loadFile();
216} 216}
217bool ODateBookAccessBackend_XML::reload() { 217bool ODateBookAccessBackend_XML::reload() {
218 clear(); 218 clear();
219 return load(); 219 return load();
220} 220}
221bool ODateBookAccessBackend_XML::save() { 221bool ODateBookAccessBackend_XML::save() {
222 if (!m_changed) return true; 222 if (!m_changed) return true;
223 223
224 int total_written; 224 int total_written;
225 QString strFileNew = m_name + ".new"; 225 QString strFileNew = m_name + ".new";
226 226
227 QFile f( strFileNew ); 227 QFile f( strFileNew );
228 if (!f.open( IO_WriteOnly | IO_Raw ) ) return false; 228 if (!f.open( IO_WriteOnly | IO_Raw ) ) return false;
229 229
230 QString buf( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" ); 230 QString buf( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" );
231 buf += "<!DOCTYPE DATEBOOK><DATEBOOK>\n"; 231 buf += "<!DOCTYPE DATEBOOK><DATEBOOK>\n";
232 buf += "<events>\n"; 232 buf += "<events>\n";
233 QCString str = buf.utf8(); 233 QCString str = buf.utf8();
234 total_written = f.writeBlock( str.data(), str.length() ); 234 total_written = f.writeBlock( str.data(), str.length() );
235 if ( total_written != int(str.length() ) ) { 235 if ( total_written != int(str.length() ) ) {
236 f.close(); 236 f.close();
237 QFile::remove( strFileNew ); 237 QFile::remove( strFileNew );
238 return false; 238 return false;
239 } 239 }
240 240
241 if (!forAll( m_raw, f ) ) { 241 if (!forAll( m_raw, f ) ) {
242 f.close(); 242 f.close();
243 QFile::remove( strFileNew ); 243 QFile::remove( strFileNew );
244 return false; 244 return false;
245 } 245 }
246 if (!forAll( m_rep, f ) ) { 246 if (!forAll( m_rep, f ) ) {
247 f.close(); 247 f.close();
248 QFile::remove( strFileNew ); 248 QFile::remove( strFileNew );
249 return false; 249 return false;
250 } 250 }
251 251
252 buf = "</events>\n</DATEBOOK>\n"; 252 buf = "</events>\n</DATEBOOK>\n";
253 str = buf.utf8(); 253 str = buf.utf8();
254 total_written = f.writeBlock( str.data(), str.length() ); 254 total_written = f.writeBlock( str.data(), str.length() );
255 if ( total_written != int(str.length() ) ) { 255 if ( total_written != int(str.length() ) ) {
256 f.close(); 256 f.close();
257 QFile::remove( strFileNew ); 257 QFile::remove( strFileNew );
258 return false; 258 return false;
259 } 259 }
260 f.close(); 260 f.close();
261 261
262 if ( ::rename( strFileNew, m_name ) < 0 ) { 262 if ( ::rename( strFileNew, m_name ) < 0 ) {
263 QFile::remove( strFileNew ); 263 QFile::remove( strFileNew );
264 return false; 264 return false;
265 } 265 }
266 266
267 m_changed = false; 267 m_changed = false;
268 return true; 268 return true;
269} 269}
270QArray<int> ODateBookAccessBackend_XML::allRecords()const { 270QArray<int> ODateBookAccessBackend_XML::allRecords()const {
271 QArray<int> ints( m_raw.count()+ m_rep.count() ); 271 QArray<int> ints( m_raw.count()+ m_rep.count() );
272 uint i = 0; 272 uint i = 0;
273 QMap<int, OPimEvent>::ConstIterator it; 273 QMap<int, OPimEvent>::ConstIterator it;
274 274
275 for ( it = m_raw.begin(); it != m_raw.end(); ++it ) { 275 for ( it = m_raw.begin(); it != m_raw.end(); ++it ) {
276 ints[i] = it.key(); 276 ints[i] = it.key();
277 i++; 277 i++;
278 } 278 }
279 for ( it = m_rep.begin(); it != m_rep.end(); ++it ) { 279 for ( it = m_rep.begin(); it != m_rep.end(); ++it ) {
280 ints[i] = it.key(); 280 ints[i] = it.key();
281 i++; 281 i++;
282 } 282 }
283 283
284 return ints; 284 return ints;
285} 285}
286QArray<int> ODateBookAccessBackend_XML::queryByExample(const OPimEvent&, int, const QDateTime& ) { 286QArray<int> ODateBookAccessBackend_XML::queryByExample(const OPimEvent&, int, const QDateTime& ) {
287 return QArray<int>(); 287 return QArray<int>();
288} 288}
289void ODateBookAccessBackend_XML::clear() { 289void ODateBookAccessBackend_XML::clear() {
290 m_changed = true; 290 m_changed = true;
291 m_raw.clear(); 291 m_raw.clear();
292 m_rep.clear(); 292 m_rep.clear();
293} 293}
294OPimEvent ODateBookAccessBackend_XML::find( int uid ) const{ 294OPimEvent ODateBookAccessBackend_XML::find( int uid ) const{
295 if ( m_raw.contains( uid ) ) 295 if ( m_raw.contains( uid ) )
296 return m_raw[uid]; 296 return m_raw[uid];
297 else 297 else
298 return m_rep[uid]; 298 return m_rep[uid];
299} 299}
300bool ODateBookAccessBackend_XML::add( const OPimEvent& ev ) { 300bool ODateBookAccessBackend_XML::add( const OPimEvent& ev ) {
301 m_changed = true; 301 m_changed = true;
302 if (ev.hasRecurrence() ) 302 if (ev.hasRecurrence() )
303 m_rep.insert( ev.uid(), ev ); 303 m_rep.insert( ev.uid(), ev );
304 else 304 else
305 m_raw.insert( ev.uid(), ev ); 305 m_raw.insert( ev.uid(), ev );
306 306
307 return true; 307 return true;
308} 308}
309bool ODateBookAccessBackend_XML::remove( int uid ) { 309bool ODateBookAccessBackend_XML::remove( int uid ) {
310 m_changed = true; 310 m_changed = true;
311 m_rep.remove( uid ); 311 m_raw.remove( uid );
312 m_rep.remove( uid ); 312 m_rep.remove( uid );
313 313
314 return true; 314 return true;
315} 315}
316bool ODateBookAccessBackend_XML::replace( const OPimEvent& ev ) { 316bool ODateBookAccessBackend_XML::replace( const OPimEvent& ev ) {
317 replace( ev.uid() ); // ??? Shouldn't this be "remove( ev.uid() ) ??? (eilers) 317 replace( ev.uid() ); // ??? Shouldn't this be "remove( ev.uid() ) ??? (eilers)
318 return add( ev ); 318 return add( ev );
319} 319}
320QArray<int> ODateBookAccessBackend_XML::rawEvents()const { 320QArray<int> ODateBookAccessBackend_XML::rawEvents()const {
321 return allRecords(); 321 return allRecords();
322} 322}
323QArray<int> ODateBookAccessBackend_XML::rawRepeats()const { 323QArray<int> ODateBookAccessBackend_XML::rawRepeats()const {
324 QArray<int> ints( m_rep.count() ); 324 QArray<int> ints( m_rep.count() );
325 uint i = 0; 325 uint i = 0;
326 QMap<int, OPimEvent>::ConstIterator it; 326 QMap<int, OPimEvent>::ConstIterator it;
327 327
328 for ( it = m_rep.begin(); it != m_rep.end(); ++it ) { 328 for ( it = m_rep.begin(); it != m_rep.end(); ++it ) {
329 ints[i] = it.key(); 329 ints[i] = it.key();
330 i++; 330 i++;
331 } 331 }
332 332
333 return ints; 333 return ints;
334} 334}
335QArray<int> ODateBookAccessBackend_XML::nonRepeats()const { 335QArray<int> ODateBookAccessBackend_XML::nonRepeats()const {
336 QArray<int> ints( m_raw.count() ); 336 QArray<int> ints( m_raw.count() );
337 uint i = 0; 337 uint i = 0;
338 QMap<int, OPimEvent>::ConstIterator it; 338 QMap<int, OPimEvent>::ConstIterator it;
339 339
340 for ( it = m_raw.begin(); it != m_raw.end(); ++it ) { 340 for ( it = m_raw.begin(); it != m_raw.end(); ++it ) {
341 ints[i] = it.key(); 341 ints[i] = it.key();
342 i++; 342 i++;
343 } 343 }
344 344
345 return ints; 345 return ints;
346} 346}
347OPimEvent::ValueList ODateBookAccessBackend_XML::directNonRepeats() { 347OPimEvent::ValueList ODateBookAccessBackend_XML::directNonRepeats() {
348 OPimEvent::ValueList list; 348 OPimEvent::ValueList list;
349 QMap<int, OPimEvent>::ConstIterator it; 349 QMap<int, OPimEvent>::ConstIterator it;
350 for (it = m_raw.begin(); it != m_raw.end(); ++it ) 350 for (it = m_raw.begin(); it != m_raw.end(); ++it )
351 list.append( it.data() ); 351 list.append( it.data() );
352 352
353 return list; 353 return list;
354} 354}
355OPimEvent::ValueList ODateBookAccessBackend_XML::directRawRepeats() { 355OPimEvent::ValueList ODateBookAccessBackend_XML::directRawRepeats() {
356 OPimEvent::ValueList list; 356 OPimEvent::ValueList list;
357 QMap<int, OPimEvent>::ConstIterator it; 357 QMap<int, OPimEvent>::ConstIterator it;
358 for (it = m_rep.begin(); it != m_rep.end(); ++it ) 358 for (it = m_rep.begin(); it != m_rep.end(); ++it )
359 list.append( it.data() ); 359 list.append( it.data() );
360 360
361 return list; 361 return list;
362} 362}
363 363
364// FIXME: Use OPimEvent::fromMap() (eilers) 364// FIXME: Use OPimEvent::fromMap() (eilers)
365bool ODateBookAccessBackend_XML::loadFile() { 365bool ODateBookAccessBackend_XML::loadFile() {
366 m_changed = false; 366 m_changed = false;
367 367
368 int fd = ::open( QFile::encodeName(m_name).data(), O_RDONLY ); 368 int fd = ::open( QFile::encodeName(m_name).data(), O_RDONLY );
369 if ( fd < 0 ) return false; 369 if ( fd < 0 ) return false;
370 370
371 struct stat attribute; 371 struct stat attribute;
372 if ( ::fstat(fd, &attribute ) == -1 ) { 372 if ( ::fstat(fd, &attribute ) == -1 ) {
373 ::close( fd ); 373 ::close( fd );
374 return false; 374 return false;
375 } 375 }
376 void* map_addr = ::mmap(NULL, attribute.st_size, PROT_READ, MAP_SHARED, fd, 0 ); 376 void* map_addr = ::mmap(NULL, attribute.st_size, PROT_READ, MAP_SHARED, fd, 0 );
377 if ( map_addr == ( (caddr_t)-1) ) { 377 if ( map_addr == ( (caddr_t)-1) ) {
378 ::close( fd ); 378 ::close( fd );
379 return false; 379 return false;
380 } 380 }
381 381
382 ::madvise( map_addr, attribute.st_size, MADV_SEQUENTIAL ); 382 ::madvise( map_addr, attribute.st_size, MADV_SEQUENTIAL );
383 ::close( fd ); 383 ::close( fd );
384 384
385 QAsciiDict<int> dict(FExceptions+1); 385 QAsciiDict<int> dict(FExceptions+1);
386 dict.setAutoDelete( true ); 386 dict.setAutoDelete( true );
387 dict.insert( "description", new int(FDescription) ); 387 dict.insert( "description", new int(FDescription) );
388 dict.insert( "location", new int(FLocation) ); 388 dict.insert( "location", new int(FLocation) );
389 dict.insert( "categories", new int(FCategories) ); 389 dict.insert( "categories", new int(FCategories) );
390 dict.insert( "uid", new int(FUid) ); 390 dict.insert( "uid", new int(FUid) );
391 dict.insert( "type", new int(FType) ); 391 dict.insert( "type", new int(FType) );
392 dict.insert( "alarm", new int(FAlarm) ); 392 dict.insert( "alarm", new int(FAlarm) );
393 dict.insert( "sound", new int(FSound) ); 393 dict.insert( "sound", new int(FSound) );
394 dict.insert( "rtype", new int(FRType) ); 394 dict.insert( "rtype", new int(FRType) );
395 dict.insert( "rweekdays", new int(FRWeekdays) ); 395 dict.insert( "rweekdays", new int(FRWeekdays) );
396 dict.insert( "rposition", new int(FRPosition) ); 396 dict.insert( "rposition", new int(FRPosition) );
397 dict.insert( "rfreq", new int(FRFreq) ); 397 dict.insert( "rfreq", new int(FRFreq) );
398 dict.insert( "rhasenddate", new int(FRHasEndDate) ); 398 dict.insert( "rhasenddate", new int(FRHasEndDate) );
399 dict.insert( "enddt", new int(FREndDate) ); 399 dict.insert( "enddt", new int(FREndDate) );
400 dict.insert( "start", new int(FRStart) ); 400 dict.insert( "start", new int(FRStart) );
401 dict.insert( "end", new int(FREnd) ); 401 dict.insert( "end", new int(FREnd) );
402 dict.insert( "note", new int(FNote) ); 402 dict.insert( "note", new int(FNote) );
403 dict.insert( "created", new int(FCreated) ); // Shouldn't this be FRCreated ?? 403 dict.insert( "created", new int(FCreated) ); // Shouldn't this be FRCreated ??
404 dict.insert( "recparent", new int(FRecParent) ); 404 dict.insert( "recparent", new int(FRecParent) );
405 dict.insert( "recchildren", new int(FRecChildren) ); 405 dict.insert( "recchildren", new int(FRecChildren) );
406 dict.insert( "exceptions", new int(FExceptions) ); 406 dict.insert( "exceptions", new int(FExceptions) );
407 dict.insert( "timezone", new int(FTimeZone) ); 407 dict.insert( "timezone", new int(FTimeZone) );
408 408
409 char* dt = (char*)map_addr; 409 char* dt = (char*)map_addr;
410 int len = attribute.st_size; 410 int len = attribute.st_size;
411 int i = 0; 411 int i = 0;
412 char* point; 412 char* point;
413 const char* collectionString = "<event "; 413 const char* collectionString = "<event ";
414 int strLen = ::strlen(collectionString); 414 int strLen = ::strlen(collectionString);
415 int *find; 415 int *find;
416 while ( ( point = ::strstrlen( dt+i, len -i, collectionString, strLen ) ) != 0 ) { 416 while ( ( point = ::strstrlen( dt+i, len -i, collectionString, strLen ) ) != 0 ) {
417 i = point -dt; 417 i = point -dt;
418 i+= strLen; 418 i+= strLen;
419 419
420 alarmTime = -1; 420 alarmTime = -1;
421 snd = 0; // silent 421 snd = 0; // silent
422 422
423 OPimEvent ev; 423 OPimEvent ev;
424 rec = 0; 424 rec = 0;
425 425
426 while ( TRUE ) { 426 while ( TRUE ) {
427 while ( i < len && (dt[i] == ' ' || dt[i] == '\n' || dt[i] == '\r') ) 427 while ( i < len && (dt[i] == ' ' || dt[i] == '\n' || dt[i] == '\r') )
428 ++i; 428 ++i;
429 if ( i >= len-2 || (dt[i] == '/' && dt[i+1] == '>') ) 429 if ( i >= len-2 || (dt[i] == '/' && dt[i+1] == '>') )
430 break; 430 break;
431 431
432 432
433 // we have another attribute, read it. 433 // we have another attribute, read it.
434 int j = i; 434 int j = i;
435 while ( j < len && dt[j] != '=' ) 435 while ( j < len && dt[j] != '=' )
436 ++j; 436 ++j;
437 QCString attr( dt+i, j-i+1); 437 QCString attr( dt+i, j-i+1);
438 438
439 i = ++j; // skip = 439 i = ++j; // skip =
440 440
441 // find the start of quotes 441 // find the start of quotes
442 while ( i < len && dt[i] != '"' ) 442 while ( i < len && dt[i] != '"' )
443 ++i; 443 ++i;
444 j = ++i; 444 j = ++i;
445 445
446 bool haveUtf = FALSE; 446 bool haveUtf = FALSE;
447 bool haveEnt = FALSE; 447 bool haveEnt = FALSE;
448 while ( j < len && dt[j] != '"' ) { 448 while ( j < len && dt[j] != '"' ) {
449 if ( ((unsigned char)dt[j]) > 0x7f ) 449 if ( ((unsigned char)dt[j]) > 0x7f )
450 haveUtf = TRUE; 450 haveUtf = TRUE;
451 if ( dt[j] == '&' ) 451 if ( dt[j] == '&' )
452 haveEnt = TRUE; 452 haveEnt = TRUE;
453 ++j; 453 ++j;
454 } 454 }
455 if ( i == j ) { 455 if ( i == j ) {
456 // empty value 456 // empty value
457 i = j + 1; 457 i = j + 1;
458 continue; 458 continue;
459 } 459 }
460 460
461 QCString value( dt+i, j-i+1 ); 461 QCString value( dt+i, j-i+1 );
462 i = j + 1; 462 i = j + 1;
463 463
464 QString str = (haveUtf ? QString::fromUtf8( value ) 464 QString str = (haveUtf ? QString::fromUtf8( value )
465 : QString::fromLatin1( value ) ); 465 : QString::fromLatin1( value ) );
466 if ( haveEnt ) 466 if ( haveEnt )
467 str = Qtopia::plainString( str ); 467 str = Qtopia::plainString( str );
468 468
469 /* 469 /*
470 * add key + value 470 * add key + value
471 */ 471 */
472 find = dict[attr.data()]; 472 find = dict[attr.data()];
473 if (!find) 473 if (!find)
474 ev.setCustomField( attr, str ); 474 ev.setCustomField( attr, str );
475 else { 475 else {
476 setField( ev, *find, str ); 476 setField( ev, *find, str );
477 } 477 }
478 } 478 }
479 /* time to finalize */ 479 /* time to finalize */
480 finalizeRecord( ev ); 480 finalizeRecord( ev );
481 delete rec; 481 delete rec;
482 } 482 }
483 ::munmap(map_addr, attribute.st_size ); 483 ::munmap(map_addr, attribute.st_size );
484 m_changed = false; // changed during add 484 m_changed = false; // changed during add
485 485
486 return true; 486 return true;
487} 487}
488 488
489// FIXME: Use OPimEvent::fromMap() which makes this obsolete.. (eilers) 489// FIXME: Use OPimEvent::fromMap() which makes this obsolete.. (eilers)
490void ODateBookAccessBackend_XML::finalizeRecord( OPimEvent& ev ) { 490void ODateBookAccessBackend_XML::finalizeRecord( OPimEvent& ev ) {
491 /* AllDay is alway in UTC */ 491 /* AllDay is alway in UTC */
492 if ( ev.isAllDay() ) { 492 if ( ev.isAllDay() ) {
493 OPimTimeZone utc = OPimTimeZone::utc(); 493 OPimTimeZone utc = OPimTimeZone::utc();
494 ev.setStartDateTime( utc.fromUTCDateTime( start ) ); 494 ev.setStartDateTime( utc.fromUTCDateTime( start ) );
495 ev.setEndDateTime ( utc.fromUTCDateTime( end ) ); 495 ev.setEndDateTime ( utc.fromUTCDateTime( end ) );
496 ev.setTimeZone( "UTC"); // make sure it is really utc 496 ev.setTimeZone( "UTC"); // make sure it is really utc
497 }else { 497 }else {
498 /* to current date time */ 498 /* to current date time */
499 // owarn << " Start is " << start << "" << oendl; 499 // owarn << " Start is " << start << "" << oendl;
500 OPimTimeZone zone( ev.timeZone().isEmpty() ? OPimTimeZone::current() : ev.timeZone() ); 500 OPimTimeZone zone( ev.timeZone().isEmpty() ? OPimTimeZone::current() : ev.timeZone() );
501 QDateTime date = zone.toDateTime( start ); 501 QDateTime date = zone.toDateTime( start );
502 owarn << " Start is " << date.toString() << "" << oendl; 502 owarn << " Start is " << date.toString() << "" << oendl;
503 ev.setStartDateTime( zone.toDateTime( date, OPimTimeZone::current() ) ); 503 ev.setStartDateTime( zone.toDateTime( date, OPimTimeZone::current() ) );