summaryrefslogtreecommitdiff
authorzecke <zecke>2002-10-18 03:07:09 (UTC)
committer zecke <zecke>2002-10-18 03:07:09 (UTC)
commit86b3550348cf896b568e98d21da577c3f35a1a4a (patch) (side-by-side diff)
tree865a24eb260564d502b933a9af105871d2da6d0f
parent218bc4583c545db50f3475930d61b1c76aca3fbd (diff)
downloadopie-86b3550348cf896b568e98d21da577c3f35a1a4a.zip
opie-86b3550348cf896b568e98d21da577c3f35a1a4a.tar.gz
opie-86b3550348cf896b568e98d21da577c3f35a1a4a.tar.bz2
Hi Stefan,
this commit should fix your problems... The XML todo backend was doing some stuff wrong with sorted Records. I even have a Comment describing this behaviour which is from the current POV wrong.. need to check my brain what I though this should do
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--libopie/pim/otodoaccessxml.cpp24
-rw-r--r--libopie2/opiepim/backend/otodoaccessxml.cpp24
2 files changed, 38 insertions, 10 deletions
diff --git a/libopie/pim/otodoaccessxml.cpp b/libopie/pim/otodoaccessxml.cpp
index 3b4cab2..7a55c67 100644
--- a/libopie/pim/otodoaccessxml.cpp
+++ b/libopie/pim/otodoaccessxml.cpp
@@ -58,129 +58,129 @@ bool OTodoAccessXML::load() {
int len = ba.size();
int i = 0;
char *point;
const char* collectionString = "<Task ";
while ( dt+i != 0 && ( point = strstr( dt+i, collectionString ) ) != 0l ) {
i = point -dt;
i+= strlen(collectionString);
OTodo ev;
m_year = m_month = m_day = 0;
while ( TRUE ) {
while ( i < len && (dt[i] == ' ' || dt[i] == '\n' || dt[i] == '\r') )
++i;
if ( i >= len-2 || (dt[i] == '/' && dt[i+1] == '>') )
break;
// we have another attribute, read it.
int j = i;
while ( j < len && dt[j] != '=' )
++j;
QCString attr( dt+i, j-i+1);
i = ++j; // skip =
// find the start of quotes
while ( i < len && dt[i] != '"' )
++i;
j = ++i;
bool haveUtf = FALSE;
bool haveEnt = FALSE;
while ( j < len && dt[j] != '"' ) {
if ( ((unsigned char)dt[j]) > 0x7f )
haveUtf = TRUE;
if ( dt[j] == '&' )
haveEnt = TRUE;
++j;
}
if ( i == j ) {
// empty value
i = j + 1;
continue;
}
QCString value( dt+i, j-i+1 );
i = j + 1;
QString str = (haveUtf ? QString::fromUtf8( value )
: QString::fromLatin1( value ) );
if ( haveEnt )
str = Qtopia::plainString( str );
/*
* add key + value
*/
todo( &dict, ev, attr, str );
}
/*
* now add it
*/
m_events.insert(ev.uid(), ev );
}
- qWarning("counts %d", m_events.count() );
+ qWarning("counts %d records loaded!", m_events.count() );
return true;
}
bool OTodoAccessXML::reload() {
return load();
}
bool OTodoAccessXML::save() {
// qWarning("saving");
if (!m_opened || !m_changed ) {
// qWarning("not saving");
return true;
}
QString strNewFile = m_file + ".new";
QFile f( strNewFile );
if (!f.open( IO_WriteOnly|IO_Raw ) )
return false;
int written;
QString out;
out = "<!DOCTYPE Tasks>\n<Tasks>\n";
// for all todos
QMap<int, OTodo>::Iterator it;
for (it = m_events.begin(); it != m_events.end(); ++it ) {
out+= "<Task " + toString( (*it) ) + " />\n";
QCString cstr = out.utf8();
written = f.writeBlock( cstr.data(), cstr.length() );
/* less written then we wanted */
if ( written != (int)cstr.length() ) {
f.close();
QFile::remove( strNewFile );
return false;
}
out = QString::null;
}
out += "</Tasks>";
QCString cstr = out.utf8();
written = f.writeBlock( cstr.data(), cstr.length() );
if ( written != (int)cstr.length() ) {
f.close();
QFile::remove( strNewFile );
return false;
}
/* flush before renaming */
f.close();
if( ::rename( strNewFile.latin1(), m_file.latin1() ) < 0 ) {
// qWarning("error renaming");
QFile::remove( strNewFile );
}
m_changed = false;
return true;
}
QArray<int> OTodoAccessXML::allRecords()const {
QArray<int> ids( m_events.count() );
QMap<int, OTodo>::ConstIterator it;
int i = 0;
for ( it = m_events.begin(); it != m_events.end(); ++it ) {
ids[i] = it.key();
i++;
@@ -457,93 +457,107 @@ public:
/* completed */
case 0: {
ret = 0;
if ( con1->todo.isCompleted() ) ret++;
if ( con2->todo.isCompleted() ) ret--;
break;
}
/* priority */
case 1: {
ret = con1->todo.priority() - con2->todo.priority();
qWarning(" priority %d %d %d", ret,
con1->todo.priority(),
con2->todo.priority()
);
break;
}
/* description */
case 2: {
QString str1 = string( con1->todo );
QString str2 = string( con2->todo );
ret = QString::compare( str1, str2 );
break;
}
/* deadline */
case 3: {
/* either bot got a dueDate
* or one of them got one
*/
if ( con1->todo.hasDueDate() &&
con2->todo.hasDueDate() )
ret = con1->todo.dueDate().daysTo( con2->todo.dueDate() );
else if ( con1->todo.hasDueDate() )
ret = -1;
else if ( con2->todo.hasDueDate() )
ret = 0;
break;
}
default:
ret = 0;
break;
};
/* twist it we're not ascending*/
if (!m_asc)
ret = ret * -1;
return ret;
}
private:
bool m_asc;
int m_sort;
};
QArray<int> OTodoAccessXML::sorted( bool asc, int sortOrder,
int sortFilter, int cat ) {
qWarning("sorted! %d cat", cat);
OTodoXMLVector vector(m_events.count(), asc,sortOrder );
QMap<int, OTodo>::Iterator it;
int item = 0;
bool bCat = sortFilter & 1 ? true : false;
bool bOnly = sortFilter & 2 ? true : false;
+ bool comp = sortFilter & 4 ? true : false;
for ( it = m_events.begin(); it != m_events.end(); ++it ) {
/* show category */
if ( bCat && cat != 0)
- if (!(*it).categories().contains( cat ) )
+ if (!(*it).categories().contains( cat ) ) {
+ qWarning("category mis match");
continue;
- /* isOverdue but we should not show overdue */
- if ( (*it).isOverdue() && !bOnly )
+ }
+ /* isOverdue but we should not show overdue - why?*/
+/* if ( (*it).isOverdue() && !bOnly ) {
+ qWarning("item is overdue but !bOnly");
continue;
- if ( !(*it).isOverdue() && bOnly )
+ }
+*/
+ if ( !(*it).isOverdue() && bOnly ) {
+ qWarning("item is not overdue but bOnly checked");
continue;
+ }
+
+ if ((*it).isCompleted() && comp ) {
+ qWarning("completed continue!");
+ continue;
+ }
OTodoXMLContainer* con = new OTodoXMLContainer();
con->todo = (*it);
vector.insert(item, con );
item++;
}
+ qWarning("XXX %d Items added", item);
vector.resize( item );
/* sort it now */
vector.sort();
/* now get the uids */
QArray<int> array( vector.count() );
for (uint i= 0; i < vector.count(); i++ ) {
array[i] = ( vector.at(i) )->todo.uid();
}
qWarning("array count = %d %d", array.count(), vector.count() );
return array;
};
diff --git a/libopie2/opiepim/backend/otodoaccessxml.cpp b/libopie2/opiepim/backend/otodoaccessxml.cpp
index 3b4cab2..7a55c67 100644
--- a/libopie2/opiepim/backend/otodoaccessxml.cpp
+++ b/libopie2/opiepim/backend/otodoaccessxml.cpp
@@ -58,129 +58,129 @@ bool OTodoAccessXML::load() {
int len = ba.size();
int i = 0;
char *point;
const char* collectionString = "<Task ";
while ( dt+i != 0 && ( point = strstr( dt+i, collectionString ) ) != 0l ) {
i = point -dt;
i+= strlen(collectionString);
OTodo ev;
m_year = m_month = m_day = 0;
while ( TRUE ) {
while ( i < len && (dt[i] == ' ' || dt[i] == '\n' || dt[i] == '\r') )
++i;
if ( i >= len-2 || (dt[i] == '/' && dt[i+1] == '>') )
break;
// we have another attribute, read it.
int j = i;
while ( j < len && dt[j] != '=' )
++j;
QCString attr( dt+i, j-i+1);
i = ++j; // skip =
// find the start of quotes
while ( i < len && dt[i] != '"' )
++i;
j = ++i;
bool haveUtf = FALSE;
bool haveEnt = FALSE;
while ( j < len && dt[j] != '"' ) {
if ( ((unsigned char)dt[j]) > 0x7f )
haveUtf = TRUE;
if ( dt[j] == '&' )
haveEnt = TRUE;
++j;
}
if ( i == j ) {
// empty value
i = j + 1;
continue;
}
QCString value( dt+i, j-i+1 );
i = j + 1;
QString str = (haveUtf ? QString::fromUtf8( value )
: QString::fromLatin1( value ) );
if ( haveEnt )
str = Qtopia::plainString( str );
/*
* add key + value
*/
todo( &dict, ev, attr, str );
}
/*
* now add it
*/
m_events.insert(ev.uid(), ev );
}
- qWarning("counts %d", m_events.count() );
+ qWarning("counts %d records loaded!", m_events.count() );
return true;
}
bool OTodoAccessXML::reload() {
return load();
}
bool OTodoAccessXML::save() {
// qWarning("saving");
if (!m_opened || !m_changed ) {
// qWarning("not saving");
return true;
}
QString strNewFile = m_file + ".new";
QFile f( strNewFile );
if (!f.open( IO_WriteOnly|IO_Raw ) )
return false;
int written;
QString out;
out = "<!DOCTYPE Tasks>\n<Tasks>\n";
// for all todos
QMap<int, OTodo>::Iterator it;
for (it = m_events.begin(); it != m_events.end(); ++it ) {
out+= "<Task " + toString( (*it) ) + " />\n";
QCString cstr = out.utf8();
written = f.writeBlock( cstr.data(), cstr.length() );
/* less written then we wanted */
if ( written != (int)cstr.length() ) {
f.close();
QFile::remove( strNewFile );
return false;
}
out = QString::null;
}
out += "</Tasks>";
QCString cstr = out.utf8();
written = f.writeBlock( cstr.data(), cstr.length() );
if ( written != (int)cstr.length() ) {
f.close();
QFile::remove( strNewFile );
return false;
}
/* flush before renaming */
f.close();
if( ::rename( strNewFile.latin1(), m_file.latin1() ) < 0 ) {
// qWarning("error renaming");
QFile::remove( strNewFile );
}
m_changed = false;
return true;
}
QArray<int> OTodoAccessXML::allRecords()const {
QArray<int> ids( m_events.count() );
QMap<int, OTodo>::ConstIterator it;
int i = 0;
for ( it = m_events.begin(); it != m_events.end(); ++it ) {
ids[i] = it.key();
i++;
@@ -457,93 +457,107 @@ public:
/* completed */
case 0: {
ret = 0;
if ( con1->todo.isCompleted() ) ret++;
if ( con2->todo.isCompleted() ) ret--;
break;
}
/* priority */
case 1: {
ret = con1->todo.priority() - con2->todo.priority();
qWarning(" priority %d %d %d", ret,
con1->todo.priority(),
con2->todo.priority()
);
break;
}
/* description */
case 2: {
QString str1 = string( con1->todo );
QString str2 = string( con2->todo );
ret = QString::compare( str1, str2 );
break;
}
/* deadline */
case 3: {
/* either bot got a dueDate
* or one of them got one
*/
if ( con1->todo.hasDueDate() &&
con2->todo.hasDueDate() )
ret = con1->todo.dueDate().daysTo( con2->todo.dueDate() );
else if ( con1->todo.hasDueDate() )
ret = -1;
else if ( con2->todo.hasDueDate() )
ret = 0;
break;
}
default:
ret = 0;
break;
};
/* twist it we're not ascending*/
if (!m_asc)
ret = ret * -1;
return ret;
}
private:
bool m_asc;
int m_sort;
};
QArray<int> OTodoAccessXML::sorted( bool asc, int sortOrder,
int sortFilter, int cat ) {
qWarning("sorted! %d cat", cat);
OTodoXMLVector vector(m_events.count(), asc,sortOrder );
QMap<int, OTodo>::Iterator it;
int item = 0;
bool bCat = sortFilter & 1 ? true : false;
bool bOnly = sortFilter & 2 ? true : false;
+ bool comp = sortFilter & 4 ? true : false;
for ( it = m_events.begin(); it != m_events.end(); ++it ) {
/* show category */
if ( bCat && cat != 0)
- if (!(*it).categories().contains( cat ) )
+ if (!(*it).categories().contains( cat ) ) {
+ qWarning("category mis match");
continue;
- /* isOverdue but we should not show overdue */
- if ( (*it).isOverdue() && !bOnly )
+ }
+ /* isOverdue but we should not show overdue - why?*/
+/* if ( (*it).isOverdue() && !bOnly ) {
+ qWarning("item is overdue but !bOnly");
continue;
- if ( !(*it).isOverdue() && bOnly )
+ }
+*/
+ if ( !(*it).isOverdue() && bOnly ) {
+ qWarning("item is not overdue but bOnly checked");
continue;
+ }
+
+ if ((*it).isCompleted() && comp ) {
+ qWarning("completed continue!");
+ continue;
+ }
OTodoXMLContainer* con = new OTodoXMLContainer();
con->todo = (*it);
vector.insert(item, con );
item++;
}
+ qWarning("XXX %d Items added", item);
vector.resize( item );
/* sort it now */
vector.sort();
/* now get the uids */
QArray<int> array( vector.count() );
for (uint i= 0; i < vector.count(); i++ ) {
array[i] = ( vector.at(i) )->todo.uid();
}
qWarning("array count = %d %d", array.count(), vector.count() );
return array;
};