summaryrefslogtreecommitdiff
path: root/libopie/tododb.cpp
Unidiff
Diffstat (limited to 'libopie/tododb.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--libopie/tododb.cpp25
1 files changed, 13 insertions, 12 deletions
diff --git a/libopie/tododb.cpp b/libopie/tododb.cpp
index 10ea2f0..7814c4f 100644
--- a/libopie/tododb.cpp
+++ b/libopie/tododb.cpp
@@ -1,205 +1,206 @@
1 1
2#include <qdir.h> 2#include <qdir.h>
3#include <opie/tododb.h> 3#include <opie/tododb.h>
4#include <opie/xmltree.h> 4#include <opie/xmltree.h>
5#include <opie/todoresource.h> 5#include <opie/todoresource.h>
6#include <qpe/palmtoprecord.h> 6#include <qpe/palmtoprecord.h>
7#include <qpe/global.h> 7#include <qpe/global.h>
8 8
9namespace { 9namespace {
10 10
11class FileToDoResource : public ToDoResource { 11class FileToDoResource : public ToDoResource {
12public: 12public:
13 FileToDoResource() {}; 13 FileToDoResource() {};
14 bool save(const QString &name, const QValueList<ToDoEvent> &m_todos ){ 14 bool save(const QString &name, const QValueList<ToDoEvent> &m_todos ){
15 // prepare the XML 15 // prepare the XML
16 XMLElement *tasks = new XMLElement( ); 16 XMLElement *tasks = new XMLElement( );
17 tasks->setTagName("Tasks" ); 17 tasks->setTagName("Tasks" );
18 for( QValueList<ToDoEvent>::ConstIterator it = m_todos.begin(); it != m_todos.end(); ++it ){ 18 for( QValueList<ToDoEvent>::ConstIterator it = m_todos.begin(); it != m_todos.end(); ++it ){
19 XMLElement::AttributeMap map; 19 XMLElement::AttributeMap map;
20 XMLElement *task = new XMLElement(); 20 XMLElement *task = new XMLElement();
21 map.insert( "Completed", QString::number((int)(*it).isCompleted() ) ); 21 map.insert( "Completed", QString::number((int)(*it).isCompleted() ) );
22 map.insert( "HasDate", QString::number((int)(*it).hasDate() ) ); 22 map.insert( "HasDate", QString::number((int)(*it).hasDate() ) );
23 map.insert( "Priority", QString::number( (*it).priority() ) ); 23 map.insert( "Priority", QString::number( (*it).priority() ) );
24 if(!(*it).category().isEmpty() ){ 24 QArray<int> arrat = (*it).categories();
25 QArray<int> arrat(1); 25 QString attr;
26 arrat = Qtopia::Record::idsFromString( (*it).category() ); 26 for(uint i=0; i < arrat.count(); i++ ){
27 map.insert( "Categories", QString::number( arrat[0] ) ); 27 attr.append(QString::number(arrat[i])+";" );
28 }else 28 }
29 map.insert( "Categories", QString::null ); 29 if(!attr.isEmpty() ) // remove the last ;
30 attr.remove(attr.length()-1, 1 );
31 map.insert( "Categories", attr );
32 //else
33 //map.insert( "Categories", QString::null );
30 map.insert( "Description", (*it).description() ); 34 map.insert( "Description", (*it).description() );
31 if( (*it).hasDate() ){ 35 if( (*it).hasDate() ){
32 map.insert("DateYear", QString::number( (*it).date().year() ) ); 36 map.insert("DateYear", QString::number( (*it).date().year() ) );
33 map.insert("DateMonth", QString::number( (*it).date().month() ) ); 37 map.insert("DateMonth", QString::number( (*it).date().month() ) );
34 map.insert("DateDay", QString::number( (*it).date().day() ) ); 38 map.insert("DateDay", QString::number( (*it).date().day() ) );
35 } 39 }
36 map.insert("Uid", QString::number( (*it).uid() ) ); 40 map.insert("Uid", QString::number( (*it).uid() ) );
37 task->setTagName("Task" ); 41 task->setTagName("Task" );
38 task->setAttributes( map ); 42 task->setAttributes( map );
39 tasks->appendChild(task); 43 tasks->appendChild(task);
40 } 44 }
41 QFile file( name); 45 QFile file( name);
42 if( file.open(IO_WriteOnly ) ){ 46 if( file.open(IO_WriteOnly ) ){
43 QTextStream stream(&file ); 47 QTextStream stream(&file );
44 stream << "<!DOCTYPE Tasks>" << endl; 48 stream << "<!DOCTYPE Tasks>" << endl;
45 tasks->save(stream ); 49 tasks->save(stream );
46 delete tasks; 50 delete tasks;
47 file.close(); 51 file.close();
48 return true; 52 return true;
49 } 53 }
50 return false; 54 return false;
51 } 55 }
52 QValueList<ToDoEvent> load( const QString &name ){ 56 QValueList<ToDoEvent> load( const QString &name ){
53 qWarning("loading tododb" ); 57 qWarning("loading tododb" );
54 QValueList<ToDoEvent> m_todos; 58 QValueList<ToDoEvent> m_todos;
55 XMLElement *root = XMLElement::load( name ); 59 XMLElement *root = XMLElement::load( name );
56 if(root != 0l ){ // start parsing 60 if(root != 0l ){ // start parsing
57 qWarning("ToDoDB::load tagName(): %s", root->tagName().latin1() ); 61 qWarning("ToDoDB::load tagName(): %s", root->tagName().latin1() );
58 //if( root->tagName() == QString::fromLatin1("Tasks" ) ){// Start 62 //if( root->tagName() == QString::fromLatin1("Tasks" ) ){// Start
59 XMLElement *element = root->firstChild(); 63 XMLElement *element = root->firstChild();
60 element = element->firstChild(); 64 element = element->firstChild();
61 while( element ){ 65 while( element ){
62 qWarning("ToDoDB::load element tagName() : %s", element->tagName().latin1() ); 66 qWarning("ToDoDB::load element tagName() : %s", element->tagName().latin1() );
63 QString dummy; 67 QString dummy;
64 ToDoEvent event; 68 ToDoEvent event;
65 bool ok; 69 bool ok;
66 int dumInt; 70 int dumInt;
67 // completed 71 // completed
68 dummy = element->attribute("Completed" ); 72 dummy = element->attribute("Completed" );
69 dumInt = dummy.toInt(&ok ); 73 dumInt = dummy.toInt(&ok );
70 if(ok ) event.setCompleted( dumInt == 0 ? false : true ); 74 if(ok ) event.setCompleted( dumInt == 0 ? false : true );
71 // hasDate 75 // hasDate
72 dummy = element->attribute("HasDate" ); 76 dummy = element->attribute("HasDate" );
73 dumInt = dummy.toInt(&ok ); 77 dumInt = dummy.toInt(&ok );
74 if(ok ) event.setHasDate( dumInt == 0 ? false: true ); 78 if(ok ) event.setHasDate( dumInt == 0 ? false: true );
75 // set the date 79 // set the date
76 bool hasDa = dumInt; 80 bool hasDa = dumInt;
77 if ( hasDa ) { //parse the date 81 if ( hasDa ) { //parse the date
78 int year, day, month = 0; 82 int year, day, month = 0;
79 year = day = month; 83 year = day = month;
80 // year 84 // year
81 dummy = element->attribute("DateYear" ); 85 dummy = element->attribute("DateYear" );
82 dumInt = dummy.toInt(&ok ); 86 dumInt = dummy.toInt(&ok );
83 if( ok ) year = dumInt; 87 if( ok ) year = dumInt;
84 // month 88 // month
85 dummy = element->attribute("DateMonth" ); 89 dummy = element->attribute("DateMonth" );
86 dumInt = dummy.toInt(&ok ); 90 dumInt = dummy.toInt(&ok );
87 if(ok ) month = dumInt; 91 if(ok ) month = dumInt;
88 dummy = element->attribute("DateDay" ); 92 dummy = element->attribute("DateDay" );
89 dumInt = dummy.toInt(&ok ); 93 dumInt = dummy.toInt(&ok );
90 if(ok ) day = dumInt; 94 if(ok ) day = dumInt;
91 // set the date 95 // set the date
92 QDate date( year, month, day ); 96 QDate date( year, month, day );
93 event.setDate( date); 97 event.setDate( date);
94 } 98 }
95 dummy = element->attribute("Priority" ); 99 dummy = element->attribute("Priority" );
96 dumInt = dummy.toInt(&ok ); 100 dumInt = dummy.toInt(&ok );
97 if(!ok ) dumInt = ToDoEvent::NORMAL; 101 if(!ok ) dumInt = ToDoEvent::NORMAL;
98 event.setPriority( dumInt ); 102 event.setPriority( dumInt );
99 //description 103 //description
100 dummy = element->attribute("Description" ); 104 dummy = element->attribute("Description" );
101 event.setDescription( dummy ); 105 event.setDescription( dummy );
102 // category 106 // category
103 dummy = element->attribute("Categories" ); 107 dummy = element->attribute("Categories" );
104 dumInt = dummy.toInt(&ok ); 108 QStringList ids = QStringList::split(";", dummy );
105 if(ok ) { 109 event.setCategories( ids );
106 QArray<int> arrat(1); 110
107 arrat[0] = dumInt;
108 event.setCategory( Qtopia::Record::idsToString( arrat ) );
109 }
110 //uid 111 //uid
111 dummy = element->attribute("Uid" ); 112 dummy = element->attribute("Uid" );
112 dumInt = dummy.toInt(&ok ); 113 dumInt = dummy.toInt(&ok );
113 if(ok ) event.setUid( dumInt ); 114 if(ok ) event.setUid( dumInt );
114 m_todos.append( event ); 115 m_todos.append( event );
115 element = element->nextChild(); // next element 116 element = element->nextChild(); // next element
116 } 117 }
117 //} 118 //}
118 }else { 119 }else {
119 qWarning("could not load" ); 120 qWarning("could not load" );
120 } 121 }
121 delete root; 122 delete root;
122 qWarning("returning" ); 123 qWarning("returning" );
123 return m_todos; 124 return m_todos;
124 } 125 }
125}; 126};
126 127
127} 128}
128 129
129ToDoDB::ToDoDB(const QString &fileName, ToDoResource *res ){ 130ToDoDB::ToDoDB(const QString &fileName, ToDoResource *res ){
130 m_fileName = fileName; 131 m_fileName = fileName;
131 if( fileName.isEmpty() && res == 0 ){ 132 if( fileName.isEmpty() && res == 0 ){
132 m_fileName = Global::applicationFileName("todolist","todolist.xml"); 133 m_fileName = Global::applicationFileName("todolist","todolist.xml");
133 res = new FileToDoResource(); 134 res = new FileToDoResource();
134 //qWarning("%s", m_fileName.latin1() ); 135 //qWarning("%s", m_fileName.latin1() );
135 }else if(res == 0 ){ // let's create a ToDoResource for xml 136 }else if(res == 0 ){ // let's create a ToDoResource for xml
136 res = new FileToDoResource(); 137 res = new FileToDoResource();
137 } 138 }
138 m_res = res; 139 m_res = res;
139 load(); 140 load();
140} 141}
141ToDoResource* ToDoDB::resource(){ 142ToDoResource* ToDoDB::resource(){
142 return m_res; 143 return m_res;
143}; 144};
144void ToDoDB::setResource( ToDoResource *res ) 145void ToDoDB::setResource( ToDoResource *res )
145{ 146{
146 delete m_res; 147 delete m_res;
147 m_res = res; 148 m_res = res;
148} 149}
149ToDoDB::~ToDoDB() 150ToDoDB::~ToDoDB()
150{ 151{
151 delete m_res; 152 delete m_res;
152} 153}
153QValueList<ToDoEvent> ToDoDB::effectiveToDos(const QDate &from, const QDate &to, 154QValueList<ToDoEvent> ToDoDB::effectiveToDos(const QDate &from, const QDate &to,
154 bool all ) 155 bool all )
155{ 156{
156 QValueList<ToDoEvent> events; 157 QValueList<ToDoEvent> events;
157 for( QValueList<ToDoEvent>::Iterator it = m_todos.begin(); it!= m_todos.end(); ++it ){ 158 for( QValueList<ToDoEvent>::Iterator it = m_todos.begin(); it!= m_todos.end(); ++it ){
158 if( (*it).hasDate() ){ 159 if( (*it).hasDate() ){
159 if( (*it).date() >= from && (*it).date() <= to ) 160 if( (*it).date() >= from && (*it).date() <= to )
160 events.append( (*it) ); 161 events.append( (*it) );
161 }else if( all ){ 162 }else if( all ){
162 events.append( (*it) ); 163 events.append( (*it) );
163 } 164 }
164 } 165 }
165 return events; 166 return events;
166} 167}
167QValueList<ToDoEvent> ToDoDB::effectiveToDos(const QDate &from, 168QValueList<ToDoEvent> ToDoDB::effectiveToDos(const QDate &from,
168 bool all) 169 bool all)
169{ 170{
170 return effectiveToDos( from, QDate::currentDate(), all ); 171 return effectiveToDos( from, QDate::currentDate(), all );
171} 172}
172QValueList<ToDoEvent> ToDoDB::overDue() 173QValueList<ToDoEvent> ToDoDB::overDue()
173{ 174{
174 QValueList<ToDoEvent> events; 175 QValueList<ToDoEvent> events;
175 for( QValueList<ToDoEvent>::Iterator it = m_todos.begin(); it!= m_todos.end(); ++it ){ 176 for( QValueList<ToDoEvent>::Iterator it = m_todos.begin(); it!= m_todos.end(); ++it ){
176 if( (*it).isOverdue() ) 177 if( (*it).isOverdue() )
177 events.append((*it) ); 178 events.append((*it) );
178 } 179 }
179 return events; 180 return events;
180} 181}
181QValueList<ToDoEvent> ToDoDB::rawToDos() 182QValueList<ToDoEvent> ToDoDB::rawToDos()
182{ 183{
183 return m_todos; 184 return m_todos;
184} 185}
185void ToDoDB::addEvent( const ToDoEvent &event ) 186void ToDoDB::addEvent( const ToDoEvent &event )
186{ 187{
187 m_todos.append( event ); 188 m_todos.append( event );
188} 189}
189void ToDoDB::editEvent( const ToDoEvent &event ) 190void ToDoDB::editEvent( const ToDoEvent &event )
190{ 191{
191 m_todos.remove( event ); 192 m_todos.remove( event );
192 m_todos.append( event ); 193 m_todos.append( event );
193} 194}
194void ToDoDB::removeEvent( const ToDoEvent &event ) 195void ToDoDB::removeEvent( const ToDoEvent &event )
195{ 196{
196 m_todos.remove( event ); 197 m_todos.remove( event );
197} 198}
198void ToDoDB::reload() 199void ToDoDB::reload()
199{ 200{
200 load(); 201 load();
201} 202}
202void ToDoDB::setFileName(const QString &file ) 203void ToDoDB::setFileName(const QString &file )
203{ 204{
204 m_fileName =file; 205 m_fileName =file;
205} 206}