-rw-r--r-- | libopie/pim/odatebookaccessbackend_xml.cpp | 4 | ||||
-rw-r--r-- | libopie2/opiepim/backend/odatebookaccessbackend_xml.cpp | 4 |
2 files changed, 2 insertions, 6 deletions
diff --git a/libopie/pim/odatebookaccessbackend_xml.cpp b/libopie/pim/odatebookaccessbackend_xml.cpp index 5239d84..bc51996 100644 --- a/libopie/pim/odatebookaccessbackend_xml.cpp +++ b/libopie/pim/odatebookaccessbackend_xml.cpp | |||
@@ -58,234 +58,232 @@ namespace { | |||
58 | }; | 58 | }; |
59 | inline void save( const OEvent& ev, QString& buf ) { | 59 | inline void save( const OEvent& ev, QString& buf ) { |
60 | buf += " description=\"" + Qtopia::escapeString(ev.description() ) + "\""; | 60 | buf += " description=\"" + Qtopia::escapeString(ev.description() ) + "\""; |
61 | if (!ev.location().isEmpty() ) | 61 | if (!ev.location().isEmpty() ) |
62 | buf += " location=\"" + Qtopia::escapeString(ev.location() ) + "\""; | 62 | buf += " location=\"" + Qtopia::escapeString(ev.location() ) + "\""; |
63 | 63 | ||
64 | buf += " categories=\""+ Qtopia::escapeString( Qtopia::Record::idsToString( ev.categories() ) ) + "\""; | 64 | buf += " categories=\""+ Qtopia::escapeString( Qtopia::Record::idsToString( ev.categories() ) ) + "\""; |
65 | buf += " uid=\"" + QString::number( ev.uid() ) + "\""; | 65 | buf += " uid=\"" + QString::number( ev.uid() ) + "\""; |
66 | 66 | ||
67 | if (ev.isAllDay() ) | 67 | if (ev.isAllDay() ) |
68 | buf += " type=\"AllDay\""; | 68 | buf += " type=\"AllDay\""; |
69 | 69 | ||
70 | if (ev.hasNotifiers() ) { | 70 | if (ev.hasNotifiers() ) { |
71 | OPimAlarm alarm = ev.notifiers().alarms()[0]; // take only the first | 71 | OPimAlarm alarm = ev.notifiers().alarms()[0]; // take only the first |
72 | int minutes = alarm.dateTime().secsTo( ev.startDateTime() ) / 60; | 72 | int minutes = alarm.dateTime().secsTo( ev.startDateTime() ) / 60; |
73 | buf += " alarm=\"" + QString::number(minutes) + "\" sound=\""; | 73 | buf += " alarm=\"" + QString::number(minutes) + "\" sound=\""; |
74 | if ( alarm.sound() == OPimAlarm::Loud ) | 74 | if ( alarm.sound() == OPimAlarm::Loud ) |
75 | buf += "loud"; | 75 | buf += "loud"; |
76 | else | 76 | else |
77 | buf += "silent"; | 77 | buf += "silent"; |
78 | buf += "\""; | 78 | buf += "\""; |
79 | } | 79 | } |
80 | if ( ev.hasRecurrence() ) { | 80 | if ( ev.hasRecurrence() ) { |
81 | buf += ev.recurrence().toString(); | 81 | buf += ev.recurrence().toString(); |
82 | } | 82 | } |
83 | 83 | ||
84 | /* | 84 | /* |
85 | * fscking timezones :) well, we'll first convert | 85 | * fscking timezones :) well, we'll first convert |
86 | * the QDateTime to a QDateTime in UTC time | 86 | * the QDateTime to a QDateTime in UTC time |
87 | * and then we'll create a nice time_t | 87 | * and then we'll create a nice time_t |
88 | */ | 88 | */ |
89 | OTimeZone zone( ev.timeZone().isEmpty() ? OTimeZone::current() : ev.timeZone() ); | 89 | OTimeZone zone( ev.timeZone().isEmpty() ? OTimeZone::current() : ev.timeZone() ); |
90 | buf += " start=\"" + QString::number( zone.fromUTCDateTime( zone.toDateTime( ev.startDateTime(), OTimeZone::utc() ) ) ) + "\""; | 90 | buf += " start=\"" + QString::number( zone.fromUTCDateTime( zone.toDateTime( ev.startDateTime(), OTimeZone::utc() ) ) ) + "\""; |
91 | buf += " end=\"" + QString::number( zone.fromUTCDateTime( zone.toDateTime( ev.endDateTime() , OTimeZone::utc() ) ) ) + "\""; | 91 | buf += " end=\"" + QString::number( zone.fromUTCDateTime( zone.toDateTime( ev.endDateTime() , OTimeZone::utc() ) ) ) + "\""; |
92 | if (!ev.note().isEmpty() ) { | 92 | if (!ev.note().isEmpty() ) { |
93 | buf += " note=\"" + Qtopia::escapeString( ev.note() ) + "\""; | 93 | buf += " note=\"" + Qtopia::escapeString( ev.note() ) + "\""; |
94 | } | 94 | } |
95 | 95 | ||
96 | buf += " timezone=\""; | 96 | buf += " timezone=\""; |
97 | if ( ev.timeZone().isEmpty() ) | 97 | if ( ev.timeZone().isEmpty() ) |
98 | buf += "None"; | 98 | buf += "None"; |
99 | else | 99 | else |
100 | buf += ev.timeZone(); | 100 | buf += ev.timeZone(); |
101 | 101 | ||
102 | if (ev.parent() != 0 ) { | 102 | if (ev.parent() != 0 ) { |
103 | buf += " recparent=\""+QString::number(ev.parent() )+"\""; | 103 | buf += " recparent=\""+QString::number(ev.parent() )+"\""; |
104 | } | 104 | } |
105 | 105 | ||
106 | if (ev.children().count() != 0 ) { | 106 | if (ev.children().count() != 0 ) { |
107 | QArray<int> children = ev.children(); | 107 | QArray<int> children = ev.children(); |
108 | buf += " recchildren=\""; | 108 | buf += " recchildren=\""; |
109 | for ( uint i = 0; i < children.count(); i++ ) { | 109 | for ( uint i = 0; i < children.count(); i++ ) { |
110 | if ( i != 0 ) buf += " "; | 110 | if ( i != 0 ) buf += " "; |
111 | buf += QString::number( children[i] ); | 111 | buf += QString::number( children[i] ); |
112 | } | 112 | } |
113 | buf+= "\""; | 113 | buf+= "\""; |
114 | } | 114 | } |
115 | 115 | ||
116 | // skip custom writing | 116 | // skip custom writing |
117 | } | 117 | } |
118 | 118 | ||
119 | inline bool forAll( const QMap<int, OEvent>& list, QFile& file ) { | 119 | inline bool forAll( const QMap<int, OEvent>& list, QFile& file ) { |
120 | QMap<int, OEvent>::ConstIterator it; | 120 | QMap<int, OEvent>::ConstIterator it; |
121 | QString buf; | 121 | QString buf; |
122 | QCString str; | 122 | QCString str; |
123 | int total_written; | 123 | int total_written; |
124 | for ( it = list.begin(); it != list.end(); ++it ) { | 124 | for ( it = list.begin(); it != list.end(); ++it ) { |
125 | buf = "<event"; | 125 | buf = "<event"; |
126 | save( it.data(), buf ); | 126 | save( it.data(), buf ); |
127 | buf += " />\n"; | 127 | buf += " />\n"; |
128 | str = buf.utf8(); | 128 | str = buf.utf8(); |
129 | 129 | ||
130 | total_written = file.writeBlock(str.data(), str.length() ); | 130 | total_written = file.writeBlock(str.data(), str.length() ); |
131 | if ( total_written != int(str.length() ) ) | 131 | if ( total_written != int(str.length() ) ) |
132 | return false; | 132 | return false; |
133 | } | 133 | } |
134 | return true; | 134 | return true; |
135 | } | 135 | } |
136 | } | 136 | } |
137 | 137 | ||
138 | ODateBookAccessBackend_XML::ODateBookAccessBackend_XML( const QString& , | 138 | ODateBookAccessBackend_XML::ODateBookAccessBackend_XML( const QString& , |
139 | const QString& fileName ) | 139 | const QString& fileName ) |
140 | : ODateBookAccessBackend() { | 140 | : ODateBookAccessBackend() { |
141 | m_name = fileName.isEmpty() ? Global::applicationFileName( "datebook", "datebook.xml" ) : fileName; | 141 | m_name = fileName.isEmpty() ? Global::applicationFileName( "datebook", "datebook.xml" ) : fileName; |
142 | m_changed = false; | 142 | m_changed = false; |
143 | } | 143 | } |
144 | ODateBookAccessBackend_XML::~ODateBookAccessBackend_XML() { | 144 | ODateBookAccessBackend_XML::~ODateBookAccessBackend_XML() { |
145 | } | 145 | } |
146 | bool ODateBookAccessBackend_XML::load() { | 146 | bool ODateBookAccessBackend_XML::load() { |
147 | return loadFile(); | 147 | return loadFile(); |
148 | } | 148 | } |
149 | bool ODateBookAccessBackend_XML::reload() { | 149 | bool ODateBookAccessBackend_XML::reload() { |
150 | clear(); | 150 | clear(); |
151 | return load(); | 151 | return load(); |
152 | } | 152 | } |
153 | bool ODateBookAccessBackend_XML::save() { | 153 | bool ODateBookAccessBackend_XML::save() { |
154 | qWarning("going to save now"); | 154 | if (!m_changed) return true; |
155 | // if (!m_changed) return true; | ||
156 | 155 | ||
157 | int total_written; | 156 | int total_written; |
158 | QString strFileNew = m_name + ".new"; | 157 | QString strFileNew = m_name + ".new"; |
159 | 158 | ||
160 | QFile f( strFileNew ); | 159 | QFile f( strFileNew ); |
161 | if (!f.open( IO_WriteOnly | IO_Raw ) ) return false; | 160 | if (!f.open( IO_WriteOnly | IO_Raw ) ) return false; |
162 | 161 | ||
163 | QString buf( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" ); | 162 | QString buf( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" ); |
164 | buf += "<!DOCTYPE DATEBOOK><DATEBOOK>\n"; | 163 | buf += "<!DOCTYPE DATEBOOK><DATEBOOK>\n"; |
165 | buf += "<events>\n"; | 164 | buf += "<events>\n"; |
166 | QCString str = buf.utf8(); | 165 | QCString str = buf.utf8(); |
167 | total_written = f.writeBlock( str.data(), str.length() ); | 166 | total_written = f.writeBlock( str.data(), str.length() ); |
168 | if ( total_written != int(str.length() ) ) { | 167 | if ( total_written != int(str.length() ) ) { |
169 | f.close(); | 168 | f.close(); |
170 | QFile::remove( strFileNew ); | 169 | QFile::remove( strFileNew ); |
171 | return false; | 170 | return false; |
172 | } | 171 | } |
173 | 172 | ||
174 | if (!forAll( m_raw, f ) ) { | 173 | if (!forAll( m_raw, f ) ) { |
175 | f.close(); | 174 | f.close(); |
176 | QFile::remove( strFileNew ); | 175 | QFile::remove( strFileNew ); |
177 | return false; | 176 | return false; |
178 | } | 177 | } |
179 | if (!forAll( m_rep, f ) ) { | 178 | if (!forAll( m_rep, f ) ) { |
180 | f.close(); | 179 | f.close(); |
181 | QFile::remove( strFileNew ); | 180 | QFile::remove( strFileNew ); |
182 | return false; | 181 | return false; |
183 | } | 182 | } |
184 | 183 | ||
185 | buf = "</events>\n</DATEBOOK>\n"; | 184 | buf = "</events>\n</DATEBOOK>\n"; |
186 | str = buf.utf8(); | 185 | str = buf.utf8(); |
187 | total_written = f.writeBlock( str.data(), str.length() ); | 186 | total_written = f.writeBlock( str.data(), str.length() ); |
188 | if ( total_written != int(str.length() ) ) { | 187 | if ( total_written != int(str.length() ) ) { |
189 | f.close(); | 188 | f.close(); |
190 | QFile::remove( strFileNew ); | 189 | QFile::remove( strFileNew ); |
191 | return false; | 190 | return false; |
192 | } | 191 | } |
193 | f.close(); | 192 | f.close(); |
194 | 193 | ||
195 | exit(0); | ||
196 | if ( ::rename( strFileNew, m_name ) < 0 ) { | 194 | if ( ::rename( strFileNew, m_name ) < 0 ) { |
197 | QFile::remove( strFileNew ); | 195 | QFile::remove( strFileNew ); |
198 | return false; | 196 | return false; |
199 | } | 197 | } |
200 | 198 | ||
201 | m_changed = false; | 199 | m_changed = false; |
202 | return true; | 200 | return true; |
203 | } | 201 | } |
204 | QArray<int> ODateBookAccessBackend_XML::allRecords()const { | 202 | QArray<int> ODateBookAccessBackend_XML::allRecords()const { |
205 | QArray<int> ints( m_raw.count()+ m_rep.count() ); | 203 | QArray<int> ints( m_raw.count()+ m_rep.count() ); |
206 | uint i = 0; | 204 | uint i = 0; |
207 | QMap<int, OEvent>::ConstIterator it; | 205 | QMap<int, OEvent>::ConstIterator it; |
208 | 206 | ||
209 | for ( it = m_raw.begin(); it != m_raw.end(); ++it ) { | 207 | for ( it = m_raw.begin(); it != m_raw.end(); ++it ) { |
210 | ints[i] = it.key(); | 208 | ints[i] = it.key(); |
211 | i++; | 209 | i++; |
212 | } | 210 | } |
213 | for ( it = m_rep.begin(); it != m_rep.end(); ++it ) { | 211 | for ( it = m_rep.begin(); it != m_rep.end(); ++it ) { |
214 | ints[i] = it.key(); | 212 | ints[i] = it.key(); |
215 | i++; | 213 | i++; |
216 | } | 214 | } |
217 | 215 | ||
218 | return ints; | 216 | return ints; |
219 | } | 217 | } |
220 | QArray<int> ODateBookAccessBackend_XML::queryByExample(const OEvent&, int ) { | 218 | QArray<int> ODateBookAccessBackend_XML::queryByExample(const OEvent&, int ) { |
221 | return QArray<int>(); | 219 | return QArray<int>(); |
222 | } | 220 | } |
223 | void ODateBookAccessBackend_XML::clear() { | 221 | void ODateBookAccessBackend_XML::clear() { |
224 | m_raw.clear(); | 222 | m_raw.clear(); |
225 | m_rep.clear(); | 223 | m_rep.clear(); |
226 | } | 224 | } |
227 | OEvent ODateBookAccessBackend_XML::find( int uid ) const{ | 225 | OEvent ODateBookAccessBackend_XML::find( int uid ) const{ |
228 | if ( m_raw.contains( uid ) ) | 226 | if ( m_raw.contains( uid ) ) |
229 | return m_raw[uid]; | 227 | return m_raw[uid]; |
230 | else | 228 | else |
231 | return m_rep[uid]; | 229 | return m_rep[uid]; |
232 | } | 230 | } |
233 | bool ODateBookAccessBackend_XML::add( const OEvent& ev ) { | 231 | bool ODateBookAccessBackend_XML::add( const OEvent& ev ) { |
234 | m_changed = true; | 232 | m_changed = true; |
235 | if (ev.hasRecurrence() ) | 233 | if (ev.hasRecurrence() ) |
236 | m_rep.insert( ev.uid(), ev ); | 234 | m_rep.insert( ev.uid(), ev ); |
237 | else | 235 | else |
238 | m_raw.insert( ev.uid(), ev ); | 236 | m_raw.insert( ev.uid(), ev ); |
239 | 237 | ||
240 | return true; | 238 | return true; |
241 | } | 239 | } |
242 | bool ODateBookAccessBackend_XML::remove( int uid ) { | 240 | bool ODateBookAccessBackend_XML::remove( int uid ) { |
243 | m_changed = true; | 241 | m_changed = true; |
244 | m_rep.remove( uid ); | 242 | m_rep.remove( uid ); |
245 | m_rep.remove( uid ); | 243 | m_rep.remove( uid ); |
246 | 244 | ||
247 | return true; | 245 | return true; |
248 | } | 246 | } |
249 | bool ODateBookAccessBackend_XML::replace( const OEvent& ev ) { | 247 | bool ODateBookAccessBackend_XML::replace( const OEvent& ev ) { |
250 | replace( ev.uid() ); | 248 | replace( ev.uid() ); |
251 | return add( ev ); | 249 | return add( ev ); |
252 | } | 250 | } |
253 | QArray<int> ODateBookAccessBackend_XML::rawEvents()const { | 251 | QArray<int> ODateBookAccessBackend_XML::rawEvents()const { |
254 | return allRecords(); | 252 | return allRecords(); |
255 | } | 253 | } |
256 | QArray<int> ODateBookAccessBackend_XML::rawRepeats()const { | 254 | QArray<int> ODateBookAccessBackend_XML::rawRepeats()const { |
257 | QArray<int> ints( m_rep.count() ); | 255 | QArray<int> ints( m_rep.count() ); |
258 | uint i = 0; | 256 | uint i = 0; |
259 | QMap<int, OEvent>::ConstIterator it; | 257 | QMap<int, OEvent>::ConstIterator it; |
260 | 258 | ||
261 | for ( it = m_rep.begin(); it != m_rep.end(); ++it ) { | 259 | for ( it = m_rep.begin(); it != m_rep.end(); ++it ) { |
262 | ints[i] = it.key(); | 260 | ints[i] = it.key(); |
263 | i++; | 261 | i++; |
264 | } | 262 | } |
265 | 263 | ||
266 | return ints; | 264 | return ints; |
267 | } | 265 | } |
268 | QArray<int> ODateBookAccessBackend_XML::nonRepeats()const { | 266 | QArray<int> ODateBookAccessBackend_XML::nonRepeats()const { |
269 | QArray<int> ints( m_raw.count() ); | 267 | QArray<int> ints( m_raw.count() ); |
270 | uint i = 0; | 268 | uint i = 0; |
271 | QMap<int, OEvent>::ConstIterator it; | 269 | QMap<int, OEvent>::ConstIterator it; |
272 | 270 | ||
273 | for ( it = m_raw.begin(); it != m_raw.end(); ++it ) { | 271 | for ( it = m_raw.begin(); it != m_raw.end(); ++it ) { |
274 | ints[i] = it.key(); | 272 | ints[i] = it.key(); |
275 | i++; | 273 | i++; |
276 | } | 274 | } |
277 | 275 | ||
278 | return ints; | 276 | return ints; |
279 | } | 277 | } |
280 | OEvent::ValueList ODateBookAccessBackend_XML::directNonRepeats() { | 278 | OEvent::ValueList ODateBookAccessBackend_XML::directNonRepeats() { |
281 | OEvent::ValueList list; | 279 | OEvent::ValueList list; |
282 | QMap<int, OEvent>::ConstIterator it; | 280 | QMap<int, OEvent>::ConstIterator it; |
283 | for (it = m_raw.begin(); it != m_raw.end(); ++it ) | 281 | for (it = m_raw.begin(); it != m_raw.end(); ++it ) |
284 | list.append( it.data() ); | 282 | list.append( it.data() ); |
285 | 283 | ||
286 | return list; | 284 | return list; |
287 | } | 285 | } |
288 | OEvent::ValueList ODateBookAccessBackend_XML::directRawRepeats() { | 286 | OEvent::ValueList ODateBookAccessBackend_XML::directRawRepeats() { |
289 | OEvent::ValueList list; | 287 | OEvent::ValueList list; |
290 | QMap<int, OEvent>::ConstIterator it; | 288 | QMap<int, OEvent>::ConstIterator it; |
291 | for (it = m_rep.begin(); it != m_rep.end(); ++it ) | 289 | for (it = m_rep.begin(); it != m_rep.end(); ++it ) |
diff --git a/libopie2/opiepim/backend/odatebookaccessbackend_xml.cpp b/libopie2/opiepim/backend/odatebookaccessbackend_xml.cpp index 5239d84..bc51996 100644 --- a/libopie2/opiepim/backend/odatebookaccessbackend_xml.cpp +++ b/libopie2/opiepim/backend/odatebookaccessbackend_xml.cpp | |||
@@ -58,234 +58,232 @@ namespace { | |||
58 | }; | 58 | }; |
59 | inline void save( const OEvent& ev, QString& buf ) { | 59 | inline void save( const OEvent& ev, QString& buf ) { |
60 | buf += " description=\"" + Qtopia::escapeString(ev.description() ) + "\""; | 60 | buf += " description=\"" + Qtopia::escapeString(ev.description() ) + "\""; |
61 | if (!ev.location().isEmpty() ) | 61 | if (!ev.location().isEmpty() ) |
62 | buf += " location=\"" + Qtopia::escapeString(ev.location() ) + "\""; | 62 | buf += " location=\"" + Qtopia::escapeString(ev.location() ) + "\""; |
63 | 63 | ||
64 | buf += " categories=\""+ Qtopia::escapeString( Qtopia::Record::idsToString( ev.categories() ) ) + "\""; | 64 | buf += " categories=\""+ Qtopia::escapeString( Qtopia::Record::idsToString( ev.categories() ) ) + "\""; |
65 | buf += " uid=\"" + QString::number( ev.uid() ) + "\""; | 65 | buf += " uid=\"" + QString::number( ev.uid() ) + "\""; |
66 | 66 | ||
67 | if (ev.isAllDay() ) | 67 | if (ev.isAllDay() ) |
68 | buf += " type=\"AllDay\""; | 68 | buf += " type=\"AllDay\""; |
69 | 69 | ||
70 | if (ev.hasNotifiers() ) { | 70 | if (ev.hasNotifiers() ) { |
71 | OPimAlarm alarm = ev.notifiers().alarms()[0]; // take only the first | 71 | OPimAlarm alarm = ev.notifiers().alarms()[0]; // take only the first |
72 | int minutes = alarm.dateTime().secsTo( ev.startDateTime() ) / 60; | 72 | int minutes = alarm.dateTime().secsTo( ev.startDateTime() ) / 60; |
73 | buf += " alarm=\"" + QString::number(minutes) + "\" sound=\""; | 73 | buf += " alarm=\"" + QString::number(minutes) + "\" sound=\""; |
74 | if ( alarm.sound() == OPimAlarm::Loud ) | 74 | if ( alarm.sound() == OPimAlarm::Loud ) |
75 | buf += "loud"; | 75 | buf += "loud"; |
76 | else | 76 | else |
77 | buf += "silent"; | 77 | buf += "silent"; |
78 | buf += "\""; | 78 | buf += "\""; |
79 | } | 79 | } |
80 | if ( ev.hasRecurrence() ) { | 80 | if ( ev.hasRecurrence() ) { |
81 | buf += ev.recurrence().toString(); | 81 | buf += ev.recurrence().toString(); |
82 | } | 82 | } |
83 | 83 | ||
84 | /* | 84 | /* |
85 | * fscking timezones :) well, we'll first convert | 85 | * fscking timezones :) well, we'll first convert |
86 | * the QDateTime to a QDateTime in UTC time | 86 | * the QDateTime to a QDateTime in UTC time |
87 | * and then we'll create a nice time_t | 87 | * and then we'll create a nice time_t |
88 | */ | 88 | */ |
89 | OTimeZone zone( ev.timeZone().isEmpty() ? OTimeZone::current() : ev.timeZone() ); | 89 | OTimeZone zone( ev.timeZone().isEmpty() ? OTimeZone::current() : ev.timeZone() ); |
90 | buf += " start=\"" + QString::number( zone.fromUTCDateTime( zone.toDateTime( ev.startDateTime(), OTimeZone::utc() ) ) ) + "\""; | 90 | buf += " start=\"" + QString::number( zone.fromUTCDateTime( zone.toDateTime( ev.startDateTime(), OTimeZone::utc() ) ) ) + "\""; |
91 | buf += " end=\"" + QString::number( zone.fromUTCDateTime( zone.toDateTime( ev.endDateTime() , OTimeZone::utc() ) ) ) + "\""; | 91 | buf += " end=\"" + QString::number( zone.fromUTCDateTime( zone.toDateTime( ev.endDateTime() , OTimeZone::utc() ) ) ) + "\""; |
92 | if (!ev.note().isEmpty() ) { | 92 | if (!ev.note().isEmpty() ) { |
93 | buf += " note=\"" + Qtopia::escapeString( ev.note() ) + "\""; | 93 | buf += " note=\"" + Qtopia::escapeString( ev.note() ) + "\""; |
94 | } | 94 | } |
95 | 95 | ||
96 | buf += " timezone=\""; | 96 | buf += " timezone=\""; |
97 | if ( ev.timeZone().isEmpty() ) | 97 | if ( ev.timeZone().isEmpty() ) |
98 | buf += "None"; | 98 | buf += "None"; |
99 | else | 99 | else |
100 | buf += ev.timeZone(); | 100 | buf += ev.timeZone(); |
101 | 101 | ||
102 | if (ev.parent() != 0 ) { | 102 | if (ev.parent() != 0 ) { |
103 | buf += " recparent=\""+QString::number(ev.parent() )+"\""; | 103 | buf += " recparent=\""+QString::number(ev.parent() )+"\""; |
104 | } | 104 | } |
105 | 105 | ||
106 | if (ev.children().count() != 0 ) { | 106 | if (ev.children().count() != 0 ) { |
107 | QArray<int> children = ev.children(); | 107 | QArray<int> children = ev.children(); |
108 | buf += " recchildren=\""; | 108 | buf += " recchildren=\""; |
109 | for ( uint i = 0; i < children.count(); i++ ) { | 109 | for ( uint i = 0; i < children.count(); i++ ) { |
110 | if ( i != 0 ) buf += " "; | 110 | if ( i != 0 ) buf += " "; |
111 | buf += QString::number( children[i] ); | 111 | buf += QString::number( children[i] ); |
112 | } | 112 | } |
113 | buf+= "\""; | 113 | buf+= "\""; |
114 | } | 114 | } |
115 | 115 | ||
116 | // skip custom writing | 116 | // skip custom writing |
117 | } | 117 | } |
118 | 118 | ||
119 | inline bool forAll( const QMap<int, OEvent>& list, QFile& file ) { | 119 | inline bool forAll( const QMap<int, OEvent>& list, QFile& file ) { |
120 | QMap<int, OEvent>::ConstIterator it; | 120 | QMap<int, OEvent>::ConstIterator it; |
121 | QString buf; | 121 | QString buf; |
122 | QCString str; | 122 | QCString str; |
123 | int total_written; | 123 | int total_written; |
124 | for ( it = list.begin(); it != list.end(); ++it ) { | 124 | for ( it = list.begin(); it != list.end(); ++it ) { |
125 | buf = "<event"; | 125 | buf = "<event"; |
126 | save( it.data(), buf ); | 126 | save( it.data(), buf ); |
127 | buf += " />\n"; | 127 | buf += " />\n"; |
128 | str = buf.utf8(); | 128 | str = buf.utf8(); |
129 | 129 | ||
130 | total_written = file.writeBlock(str.data(), str.length() ); | 130 | total_written = file.writeBlock(str.data(), str.length() ); |
131 | if ( total_written != int(str.length() ) ) | 131 | if ( total_written != int(str.length() ) ) |
132 | return false; | 132 | return false; |
133 | } | 133 | } |
134 | return true; | 134 | return true; |
135 | } | 135 | } |
136 | } | 136 | } |
137 | 137 | ||
138 | ODateBookAccessBackend_XML::ODateBookAccessBackend_XML( const QString& , | 138 | ODateBookAccessBackend_XML::ODateBookAccessBackend_XML( const QString& , |
139 | const QString& fileName ) | 139 | const QString& fileName ) |
140 | : ODateBookAccessBackend() { | 140 | : ODateBookAccessBackend() { |
141 | m_name = fileName.isEmpty() ? Global::applicationFileName( "datebook", "datebook.xml" ) : fileName; | 141 | m_name = fileName.isEmpty() ? Global::applicationFileName( "datebook", "datebook.xml" ) : fileName; |
142 | m_changed = false; | 142 | m_changed = false; |
143 | } | 143 | } |
144 | ODateBookAccessBackend_XML::~ODateBookAccessBackend_XML() { | 144 | ODateBookAccessBackend_XML::~ODateBookAccessBackend_XML() { |
145 | } | 145 | } |
146 | bool ODateBookAccessBackend_XML::load() { | 146 | bool ODateBookAccessBackend_XML::load() { |
147 | return loadFile(); | 147 | return loadFile(); |
148 | } | 148 | } |
149 | bool ODateBookAccessBackend_XML::reload() { | 149 | bool ODateBookAccessBackend_XML::reload() { |
150 | clear(); | 150 | clear(); |
151 | return load(); | 151 | return load(); |
152 | } | 152 | } |
153 | bool ODateBookAccessBackend_XML::save() { | 153 | bool ODateBookAccessBackend_XML::save() { |
154 | qWarning("going to save now"); | 154 | if (!m_changed) return true; |
155 | // if (!m_changed) return true; | ||
156 | 155 | ||
157 | int total_written; | 156 | int total_written; |
158 | QString strFileNew = m_name + ".new"; | 157 | QString strFileNew = m_name + ".new"; |
159 | 158 | ||
160 | QFile f( strFileNew ); | 159 | QFile f( strFileNew ); |
161 | if (!f.open( IO_WriteOnly | IO_Raw ) ) return false; | 160 | if (!f.open( IO_WriteOnly | IO_Raw ) ) return false; |
162 | 161 | ||
163 | QString buf( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" ); | 162 | QString buf( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" ); |
164 | buf += "<!DOCTYPE DATEBOOK><DATEBOOK>\n"; | 163 | buf += "<!DOCTYPE DATEBOOK><DATEBOOK>\n"; |
165 | buf += "<events>\n"; | 164 | buf += "<events>\n"; |
166 | QCString str = buf.utf8(); | 165 | QCString str = buf.utf8(); |
167 | total_written = f.writeBlock( str.data(), str.length() ); | 166 | total_written = f.writeBlock( str.data(), str.length() ); |
168 | if ( total_written != int(str.length() ) ) { | 167 | if ( total_written != int(str.length() ) ) { |
169 | f.close(); | 168 | f.close(); |
170 | QFile::remove( strFileNew ); | 169 | QFile::remove( strFileNew ); |
171 | return false; | 170 | return false; |
172 | } | 171 | } |
173 | 172 | ||
174 | if (!forAll( m_raw, f ) ) { | 173 | if (!forAll( m_raw, f ) ) { |
175 | f.close(); | 174 | f.close(); |
176 | QFile::remove( strFileNew ); | 175 | QFile::remove( strFileNew ); |
177 | return false; | 176 | return false; |
178 | } | 177 | } |
179 | if (!forAll( m_rep, f ) ) { | 178 | if (!forAll( m_rep, f ) ) { |
180 | f.close(); | 179 | f.close(); |
181 | QFile::remove( strFileNew ); | 180 | QFile::remove( strFileNew ); |
182 | return false; | 181 | return false; |
183 | } | 182 | } |
184 | 183 | ||
185 | buf = "</events>\n</DATEBOOK>\n"; | 184 | buf = "</events>\n</DATEBOOK>\n"; |
186 | str = buf.utf8(); | 185 | str = buf.utf8(); |
187 | total_written = f.writeBlock( str.data(), str.length() ); | 186 | total_written = f.writeBlock( str.data(), str.length() ); |
188 | if ( total_written != int(str.length() ) ) { | 187 | if ( total_written != int(str.length() ) ) { |
189 | f.close(); | 188 | f.close(); |
190 | QFile::remove( strFileNew ); | 189 | QFile::remove( strFileNew ); |
191 | return false; | 190 | return false; |
192 | } | 191 | } |
193 | f.close(); | 192 | f.close(); |
194 | 193 | ||
195 | exit(0); | ||
196 | if ( ::rename( strFileNew, m_name ) < 0 ) { | 194 | if ( ::rename( strFileNew, m_name ) < 0 ) { |
197 | QFile::remove( strFileNew ); | 195 | QFile::remove( strFileNew ); |
198 | return false; | 196 | return false; |
199 | } | 197 | } |
200 | 198 | ||
201 | m_changed = false; | 199 | m_changed = false; |
202 | return true; | 200 | return true; |
203 | } | 201 | } |
204 | QArray<int> ODateBookAccessBackend_XML::allRecords()const { | 202 | QArray<int> ODateBookAccessBackend_XML::allRecords()const { |
205 | QArray<int> ints( m_raw.count()+ m_rep.count() ); | 203 | QArray<int> ints( m_raw.count()+ m_rep.count() ); |
206 | uint i = 0; | 204 | uint i = 0; |
207 | QMap<int, OEvent>::ConstIterator it; | 205 | QMap<int, OEvent>::ConstIterator it; |
208 | 206 | ||
209 | for ( it = m_raw.begin(); it != m_raw.end(); ++it ) { | 207 | for ( it = m_raw.begin(); it != m_raw.end(); ++it ) { |
210 | ints[i] = it.key(); | 208 | ints[i] = it.key(); |
211 | i++; | 209 | i++; |
212 | } | 210 | } |
213 | for ( it = m_rep.begin(); it != m_rep.end(); ++it ) { | 211 | for ( it = m_rep.begin(); it != m_rep.end(); ++it ) { |
214 | ints[i] = it.key(); | 212 | ints[i] = it.key(); |
215 | i++; | 213 | i++; |
216 | } | 214 | } |
217 | 215 | ||
218 | return ints; | 216 | return ints; |
219 | } | 217 | } |
220 | QArray<int> ODateBookAccessBackend_XML::queryByExample(const OEvent&, int ) { | 218 | QArray<int> ODateBookAccessBackend_XML::queryByExample(const OEvent&, int ) { |
221 | return QArray<int>(); | 219 | return QArray<int>(); |
222 | } | 220 | } |
223 | void ODateBookAccessBackend_XML::clear() { | 221 | void ODateBookAccessBackend_XML::clear() { |
224 | m_raw.clear(); | 222 | m_raw.clear(); |
225 | m_rep.clear(); | 223 | m_rep.clear(); |
226 | } | 224 | } |
227 | OEvent ODateBookAccessBackend_XML::find( int uid ) const{ | 225 | OEvent ODateBookAccessBackend_XML::find( int uid ) const{ |
228 | if ( m_raw.contains( uid ) ) | 226 | if ( m_raw.contains( uid ) ) |
229 | return m_raw[uid]; | 227 | return m_raw[uid]; |
230 | else | 228 | else |
231 | return m_rep[uid]; | 229 | return m_rep[uid]; |
232 | } | 230 | } |
233 | bool ODateBookAccessBackend_XML::add( const OEvent& ev ) { | 231 | bool ODateBookAccessBackend_XML::add( const OEvent& ev ) { |
234 | m_changed = true; | 232 | m_changed = true; |
235 | if (ev.hasRecurrence() ) | 233 | if (ev.hasRecurrence() ) |
236 | m_rep.insert( ev.uid(), ev ); | 234 | m_rep.insert( ev.uid(), ev ); |
237 | else | 235 | else |
238 | m_raw.insert( ev.uid(), ev ); | 236 | m_raw.insert( ev.uid(), ev ); |
239 | 237 | ||
240 | return true; | 238 | return true; |
241 | } | 239 | } |
242 | bool ODateBookAccessBackend_XML::remove( int uid ) { | 240 | bool ODateBookAccessBackend_XML::remove( int uid ) { |
243 | m_changed = true; | 241 | m_changed = true; |
244 | m_rep.remove( uid ); | 242 | m_rep.remove( uid ); |
245 | m_rep.remove( uid ); | 243 | m_rep.remove( uid ); |
246 | 244 | ||
247 | return true; | 245 | return true; |
248 | } | 246 | } |
249 | bool ODateBookAccessBackend_XML::replace( const OEvent& ev ) { | 247 | bool ODateBookAccessBackend_XML::replace( const OEvent& ev ) { |
250 | replace( ev.uid() ); | 248 | replace( ev.uid() ); |
251 | return add( ev ); | 249 | return add( ev ); |
252 | } | 250 | } |
253 | QArray<int> ODateBookAccessBackend_XML::rawEvents()const { | 251 | QArray<int> ODateBookAccessBackend_XML::rawEvents()const { |
254 | return allRecords(); | 252 | return allRecords(); |
255 | } | 253 | } |
256 | QArray<int> ODateBookAccessBackend_XML::rawRepeats()const { | 254 | QArray<int> ODateBookAccessBackend_XML::rawRepeats()const { |
257 | QArray<int> ints( m_rep.count() ); | 255 | QArray<int> ints( m_rep.count() ); |
258 | uint i = 0; | 256 | uint i = 0; |
259 | QMap<int, OEvent>::ConstIterator it; | 257 | QMap<int, OEvent>::ConstIterator it; |
260 | 258 | ||
261 | for ( it = m_rep.begin(); it != m_rep.end(); ++it ) { | 259 | for ( it = m_rep.begin(); it != m_rep.end(); ++it ) { |
262 | ints[i] = it.key(); | 260 | ints[i] = it.key(); |
263 | i++; | 261 | i++; |
264 | } | 262 | } |
265 | 263 | ||
266 | return ints; | 264 | return ints; |
267 | } | 265 | } |
268 | QArray<int> ODateBookAccessBackend_XML::nonRepeats()const { | 266 | QArray<int> ODateBookAccessBackend_XML::nonRepeats()const { |
269 | QArray<int> ints( m_raw.count() ); | 267 | QArray<int> ints( m_raw.count() ); |
270 | uint i = 0; | 268 | uint i = 0; |
271 | QMap<int, OEvent>::ConstIterator it; | 269 | QMap<int, OEvent>::ConstIterator it; |
272 | 270 | ||
273 | for ( it = m_raw.begin(); it != m_raw.end(); ++it ) { | 271 | for ( it = m_raw.begin(); it != m_raw.end(); ++it ) { |
274 | ints[i] = it.key(); | 272 | ints[i] = it.key(); |
275 | i++; | 273 | i++; |
276 | } | 274 | } |
277 | 275 | ||
278 | return ints; | 276 | return ints; |
279 | } | 277 | } |
280 | OEvent::ValueList ODateBookAccessBackend_XML::directNonRepeats() { | 278 | OEvent::ValueList ODateBookAccessBackend_XML::directNonRepeats() { |
281 | OEvent::ValueList list; | 279 | OEvent::ValueList list; |
282 | QMap<int, OEvent>::ConstIterator it; | 280 | QMap<int, OEvent>::ConstIterator it; |
283 | for (it = m_raw.begin(); it != m_raw.end(); ++it ) | 281 | for (it = m_raw.begin(); it != m_raw.end(); ++it ) |
284 | list.append( it.data() ); | 282 | list.append( it.data() ); |
285 | 283 | ||
286 | return list; | 284 | return list; |
287 | } | 285 | } |
288 | OEvent::ValueList ODateBookAccessBackend_XML::directRawRepeats() { | 286 | OEvent::ValueList ODateBookAccessBackend_XML::directRawRepeats() { |
289 | OEvent::ValueList list; | 287 | OEvent::ValueList list; |
290 | QMap<int, OEvent>::ConstIterator it; | 288 | QMap<int, OEvent>::ConstIterator it; |
291 | for (it = m_rep.begin(); it != m_rep.end(); ++it ) | 289 | for (it = m_rep.begin(); it != m_rep.end(); ++it ) |