summaryrefslogtreecommitdiff
path: root/libopie2/opiepim/backend/otodoaccessxml.cpp
Unidiff
Diffstat (limited to 'libopie2/opiepim/backend/otodoaccessxml.cpp') (more/less context) (show whitespace changes)
-rw-r--r--libopie2/opiepim/backend/otodoaccessxml.cpp65
1 files changed, 35 insertions, 30 deletions
diff --git a/libopie2/opiepim/backend/otodoaccessxml.cpp b/libopie2/opiepim/backend/otodoaccessxml.cpp
index cce6111..3e06d88 100644
--- a/libopie2/opiepim/backend/otodoaccessxml.cpp
+++ b/libopie2/opiepim/backend/otodoaccessxml.cpp
@@ -23,36 +23,41 @@
23 -_. . . )=. = Library General Public License along with 23 -_. . . )=. = Library General Public License along with
24 -- :-=` this library; see the file COPYING.LIB. 24 -- :-=` this library; see the file COPYING.LIB.
25 If not, write to the Free Software Foundation, 25 If not, write to the Free Software Foundation,
26 Inc., 59 Temple Place - Suite 330, 26 Inc., 59 Temple Place - Suite 330,
27 Boston, MA 02111-1307, USA. 27 Boston, MA 02111-1307, USA.
28*/ 28*/
29
30/* OPIE */
31#include <opie2/opimdateconversion.h>
32#include <opie2/opimstate.h>
33#include <opie2/opimtimezone.h>
34#include <opie2/opimnotifymanager.h>
35#include <opie2/opimrecurrence.h>
36#include <opie2/otodoaccessxml.h>
37#include <opie2/odebug.h>
38
39#include <qpe/global.h>
40#include <qpe/stringutil.h>
41#include <qpe/timeconversion.h>
42
43/* QT */
44#include <qfile.h>
45#include <qvector.h>
46
47/* STD */
29#include <errno.h> 48#include <errno.h>
30#include <fcntl.h> 49#include <fcntl.h>
31 50
32#include <sys/mman.h> 51#include <sys/mman.h>
33#include <sys/stat.h> 52#include <sys/stat.h>
34#include <sys/types.h> 53#include <sys/types.h>
35 54
36#include <unistd.h> 55#include <unistd.h>
37 56
38 57
39#include <qfile.h>
40#include <qvector.h>
41
42#include <qpe/global.h>
43#include <qpe/stringutil.h>
44#include <qpe/timeconversion.h>
45
46#include <opie2/opimdateconversion.h>
47#include <opie2/opimstate.h>
48#include <opie2/opimtimezone.h>
49#include <opie2/opimnotifymanager.h>
50#include <opie2/opimrecurrence.h>
51#include <opie2/otodoaccessxml.h>
52
53using namespace Opie; 58using namespace Opie;
54 59
55namespace { 60namespace {
56 time_t rp_end; 61 time_t rp_end;
57 OPimRecurrence* rec; 62 OPimRecurrence* rec;
58 OPimRecurrence *recur() { 63 OPimRecurrence *recur() {
@@ -174,13 +179,13 @@ bool OPimTodoAccessXML::load() {
174 char *point; 179 char *point;
175 const char* collectionString = "<Task "; 180 const char* collectionString = "<Task ";
176 int strLen = strlen(collectionString); 181 int strLen = strlen(collectionString);
177 while ( ( point = strstrlen( dt+i, len -i, collectionString, strLen ) ) != 0l ) { 182 while ( ( point = strstrlen( dt+i, len -i, collectionString, strLen ) ) != 0l ) {
178 i = point -dt; 183 i = point -dt;
179 i+= strLen; 184 i+= strLen;
180 qWarning("Found a start at %d %d", i, (point-dt) ); 185 owarn << "Found a start at " << i << " " << (point-dt) << "" << oendl;
181 186
182 OPimTodo ev; 187 OPimTodo ev;
183 m_year = m_month = m_day = 0; 188 m_year = m_month = m_day = 0;
184 189
185 while ( TRUE ) { 190 while ( TRUE ) {
186 while ( i < len && (dt[i] == ' ' || dt[i] == '\n' || dt[i] == '\r') ) 191 while ( i < len && (dt[i] == ' ' || dt[i] == '\n' || dt[i] == '\r') )
@@ -230,13 +235,13 @@ bool OPimTodoAccessXML::load() {
230 todo( &dict, ev, attr, str ); 235 todo( &dict, ev, attr, str );
231 236
232 } 237 }
233 /* 238 /*
234 * now add it 239 * now add it
235 */ 240 */
236 qWarning("End at %d", i ); 241 owarn << "End at " << i << "" << oendl;
237 if (m_events.contains( ev.uid() ) || ev.uid() == 0) { 242 if (m_events.contains( ev.uid() ) || ev.uid() == 0) {
238 ev.setUid( 1 ); 243 ev.setUid( 1 );
239 m_changed = true; 244 m_changed = true;
240 } 245 }
241 if ( ev.hasDueDate() ) { 246 if ( ev.hasDueDate() ) {
242 ev.setDueDate( QDate(m_year, m_month, m_day) ); 247 ev.setDueDate( QDate(m_year, m_month, m_day) );
@@ -253,23 +258,23 @@ bool OPimTodoAccessXML::load() {
253 delete rec; 258 delete rec;
254 rec = 0; 259 rec = 0;
255 } 260 }
256 261
257 munmap(map_addr, attribut.st_size ); 262 munmap(map_addr, attribut.st_size );
258 263
259 qWarning("counts %d records loaded!", m_events.count() ); 264 owarn << "counts " << m_events.count() << " records loaded!" << oendl;
260 return true; 265 return true;
261} 266}
262bool OPimTodoAccessXML::reload() { 267bool OPimTodoAccessXML::reload() {
263 m_events.clear(); 268 m_events.clear();
264 return load(); 269 return load();
265} 270}
266bool OPimTodoAccessXML::save() { 271bool OPimTodoAccessXML::save() {
267// qWarning("saving"); 272// owarn << "saving" << oendl;
268 if (!m_opened || !m_changed ) { 273 if (!m_opened || !m_changed ) {
269// qWarning("not saving"); 274// owarn << "not saving" << oendl;
270 return true; 275 return true;
271 } 276 }
272 QString strNewFile = m_file + ".new"; 277 QString strNewFile = m_file + ".new";
273 QFile f( strNewFile ); 278 QFile f( strNewFile );
274 if (!f.open( IO_WriteOnly|IO_Raw ) ) 279 if (!f.open( IO_WriteOnly|IO_Raw ) )
275 return false; 280 return false;
@@ -304,13 +309,13 @@ bool OPimTodoAccessXML::save() {
304 return false; 309 return false;
305 } 310 }
306 /* flush before renaming */ 311 /* flush before renaming */
307 f.close(); 312 f.close();
308 313
309 if( ::rename( strNewFile.latin1(), m_file.latin1() ) < 0 ) { 314 if( ::rename( strNewFile.latin1(), m_file.latin1() ) < 0 ) {
310// qWarning("error renaming"); 315// owarn << "error renaming" << oendl;
311 QFile::remove( strNewFile ); 316 QFile::remove( strNewFile );
312 } 317 }
313 318
314 m_changed = false; 319 m_changed = false;
315 return true; 320 return true;
316} 321}
@@ -342,13 +347,13 @@ void OPimTodoAccessXML::clear() {
342 if (m_opened ) 347 if (m_opened )
343 m_changed = true; 348 m_changed = true;
344 349
345 m_events.clear(); 350 m_events.clear();
346} 351}
347bool OPimTodoAccessXML::add( const OPimTodo& todo ) { 352bool OPimTodoAccessXML::add( const OPimTodo& todo ) {
348// qWarning("add"); 353// owarn << "add" << oendl;
349 m_changed = true; 354 m_changed = true;
350 m_events.insert( todo.uid(), todo ); 355 m_events.insert( todo.uid(), todo );
351 356
352 return true; 357 return true;
353} 358}
354bool OPimTodoAccessXML::remove( int uid ) { 359bool OPimTodoAccessXML::remove( int uid ) {
@@ -401,19 +406,19 @@ QArray<int> OPimTodoAccessXML::overDue() {
401} 406}
402 407
403 408
404/* private */ 409/* private */
405void OPimTodoAccessXML::todo( QAsciiDict<int>* dict, OPimTodo& ev, 410void OPimTodoAccessXML::todo( QAsciiDict<int>* dict, OPimTodo& ev,
406 const QCString& attr, const QString& val) { 411 const QCString& attr, const QString& val) {
407// qWarning("parse to do from XMLElement" ); 412// owarn << "parse to do from XMLElement" << oendl;
408 413
409 int *find=0; 414 int *find=0;
410 415
411 find = (*dict)[ attr.data() ]; 416 find = (*dict)[ attr.data() ];
412 if (!find ) { 417 if (!find ) {
413// qWarning("Unknown option" + it.key() ); 418// owarn << "Unknown option" + it.key() << oendl;
414 ev.setCustomField( attr, val ); 419 ev.setCustomField( attr, val );
415 return; 420 return;
416 } 421 }
417 422
418 switch( *find ) { 423 switch( *find ) {
419 case OPimTodo::Uid: 424 case OPimTodo::Uid:
@@ -460,14 +465,14 @@ void OPimTodoAccessXML::todo( QAsciiDict<int>* dict, OPimTodo& ev,
460 break; 465 break;
461 case OPimTodo::Alarms:{ 466 case OPimTodo::Alarms:{
462 OPimNotifyManager &manager = ev.notifiers(); 467 OPimNotifyManager &manager = ev.notifiers();
463 QStringList als = QStringList::split(";", val ); 468 QStringList als = QStringList::split(";", val );
464 for (QStringList::Iterator it = als.begin(); it != als.end(); ++it ) { 469 for (QStringList::Iterator it = als.begin(); it != als.end(); ++it ) {
465 QStringList alarm = QStringList::split(":", (*it), TRUE ); // allow empty 470 QStringList alarm = QStringList::split(":", (*it), TRUE ); // allow empty
466 qWarning("alarm: %s", alarm.join("___").latin1() ); 471 owarn << "alarm: " << alarm.join("___") << "" << oendl;
467 qWarning("alarm[0]: %s %s", alarm[0].latin1(), OPimDateConversion::dateTimeFromString( alarm[0] ).toString().latin1() ); 472 owarn << "alarm[0]: " << alarm[0] << " " << OPimDateConversion::dateTimeFromString( alarm[0] ).toString() << "" << oendl;
468 OPimAlarm al( alarm[2].toInt(), OPimDateConversion::dateTimeFromString( alarm[0] ), alarm[1].toInt() ); 473 OPimAlarm al( alarm[2].toInt(), OPimDateConversion::dateTimeFromString( alarm[0] ), alarm[1].toInt() );
469 manager.add( al ); 474 manager.add( al );
470 } 475 }
471 } 476 }
472 break; 477 break;
473 case OPimTodo::Reminders:{ 478 case OPimTodo::Reminders:{
@@ -534,17 +539,17 @@ void OPimTodoAccessXML::todo( QAsciiDict<int>* dict, OPimTodo& ev,
534} 539}
535 540
536// from PalmtopRecord... GPL ### FIXME 541// from PalmtopRecord... GPL ### FIXME
537namespace { 542namespace {
538QString customToXml(const QMap<QString, QString>& customMap ) 543QString customToXml(const QMap<QString, QString>& customMap )
539{ 544{
540 //qWarning(QString("writing custom %1").arg(customMap.count())); 545 //owarn << QString("writing custom %1").arg(customMap.count()) << oendl;
541 QString buf(" "); 546 QString buf(" ");
542 for ( QMap<QString, QString>::ConstIterator cit = customMap.begin(); 547 for ( QMap<QString, QString>::ConstIterator cit = customMap.begin();
543 cit != customMap.end(); ++cit) { 548 cit != customMap.end(); ++cit) {
544 // qWarning(".ITEM."); 549// owarn << ".ITEM." << oendl;
545 buf += cit.key(); 550 buf += cit.key();
546 buf += "=\""; 551 buf += "=\"";
547 buf += Qtopia::escapeString(cit.data()); 552 buf += Qtopia::escapeString(cit.data());
548 buf += "\" "; 553 buf += "\" ";
549 } 554 }
550 return buf; 555 return buf;
@@ -567,13 +572,13 @@ QString OPimTodoAccessXML::toString( const OPimTodo& ev )const {
567 572
568 if ( ev.hasDueDate() ) { 573 if ( ev.hasDueDate() ) {
569 str += "DateYear=\"" + QString::number( ev.dueDate().year() ) + "\" "; 574 str += "DateYear=\"" + QString::number( ev.dueDate().year() ) + "\" ";
570 str += "DateMonth=\"" + QString::number( ev.dueDate().month() ) + "\" "; 575 str += "DateMonth=\"" + QString::number( ev.dueDate().month() ) + "\" ";
571 str += "DateDay=\"" + QString::number( ev.dueDate().day() ) + "\" "; 576 str += "DateDay=\"" + QString::number( ev.dueDate().day() ) + "\" ";
572 } 577 }
573// qWarning( "Uid %d", ev.uid() ); 578// owarn << "Uid " << ev.uid() << "" << oendl;
574 str += "Uid=\"" + QString::number( ev.uid() ) + "\" "; 579 str += "Uid=\"" + QString::number( ev.uid() ) + "\" ";
575 580
576// append the extra options 581// append the extra options
577 /* FIXME Qtopia::Record this is currently not 582 /* FIXME Qtopia::Record this is currently not
578 * possible you can set custom fields 583 * possible you can set custom fields
579 * but don' iterate over the list 584 * but don' iterate over the list
@@ -614,13 +619,13 @@ QString OPimTodoAccessXML::toString( const OPimTodo& ev )const {
614 + ":" + QString::number( (*it).duration() ) 619 + ":" + QString::number( (*it).duration() )
615 + ":" + QString::number( (*it).sound() ) 620 + ":" + QString::number( (*it).sound() )
616 + ":"; 621 + ":";
617 } 622 }
618 } 623 }
619 // now write the list 624 // now write the list
620 qWarning("als: %s", als.join("____________").latin1() ); 625 owarn << "als: " << als.join("____________") << "" << oendl;
621 str += "Alarms=\""+als.join(";") +"\" "; 626 str += "Alarms=\""+als.join(";") +"\" ";
622 } 627 }
623 628
624 /* 629 /*
625 * now the same for reminders but more easy. We just save the uid of the OPimEvent. 630 * now the same for reminders but more easy. We just save the uid of the OPimEvent.
626 */ 631 */
@@ -835,13 +840,13 @@ QArray<int> OPimTodoAccessXML::sorted( bool asc, int sortOrder,
835 }else if ( bCat && cat != 0) 840 }else if ( bCat && cat != 0)
836 if (!(*it).categories().contains( cat ) ) { 841 if (!(*it).categories().contains( cat ) ) {
837 continue; 842 continue;
838 } 843 }
839 /* isOverdue but we should not show overdue - why?*/ 844 /* isOverdue but we should not show overdue - why?*/
840/* if ( (*it).isOverdue() && !bOnly ) { 845/* if ( (*it).isOverdue() && !bOnly ) {
841 qWarning("item is overdue but !bOnly"); 846 owarn << "item is overdue but !bOnly" << oendl;
842 continue; 847 continue;
843 } 848 }
844*/ 849*/
845 if ( !(*it).isOverdue() && bOnly ) { 850 if ( !(*it).isOverdue() && bOnly ) {
846 continue; 851 continue;
847 } 852 }