summaryrefslogtreecommitdiff
path: root/libopie/tododb.cpp
authorzecke <zecke>2002-03-19 19:14:32 (UTC)
committer zecke <zecke>2002-03-19 19:14:32 (UTC)
commitc23db0c35b77cc1656ac8822ca948e73c50e8ee6 (patch) (side-by-side diff)
treef1f61cd24074a9ce60561e13681c386e89088dc9 /libopie/tododb.cpp
parent51762a579019d09fc1af83ef4838260493b534a7 (diff)
downloadopie-c23db0c35b77cc1656ac8822ca948e73c50e8ee6.zip
opie-c23db0c35b77cc1656ac8822ca948e73c50e8ee6.tar.gz
opie-c23db0c35b77cc1656ac8822ca948e73c50e8ee6.tar.bz2
Make multiple backends possible
Diffstat (limited to 'libopie/tododb.cpp') (more/less context) (show whitespace changes)
-rw-r--r--libopie/tododb.cpp221
1 files changed, 120 insertions, 101 deletions
diff --git a/libopie/tododb.cpp b/libopie/tododb.cpp
index eb17674..91331d0 100644
--- a/libopie/tododb.cpp
+++ b/libopie/tododb.cpp
@@ -1,94 +1,67 @@
#include <qdir.h>
#include <opie/tododb.h>
#include <opie/xmltree.h>
+#include <opie/todoresource.h>
#include <qpe/palmtoprecord.h>
#include <qpe/global.h>
-ToDoDB::ToDoDB(const QString &fileName = QString::null ){
- m_fileName = fileName;
- if( fileName.isEmpty() ){
- m_fileName = Global::applicationFileName("todolist","todolist.xml");;
- qWarning("%s", m_fileName.latin1() );
- }
+namespace {
- load();
-}
-ToDoDB::~ToDoDB()
-{
-
-}
-QValueList<ToDoEvent> ToDoDB::effectiveToDos(const QDate &from, const QDate &to,
- bool all )
-{
- QValueList<ToDoEvent> events;
- for( QValueList<ToDoEvent>::Iterator it = m_todos.begin(); it!= m_todos.end(); ++it ){
+class FileToDoResource : public ToDoResource {
+public:
+ FileToDoResource() {};
+ bool save(const QString &name, const QValueList<ToDoEvent> &m_todos ){
+ // prepare the XML
+ XMLElement *tasks = new XMLElement( );
+ tasks->setTagName("Tasks" );
+ for( QValueList<ToDoEvent>::ConstIterator it = m_todos.begin(); it != m_todos.end(); ++it ){
+ XMLElement::AttributeMap map;
+ XMLElement *task = new XMLElement();
+ map.insert( "Completed", QString::number((int)(*it).isCompleted() ) );
+ map.insert( "HasDate", QString::number((int)(*it).hasDate() ) );
+ map.insert( "Priority", QString::number( (*it).priority() ) );
+ if(!(*it).category().isEmpty() ){
+ QArray<int> arrat(1);
+ arrat = Qtopia::Record::idsFromString( (*it).category() );
+ map.insert( "Categories", QString::number( arrat[0] ) );
+ }else
+ map.insert( "Categories", QString::null );
+ map.insert( "Description", (*it).description() );
if( (*it).hasDate() ){
- if( (*it).date() >= from && (*it).date() <= to )
- events.append( (*it) );
- }else if( all ){
- events.append( (*it) );
- }
- }
- return events;
-}
-QValueList<ToDoEvent> ToDoDB::effectiveToDos(const QDate &from,
- bool all)
-{
- return effectiveToDos( from, QDate::currentDate(), all );
-}
-QValueList<ToDoEvent> ToDoDB::overDue()
-{
- QValueList<ToDoEvent> events;
- for( QValueList<ToDoEvent>::Iterator it = m_todos.begin(); it!= m_todos.end(); ++it ){
- if( (*it).isOverdue() )
- events.append((*it) );
- }
- return events;
-}
-QValueList<ToDoEvent> ToDoDB::rawToDos()
-{
- return m_todos;
-}
-void ToDoDB::addEvent( const ToDoEvent &event )
-{
- m_todos.append( event );
-}
-void ToDoDB::editEvent( const ToDoEvent &event )
-{
- m_todos.remove( event );
- m_todos.append( event );
-}
-void ToDoDB::removeEvent( const ToDoEvent &event )
-{
- m_todos.remove( event );
+ map.insert("DateYear", QString::number( (*it).date().year() ) );
+ map.insert("DateMonth", QString::number( (*it).date().month() ) );
+ map.insert("DateDay", QString::number( (*it).date().day() ) );
}
-void ToDoDB::reload()
-{
- load();
+ map.insert("Uid", QString::number( (*it).uid() ) );
+ task->setTagName("Task" );
+ task->setAttributes( map );
+ tasks->appendChild(task);
}
-void ToDoDB::setFileName(const QString &file )
-{
- m_fileName =file;
+ QFile file( name);
+ if( file.open(IO_WriteOnly ) ){
+ QTextStream stream(&file );
+ stream << "<!DOCTYPE Tasks>" << endl;
+ tasks->save(stream );
+ delete tasks;
+ file.close();
+ return true;
}
-QString ToDoDB::fileName()const
-{
- return m_fileName;
+ return false;
}
-void ToDoDB::load()
-{
+ QValueList<ToDoEvent> load( const QString &name ){
qWarning("loading tododb" );
- m_todos.clear();
- XMLElement *root = XMLElement::load( m_fileName );
+ QValueList<ToDoEvent> m_todos;
+ XMLElement *root = XMLElement::load( name );
if(root != 0l ){ // start parsing
qWarning("ToDoDB::load tagName(): %s", root->tagName().latin1() );
//if( root->tagName() == QString::fromLatin1("Tasks" ) ){// Start
XMLElement *element = root->firstChild();
element = element->firstChild();
while( element ){
qWarning("ToDoDB::load element tagName() : %s", element->tagName().latin1() );
QString dummy;
ToDoEvent event;
bool ok;
int dumInt;
// completed
@@ -128,69 +101,115 @@ void ToDoDB::load()
event.setDescription( dummy );
// category
dummy = element->attribute("Categories" );
dumInt = dummy.toInt(&ok );
if(ok ) {
QArray<int> arrat(1);
arrat[0] = dumInt;
event.setCategory( Qtopia::Record::idsToString( arrat ) );
}
//uid
dummy = element->attribute("Uid" );
dumInt = dummy.toInt(&ok );
- if(ok ) event.m_uid = dumInt;
+ if(ok ) event.setUid( dumInt );
m_todos.append( event );
element = element->nextChild(); // next element
}
//}
}else {
qWarning("could not load" );
}
delete root;
+ return m_todos;
}
-bool ToDoDB::save()
+};
+
+}
+
+ToDoDB::ToDoDB(const QString &fileName = QString::null, ToDoResource *res ){
+ m_fileName = fileName;
+ if( fileName.isEmpty() && res == 0 ){
+ m_fileName = Global::applicationFileName("todolist","todolist.xml");;
+ //qWarning("%s", m_fileName.latin1() );
+ }else if(res == 0 ){ // let's create a ToDoResource for xml
+ res = new FileToDoResource();
+ }
+ m_res = res;
+ load();
+}
+ToDoDB::~ToDoDB()
{
-// prepare the XML
- XMLElement *tasks = new XMLElement( );
- tasks->setTagName("Tasks" );
+
+}
+QValueList<ToDoEvent> ToDoDB::effectiveToDos(const QDate &from, const QDate &to,
+ bool all )
+{
+ QValueList<ToDoEvent> events;
for( QValueList<ToDoEvent>::Iterator it = m_todos.begin(); it != m_todos.end(); ++it ){
- XMLElement::AttributeMap map;
- XMLElement *task = new XMLElement();
- map.insert( "Completed", QString::number((int)(*it).isCompleted() ) );
- map.insert( "HasDate", QString::number((int)(*it).hasDate() ) );
- map.insert( "Priority", QString::number( (*it).priority() ) );
- if(!(*it).category().isEmpty() ){
- QArray<int> arrat(1);
- arrat = Qtopia::Record::idsFromString( (*it).category() );
- map.insert( "Categories", QString::number( arrat[0] ) );
- }else
- map.insert( "Categories", QString::null );
- map.insert( "Description", (*it).description() );
if( (*it).hasDate() ){
- map.insert("DateYear", QString::number( (*it).date().year() ) );
- map.insert("DateMonth", QString::number( (*it).date().month() ) );
- map.insert("DateDay", QString::number( (*it).date().day() ) );
+ if( (*it).date() >= from && (*it).date() <= to )
+ events.append( (*it) );
+ }else if( all ){
+ events.append( (*it) );
}
- map.insert("Uid", QString::number( (*it).uid() ) );
- task->setTagName("Task" );
- task->setAttributes( map );
- tasks->appendChild(task);
}
- QFile file( m_fileName);
- if( file.open(IO_WriteOnly ) ){
- QTextStream stream(&file );
- stream << "<!DOCTYPE Tasks>" << endl;
- tasks->save(stream );
- delete tasks;
- file.close();
- return true;
+ return events;
}
- return false;
+QValueList<ToDoEvent> ToDoDB::effectiveToDos(const QDate &from,
+ bool all)
+{
+ return effectiveToDos( from, QDate::currentDate(), all );
+}
+QValueList<ToDoEvent> ToDoDB::overDue()
+{
+ QValueList<ToDoEvent> events;
+ for( QValueList<ToDoEvent>::Iterator it = m_todos.begin(); it!= m_todos.end(); ++it ){
+ if( (*it).isOverdue() )
+ events.append((*it) );
+ }
+ return events;
+}
+QValueList<ToDoEvent> ToDoDB::rawToDos()
+{
+ return m_todos;
+}
+void ToDoDB::addEvent( const ToDoEvent &event )
+{
+ m_todos.append( event );
+}
+void ToDoDB::editEvent( const ToDoEvent &event )
+{
+ m_todos.remove( event );
+ m_todos.append( event );
+}
+void ToDoDB::removeEvent( const ToDoEvent &event )
+{
+ m_todos.remove( event );
+}
+void ToDoDB::reload()
+{
+ load();
+}
+void ToDoDB::setFileName(const QString &file )
+{
+ m_fileName =file;
+}
+QString ToDoDB::fileName()const
+{
+ return m_fileName;
+}
+void ToDoDB::load()
+{
+
+}
+bool ToDoDB::save()
+{
+ return m_res->save( m_fileName, m_todos );
}