summaryrefslogtreecommitdiff
path: root/libopie2/opiepim/backend/otodoaccessxml.cpp
Unidiff
Diffstat (limited to 'libopie2/opiepim/backend/otodoaccessxml.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--libopie2/opiepim/backend/otodoaccessxml.cpp191
1 files changed, 98 insertions, 93 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
@@ -26,6 +26,25 @@
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
@@ -36,20 +55,6 @@
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 {
@@ -76,21 +81,21 @@ char *strstrlen(const char *haystack, int hLen, const char* needle, int nLen)
76 char needleChar; 81 char needleChar;
77 char haystackChar; 82 char haystackChar;
78 if (!needle || !haystack || !hLen || !nLen) 83 if (!needle || !haystack || !hLen || !nLen)
79 return 0; 84 return 0;
80 85
81 const char* hsearch = haystack; 86 const char* hsearch = haystack;
82 87
83 if ((needleChar = *needle++) != 0) { 88 if ((needleChar = *needle++) != 0) {
84 nLen--; //(to make up for needle++) 89 nLen--; //(to make up for needle++)
85 do { 90 do {
86 do { 91 do {
87 if ((haystackChar = *hsearch++) == 0) 92 if ((haystackChar = *hsearch++) == 0)
88 return (0); 93 return (0);
89 if (hsearch >= haystack + hLen) 94 if (hsearch >= haystack + hLen)
90 return (0); 95 return (0);
91 } while (haystackChar != needleChar); 96 } while (haystackChar != needleChar);
92 } while (strncmp(hsearch, needle, QMIN(hLen - (hsearch - haystack), nLen)) != 0); 97 } while (strncmp(hsearch, needle, QMIN(hLen - (hsearch - haystack), nLen)) != 0);
93 hsearch--; 98 hsearch--;
94 } 99 }
95 return ((char *)hsearch); 100 return ((char *)hsearch);
96} 101}
@@ -177,52 +182,52 @@ bool OPimTodoAccessXML::load() {
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') )
187 ++i; 192 ++i;
188 if ( i >= len-2 || (dt[i] == '/' && dt[i+1] == '>') ) 193 if ( i >= len-2 || (dt[i] == '/' && dt[i+1] == '>') )
189 break; 194 break;
190 195
191 // we have another attribute, read it. 196 // we have another attribute, read it.
192 int j = i; 197 int j = i;
193 while ( j < len && dt[j] != '=' ) 198 while ( j < len && dt[j] != '=' )
194 ++j; 199 ++j;
195 QCString attr( dt+i, j-i+1); 200 QCString attr( dt+i, j-i+1);
196 201
197 i = ++j; // skip = 202 i = ++j; // skip =
198 203
199 // find the start of quotes 204 // find the start of quotes
200 while ( i < len && dt[i] != '"' ) 205 while ( i < len && dt[i] != '"' )
201 ++i; 206 ++i;
202 j = ++i; 207 j = ++i;
203 208
204 bool haveUtf = FALSE; 209 bool haveUtf = FALSE;
205 bool haveEnt = FALSE; 210 bool haveEnt = FALSE;
206 while ( j < len && dt[j] != '"' ) { 211 while ( j < len && dt[j] != '"' ) {
207 if ( ((unsigned char)dt[j]) > 0x7f ) 212 if ( ((unsigned char)dt[j]) > 0x7f )
208 haveUtf = TRUE; 213 haveUtf = TRUE;
209 if ( dt[j] == '&' ) 214 if ( dt[j] == '&' )
210 haveEnt = TRUE; 215 haveEnt = TRUE;
211 ++j; 216 ++j;
212 } 217 }
213 if ( i == j ) { 218 if ( i == j ) {
214 // empty value 219 // empty value
215 i = j + 1; 220 i = j + 1;
216 continue; 221 continue;
217 } 222 }
218 223
219 QCString value( dt+i, j-i+1 ); 224 QCString value( dt+i, j-i+1 );
220 i = j + 1; 225 i = j + 1;
221 226
222 QString str = (haveUtf ? QString::fromUtf8( value ) 227 QString str = (haveUtf ? QString::fromUtf8( value )
223 : QString::fromLatin1( value ) ); 228 : QString::fromLatin1( value ) );
224 if ( haveEnt ) 229 if ( haveEnt )
225 str = Qtopia::plainString( str ); 230 str = Qtopia::plainString( str );
226 231
227 /* 232 /*
228 * add key + value 233 * add key + value
@@ -233,7 +238,7 @@ bool OPimTodoAccessXML::load() {
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;
@@ -256,7 +261,7 @@ bool OPimTodoAccessXML::load() {
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() {
@@ -264,9 +269,9 @@ bool OPimTodoAccessXML::reload() {
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";
@@ -307,7 +312,7 @@ bool OPimTodoAccessXML::save() {
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
@@ -345,7 +350,7 @@ void OPimTodoAccessXML::clear() {
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
@@ -404,13 +409,13 @@ QArray<int> OPimTodoAccessXML::overDue() {
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 }
@@ -463,8 +468,8 @@ void OPimTodoAccessXML::todo( QAsciiDict<int>* dict, OPimTodo& ev,
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 }
@@ -537,15 +542,15 @@ void OPimTodoAccessXML::todo( QAsciiDict<int>* dict, OPimTodo& ev,
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;
551} 556}
@@ -570,7 +575,7 @@ QString OPimTodoAccessXML::toString( const OPimTodo& ev )const {
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
@@ -617,7 +622,7 @@ QString OPimTodoAccessXML::toString( const OPimTodo& ev )const {
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
@@ -838,7 +843,7 @@ QArray<int> OPimTodoAccessXML::sorted( bool asc, int sortOrder,
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*/
@@ -891,19 +896,19 @@ QBitArray OPimTodoAccessXML::sup() {
891} 896}
892QArray<int> OPimTodoAccessXML::matchRegexp( const QRegExp &r ) const 897QArray<int> OPimTodoAccessXML::matchRegexp( const QRegExp &r ) const
893{ 898{
894 QArray<int> m_currentQuery( m_events.count() ); 899 QArray<int> m_currentQuery( m_events.count() );
895 uint arraycounter = 0; 900 uint arraycounter = 0;
896 901
897 QMap<int, OPimTodo>::ConstIterator it; 902 QMap<int, OPimTodo>::ConstIterator it;
898 for (it = m_events.begin(); it != m_events.end(); ++it ) { 903 for (it = m_events.begin(); it != m_events.end(); ++it ) {
899 if ( it.data().match( r ) ) 904 if ( it.data().match( r ) )
900 m_currentQuery[arraycounter++] = it.data().uid(); 905 m_currentQuery[arraycounter++] = it.data().uid();
901 906
902 } 907 }
903 // Shrink to fit.. 908 // Shrink to fit..
904 m_currentQuery.resize(arraycounter); 909 m_currentQuery.resize(arraycounter);
905 910
906 return m_currentQuery; 911 return m_currentQuery;
907} 912}
908 913
909} 914}