summaryrefslogtreecommitdiffabout
path: root/libkcal
Unidiff
Diffstat (limited to 'libkcal') (more/less context) (ignore whitespace changes)
-rw-r--r--libkcal/sharpformat.cpp45
-rw-r--r--libkcal/sharpformat.h2
2 files changed, 4 insertions, 43 deletions
diff --git a/libkcal/sharpformat.cpp b/libkcal/sharpformat.cpp
index b88e729..24b8349 100644
--- a/libkcal/sharpformat.cpp
+++ b/libkcal/sharpformat.cpp
@@ -1,1046 +1,1009 @@
1/* 1/*
2 This file is part of libkcal. 2 This file is part of libkcal.
3 3
4 Copyright (c) 2003 Cornelius Schumacher <schumacher@kde.org> 4 Copyright (c) 2003 Cornelius Schumacher <schumacher@kde.org>
5 5
6 This library is free software; you can redistribute it and/or 6 This library is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Library General Public 7 modify it under the terms of the GNU Library General Public
8 License as published by the Free Software Foundation; either 8 License as published by the Free Software Foundation; either
9 version 2 of the License, or (at your option) any later version. 9 version 2 of the License, or (at your option) any later version.
10 10
11 This library is distributed in the hope that it will be useful, 11 This library is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Library General Public License for more details. 14 Library General Public License for more details.
15 15
16 You should have received a copy of the GNU Library General Public License 16 You should have received a copy of the GNU Library General Public License
17 along with this library; see the file COPYING.LIB. If not, write to 17 along with this library; see the file COPYING.LIB. If not, write to
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19 Boston, MA 02111-1307, USA. 19 Boston, MA 02111-1307, USA.
20*/ 20*/
21 21
22#include <qdatetime.h> 22#include <qdatetime.h>
23#include <qstring.h> 23#include <qstring.h>
24#include <qapplication.h> 24#include <qapplication.h>
25#include <qptrlist.h> 25#include <qptrlist.h>
26#include <qregexp.h> 26#include <qregexp.h>
27#include <qmessagebox.h> 27#include <qmessagebox.h>
28#include <qclipboard.h> 28#include <qclipboard.h>
29#include <qfile.h> 29#include <qfile.h>
30#include <qtextstream.h> 30#include <qtextstream.h>
31#include <qtextcodec.h> 31#include <qtextcodec.h>
32#include <qxml.h> 32#include <qxml.h>
33#include <qlabel.h> 33#include <qlabel.h>
34 34
35#include <kdebug.h> 35#include <kdebug.h>
36#include <klocale.h> 36#include <klocale.h>
37#include <kglobal.h> 37#include <kglobal.h>
38 38
39#include "calendar.h" 39#include "calendar.h"
40#include "alarm.h" 40#include "alarm.h"
41#include "recurrence.h" 41#include "recurrence.h"
42#include "calendarlocal.h" 42#include "calendarlocal.h"
43 43
44#include "sharpformat.h" 44#include "sharpformat.h"
45#include "syncdefines.h" 45#include "syncdefines.h"
46 46
47using namespace KCal; 47using namespace KCal;
48 48
49//CARDID,CATEGORY,DSRP,PLCE,MEM1,TIM1,TIM2,ADAY,ARON,ARMN,ARSD,RTYP,RFRQ,RPOS,RDYS,REND,REDT,ALSD,ALED,MDAY 49//CARDID,CATEGORY,DSRP,PLCE,MEM1,TIM1,TIM2,ADAY,ARON,ARMN,ARSD,RTYP,RFRQ,RPOS,RDYS,REND,REDT,ALSD,ALED,MDAY
50// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 50// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
51 51
52//ARSD silentalarm = 0 52//ARSD silentalarm = 0
53// 11 RTYP 225 no /0 dialy/ 1 weekly/ 3 month by date/ 2 month by day(pos)/ yearly 53// 11 RTYP 225 no /0 dialy/ 1 weekly/ 3 month by date/ 2 month by day(pos)/ yearly
54// 12 RFRQ 54// 12 RFRQ
55// 13 RPOS pos = 4. monday in month 55// 13 RPOS pos = 4. monday in month
56// 14 RDYS days: 1 mon/ 2 tue .. 64 sun 56// 14 RDYS days: 1 mon/ 2 tue .. 64 sun
57// 15 REND 0 = no end/ 1 = end 57// 15 REND 0 = no end/ 1 = end
58// 16 REDT rec end dt 58// 16 REDT rec end dt
59//ALSD 59//ALSD
60//ALED 60//ALED
61//MDAY 61//MDAY
62 62
63class SharpParser : public QObject 63class SharpParser : public QObject
64{ 64{
65 public: 65 public:
66 SharpParser( Calendar *calendar ) : mCalendar( calendar ) { 66 SharpParser( Calendar *calendar ) : mCalendar( calendar ) {
67 oldCategories = 0;
68 } 67 }
69 68
70 bool startElement( Calendar *existingCalendar, const QStringList & attList, QString qName ) 69 bool startElement( Calendar *existingCalendar, const QStringList & attList, QString qName )
71 { 70 {
72 int i = 1; 71 int i = 1;
73 bool skip = true; 72 bool skip = true;
74 int max = attList.count() -2; 73 int max = attList.count() -2;
75 while ( i < max ) { 74 while ( i < max ) {
76 if ( !attList[i].isEmpty() ) { 75 if ( !attList[i].isEmpty() ) {
77 skip = false; 76 skip = false;
78 break; 77 break;
79 } 78 }
80 ++i ; 79 ++i ;
81 } 80 }
82 if ( skip ) 81 if ( skip )
83 return false; 82 return false;
84 ulong cSum = SharpFormat::getCsum(attList ); 83 ulong cSum = SharpFormat::getCsum(attList );
85 84
86 if ( qName == "Event" ) { 85 if ( qName == "Event" ) {
87 Event *event; 86 Event *event;
88 event = existingCalendar->event( "Sharp_DTM",attList[0] ); 87 event = existingCalendar->event( "Sharp_DTM",attList[0] );
89 if ( event ) 88 if ( event )
90 event = (Event*)event->clone(); 89 event = (Event*)event->clone();
91 else 90 else
92 event = new Event; 91 event = new Event;
93 event->setID("Sharp_DTM", attList[0] ); 92 event->setID("Sharp_DTM", attList[0] );
94 event->setCsum( "Sharp_DTM", QString::number( cSum )); 93 event->setCsum( "Sharp_DTM", QString::number( cSum ));
95 event->setTempSyncStat(SYNC_TEMPSTATE_NEW_EXTERNAL ); 94 event->setTempSyncStat(SYNC_TEMPSTATE_NEW_EXTERNAL );
96 95
97 event->setSummary( attList[2] ); 96 event->setSummary( attList[2] );
98 event->setLocation( attList[3] ); 97 event->setLocation( attList[3] );
99 event->setDescription( attList[4] ); 98 event->setDescription( attList[4] );
100 if ( attList[7] == "1" ) { 99 if ( attList[7] == "1" ) {
101 event->setDtStart( QDateTime(fromString( attList[17]+"T000000", false ).date(),QTime(0,0,0 ) )); 100 event->setDtStart( QDateTime(fromString( attList[17]+"T000000", false ).date(),QTime(0,0,0 ) ));
102 event->setDtEnd( QDateTime(fromString( attList[18]+"T000000", false ).date(),QTime(0,0,0 ))); 101 event->setDtEnd( QDateTime(fromString( attList[18]+"T000000", false ).date(),QTime(0,0,0 )));
103 event->setFloats( true ); 102 event->setFloats( true );
104 } else { 103 } else {
105 event->setFloats( false ); 104 event->setFloats( false );
106 event->setDtStart( fromString( attList[5] ) ); 105 event->setDtStart( fromString( attList[5] ) );
107 event->setDtEnd( fromString( attList[6] )); 106 event->setDtEnd( fromString( attList[6] ));
108 } 107 }
109 108
110 QString rtype = attList[11]; 109 QString rtype = attList[11];
111 if ( rtype != "255" ) { 110 if ( rtype != "255" ) {
112 // qDebug("recurs "); 111 // qDebug("recurs ");
113 QDate startDate = event->dtStart().date(); 112 QDate startDate = event->dtStart().date();
114 113
115 QString freqStr = attList[12]; 114 QString freqStr = attList[12];
116 int freq = freqStr.toInt(); 115 int freq = freqStr.toInt();
117 116
118 QString hasEndDateStr = attList[15] ; 117 QString hasEndDateStr = attList[15] ;
119 bool hasEndDate = hasEndDateStr == "1"; 118 bool hasEndDate = hasEndDateStr == "1";
120 119
121 QString endDateStr = attList[16]; 120 QString endDateStr = attList[16];
122 QDate endDate = fromString( endDateStr ).date(); 121 QDate endDate = fromString( endDateStr ).date();
123 122
124 QString weekDaysStr = attList[14]; 123 QString weekDaysStr = attList[14];
125 uint weekDaysNum = weekDaysStr.toInt(); 124 uint weekDaysNum = weekDaysStr.toInt();
126 125
127 QBitArray weekDays( 7 ); 126 QBitArray weekDays( 7 );
128 int i; 127 int i;
129 int bb = 1; 128 int bb = 1;
130 for( i = 1; i <= 7; ++i ) { 129 for( i = 1; i <= 7; ++i ) {
131 weekDays.setBit( i - 1, ( bb & weekDaysNum )); 130 weekDays.setBit( i - 1, ( bb & weekDaysNum ));
132 bb = 2 << (i-1); 131 bb = 2 << (i-1);
133 //qDebug(" %d bit %d ",i-1,weekDays.at(i-1) ); 132 //qDebug(" %d bit %d ",i-1,weekDays.at(i-1) );
134 } 133 }
135 // qDebug("next "); 134 // qDebug("next ");
136 QString posStr = attList[13]; 135 QString posStr = attList[13];
137 int pos = posStr.toInt(); 136 int pos = posStr.toInt();
138 Recurrence *r = event->recurrence(); 137 Recurrence *r = event->recurrence();
139 138
140 if ( rtype == "0" ) { 139 if ( rtype == "0" ) {
141 if ( hasEndDate ) r->setDaily( freq, endDate ); 140 if ( hasEndDate ) r->setDaily( freq, endDate );
142 else r->setDaily( freq, -1 ); 141 else r->setDaily( freq, -1 );
143 } else if ( rtype == "1" ) { 142 } else if ( rtype == "1" ) {
144 if ( hasEndDate ) r->setWeekly( freq, weekDays, endDate ); 143 if ( hasEndDate ) r->setWeekly( freq, weekDays, endDate );
145 else r->setWeekly( freq, weekDays, -1 ); 144 else r->setWeekly( freq, weekDays, -1 );
146 } else if ( rtype == "3" ) { 145 } else if ( rtype == "3" ) {
147 if ( hasEndDate ) 146 if ( hasEndDate )
148 r->setMonthly( Recurrence::rMonthlyDay, freq, endDate ); 147 r->setMonthly( Recurrence::rMonthlyDay, freq, endDate );
149 else 148 else
150 r->setMonthly( Recurrence::rMonthlyDay, freq, -1 ); 149 r->setMonthly( Recurrence::rMonthlyDay, freq, -1 );
151 r->addMonthlyDay( startDate.day() ); 150 r->addMonthlyDay( startDate.day() );
152 } else if ( rtype == "2" ) { 151 } else if ( rtype == "2" ) {
153 if ( hasEndDate ) 152 if ( hasEndDate )
154 r->setMonthly( Recurrence::rMonthlyPos, freq, endDate ); 153 r->setMonthly( Recurrence::rMonthlyPos, freq, endDate );
155 else 154 else
156 r->setMonthly( Recurrence::rMonthlyPos, freq, -1 ); 155 r->setMonthly( Recurrence::rMonthlyPos, freq, -1 );
157 QBitArray days( 7 ); 156 QBitArray days( 7 );
158 days.fill( false ); 157 days.fill( false );
159 days.setBit( startDate.dayOfWeek() - 1 ); 158 days.setBit( startDate.dayOfWeek() - 1 );
160 r->addMonthlyPos( pos, days ); 159 r->addMonthlyPos( pos, days );
161 } else if ( rtype == "4" ) { 160 } else if ( rtype == "4" ) {
162 if ( hasEndDate ) 161 if ( hasEndDate )
163 r->setYearly( Recurrence::rYearlyMonth, freq, endDate ); 162 r->setYearly( Recurrence::rYearlyMonth, freq, endDate );
164 else 163 else
165 r->setYearly( Recurrence::rYearlyMonth, freq, -1 ); 164 r->setYearly( Recurrence::rYearlyMonth, freq, -1 );
166 r->addYearlyNum( startDate.month() ); 165 r->addYearlyNum( startDate.month() );
167 } 166 }
168 } else { 167 } else {
169 event->recurrence()->unsetRecurs(); 168 event->recurrence()->unsetRecurs();
170 } 169 }
171 170
172 QString categoryList = attList[1] ; 171 QString categoryList = attList[1] ;
173 event->setCategories( lookupCategories( categoryList ) ); 172 event->setCategories( categoryList );
174 173
175 // strange 0 semms to mean: alarm enabled 174 // strange 0 semms to mean: alarm enabled
176 if ( attList[8] == "0" ) { 175 if ( attList[8] == "0" ) {
177 Alarm *alarm; 176 Alarm *alarm;
178 if ( event->alarms().count() > 0 ) 177 if ( event->alarms().count() > 0 )
179 alarm = event->alarms().first(); 178 alarm = event->alarms().first();
180 else { 179 else {
181 alarm = new Alarm( event ); 180 alarm = new Alarm( event );
182 event->addAlarm( alarm ); 181 event->addAlarm( alarm );
183 alarm->setType( Alarm::Audio ); 182 alarm->setType( Alarm::Audio );
184 } 183 }
185 //alarm->setType( Alarm::Audio ); 184 //alarm->setType( Alarm::Audio );
186 alarm->setEnabled( true ); 185 alarm->setEnabled( true );
187 int alarmOffset = attList[9].toInt(); 186 int alarmOffset = attList[9].toInt();
188 alarm->setStartOffset( alarmOffset * -60 ); 187 alarm->setStartOffset( alarmOffset * -60 );
189 } else { 188 } else {
190 Alarm *alarm; 189 Alarm *alarm;
191 if ( event->alarms().count() > 0 ) { 190 if ( event->alarms().count() > 0 ) {
192 alarm = event->alarms().first(); 191 alarm = event->alarms().first();
193 alarm->setType( Alarm::Audio ); 192 alarm->setType( Alarm::Audio );
194 alarm->setStartOffset( -60*15 ); 193 alarm->setStartOffset( -60*15 );
195 alarm->setEnabled( false ); 194 alarm->setEnabled( false );
196 } 195 }
197 } 196 }
198 197
199 mCalendar->addEvent( event); 198 mCalendar->addEvent( event);
200 } else if ( qName == "Todo" ) { 199 } else if ( qName == "Todo" ) {
201 Todo *todo; 200 Todo *todo;
202 201
203 todo = existingCalendar->todo( "Sharp_DTM", attList[0] ); 202 todo = existingCalendar->todo( "Sharp_DTM", attList[0] );
204 if (todo ) 203 if (todo )
205 todo = (Todo*)todo->clone(); 204 todo = (Todo*)todo->clone();
206 else 205 else
207 todo = new Todo; 206 todo = new Todo;
208 207
209//CARDID,CATEGORY,ETDY,LTDY,FNDY,MARK,PRTY,TITL,MEM1 208//CARDID,CATEGORY,ETDY,LTDY,FNDY,MARK,PRTY,TITL,MEM1
210// 0 1 2 3 4 5 6 7 8 209// 0 1 2 3 4 5 6 7 8
211//1,,,,,1,4,Loch zumachen,"" 210//1,,,,,1,4,Loch zumachen,""
212//3,Privat,20040317T000000,20040318T000000,20040319T000000,0,5,Call bbb,"notes123 bbb gggg ""bb "" " 211//3,Privat,20040317T000000,20040318T000000,20040319T000000,0,5,Call bbb,"notes123 bbb gggg ""bb "" "
213//2,"Familie,Freunde,Holiday",20040318T000000,20040324T000000,20040317T000000,1,2,tod2,notes 212//2,"Familie,Freunde,Holiday",20040318T000000,20040324T000000,20040317T000000,1,2,tod2,notes
214 213
215 todo->setID( "Sharp_DTM", attList[0]); 214 todo->setID( "Sharp_DTM", attList[0]);
216 todo->setCsum( "Sharp_DTM", QString::number( cSum )); 215 todo->setCsum( "Sharp_DTM", QString::number( cSum ));
217 todo->setTempSyncStat( SYNC_TEMPSTATE_NEW_EXTERNAL ); 216 todo->setTempSyncStat( SYNC_TEMPSTATE_NEW_EXTERNAL );
218 217
219 todo->setSummary( attList[7] ); 218 todo->setSummary( attList[7] );
220 todo->setDescription( attList[8]); 219 todo->setDescription( attList[8]);
221 220
222 int priority = attList[6].toInt(); 221 int priority = attList[6].toInt();
223 if ( priority == 0 ) priority = 3; 222 if ( priority == 0 ) priority = 3;
224 todo->setPriority( priority ); 223 todo->setPriority( priority );
225 224
226 QString categoryList = attList[1]; 225 QString categoryList = attList[1];
227 todo->setCategories( lookupCategories( categoryList ) ); 226 todo->setCategories( categoryList );
228 227
229 228
230 229
231 QString hasDateStr = attList[3]; // due 230 QString hasDateStr = attList[3]; // due
232 if ( !hasDateStr.isEmpty() ) { 231 if ( !hasDateStr.isEmpty() ) {
233 if ( hasDateStr.right(6) == "000000" ) { 232 if ( hasDateStr.right(6) == "000000" ) {
234 todo->setDtDue( QDateTime(fromString( hasDateStr, false ).date(), QTime(0,0,0 )) ); 233 todo->setDtDue( QDateTime(fromString( hasDateStr, false ).date(), QTime(0,0,0 )) );
235 todo->setFloats( true ); 234 todo->setFloats( true );
236 } 235 }
237 else { 236 else {
238 todo->setDtDue( fromString( hasDateStr ) ); 237 todo->setDtDue( fromString( hasDateStr ) );
239 todo->setFloats( false ); 238 todo->setFloats( false );
240 } 239 }
241 240
242 todo->setHasDueDate( true ); 241 todo->setHasDueDate( true );
243 } 242 }
244 hasDateStr = attList[2];//start 243 hasDateStr = attList[2];//start
245 if ( !hasDateStr.isEmpty() ) { 244 if ( !hasDateStr.isEmpty() ) {
246 245
247 todo->setDtStart( fromString( hasDateStr ) ); 246 todo->setDtStart( fromString( hasDateStr ) );
248 todo->setHasStartDate( true); 247 todo->setHasStartDate( true);
249 } else 248 } else
250 todo->setHasStartDate( false ); 249 todo->setHasStartDate( false );
251 hasDateStr = attList[4];//completed 250 hasDateStr = attList[4];//completed
252 if ( !hasDateStr.isEmpty() ) { 251 if ( !hasDateStr.isEmpty() ) {
253 todo->setCompleted(fromString( hasDateStr ) ); 252 todo->setCompleted(fromString( hasDateStr ) );
254 } 253 }
255 QString completedStr = attList[5]; 254 QString completedStr = attList[5];
256 if ( completedStr == "0" ) 255 if ( completedStr == "0" )
257 todo->setCompleted( true ); 256 todo->setCompleted( true );
258 else 257 else
259 todo->setCompleted( false ); 258 todo->setCompleted( false );
260 mCalendar->addTodo( todo ); 259 mCalendar->addTodo( todo );
261 260
262 } else if ( qName == "Category" ) { 261 } else if ( qName == "Category" ) {
263 /* 262 /*
264 QString id = attributes.value( "id" ); 263 QString id = attributes.value( "id" );
265 QString name = attributes.value( "name" ); 264 QString name = attributes.value( "name" );
266 setCategory( id, name ); 265 setCategory( id, name );
267 */ 266 */
268 } 267 }
269 //qDebug("end "); 268 //qDebug("end ");
270 return true; 269 return true;
271 } 270 }
272 271
273 272
274 void setCategoriesList ( QStringList * c )
275 {
276 oldCategories = c;
277 }
278
279 QDateTime fromString ( QString s, bool useTz = true ) { 273 QDateTime fromString ( QString s, bool useTz = true ) {
280 QDateTime dt; 274 QDateTime dt;
281 int y,m,t,h,min,sec; 275 int y,m,t,h,min,sec;
282 y = s.mid(0,4).toInt(); 276 y = s.mid(0,4).toInt();
283 m = s.mid(4,2).toInt(); 277 m = s.mid(4,2).toInt();
284 t = s.mid(6,2).toInt(); 278 t = s.mid(6,2).toInt();
285 h = s.mid(9,2).toInt(); 279 h = s.mid(9,2).toInt();
286 min = s.mid(11,2).toInt(); 280 min = s.mid(11,2).toInt();
287 sec = s.mid(13,2).toInt(); 281 sec = s.mid(13,2).toInt();
288 dt = QDateTime(QDate(y,m,t), QTime(h,min,sec)); 282 dt = QDateTime(QDate(y,m,t), QTime(h,min,sec));
289 int offset = KGlobal::locale()->localTimeOffset( dt ); 283 int offset = KGlobal::locale()->localTimeOffset( dt );
290 if ( useTz ) 284 if ( useTz )
291 dt = dt.addSecs ( offset*60); 285 dt = dt.addSecs ( offset*60);
292 return dt; 286 return dt;
293 287
294 } 288 }
295 protected: 289 protected:
296 QDateTime toDateTime( const QString &value ) 290 QDateTime toDateTime( const QString &value )
297 { 291 {
298 QDateTime dt; 292 QDateTime dt;
299 dt.setTime_t( value.toUInt() ); 293 dt.setTime_t( value.toUInt() );
300 294
301 return dt; 295 return dt;
302 } 296 }
303 297
304 QStringList lookupCategories( const QString &categoryList )
305 {
306 QStringList categoryIds = QStringList::split( ";", categoryList );
307 QStringList categories;
308 QStringList::ConstIterator it;
309 for( it = categoryIds.begin(); it != categoryIds.end(); ++it ) {
310 QString cate = category( *it );
311 if ( oldCategories ) {
312 if ( ! oldCategories->contains( cate ) )
313 oldCategories->append( cate );
314 }
315 categories.append(cate );
316 }
317 return categories;
318 }
319
320 private: 298 private:
321 Calendar *mCalendar; 299 Calendar *mCalendar;
322 QStringList * oldCategories;
323 static QString category( const QString &id )
324 {
325 QMap<QString,QString>::ConstIterator it = mCategoriesMap.find( id );
326 if ( it == mCategoriesMap.end() ) return id;
327 else return *it;
328 }
329
330 static void setCategory( const QString &id, const QString &name )
331 {
332 mCategoriesMap.insert( id, name );
333 }
334
335 static QMap<QString,QString> mCategoriesMap;
336}; 300};
337 301
338QMap<QString,QString> SharpParser::mCategoriesMap;
339 302
340SharpFormat::SharpFormat() 303SharpFormat::SharpFormat()
341{ 304{
342 mCategories = 0; 305
343} 306}
344 307
345SharpFormat::~SharpFormat() 308SharpFormat::~SharpFormat()
346{ 309{
347} 310}
348ulong SharpFormat::getCsum( const QStringList & attList) 311ulong SharpFormat::getCsum( const QStringList & attList)
349{ 312{
350 int max = attList.count() -1; 313 int max = attList.count() -1;
351 ulong cSum = 0; 314 ulong cSum = 0;
352 int j,k,i; 315 int j,k,i;
353 int add; 316 int add;
354 for ( i = 1; i < max ; ++i ) { 317 for ( i = 1; i < max ; ++i ) {
355 QString s = attList[i]; 318 QString s = attList[i];
356 if ( ! s.isEmpty() ){ 319 if ( ! s.isEmpty() ){
357 j = s.length(); 320 j = s.length();
358 for ( k = 0; k < j; ++k ) { 321 for ( k = 0; k < j; ++k ) {
359 int mul = k +1; 322 int mul = k +1;
360 add = s[k].unicode (); 323 add = s[k].unicode ();
361 if ( k < 16 ) 324 if ( k < 16 )
362 mul = mul * mul; 325 mul = mul * mul;
363 add = add * mul *i*i*i; 326 add = add * mul *i*i*i;
364 cSum += add; 327 cSum += add;
365 } 328 }
366 } 329 }
367 } 330 }
368 return cSum; 331 return cSum;
369 332
370} 333}
371#include <stdlib.h> 334#include <stdlib.h>
372#define DEBUGMODE false 335#define DEBUGMODE false
373//#define DEBUGMODE true 336//#define DEBUGMODE true
374bool SharpFormat::load( Calendar *calendar, Calendar *existngCal ) 337bool SharpFormat::load( Calendar *calendar, Calendar *existngCal )
375{ 338{
376 339
377 340
378 bool debug = DEBUGMODE; 341 bool debug = DEBUGMODE;
379 QString text; 342 QString text;
380 QString codec = "utf8"; 343 QString codec = "utf8";
381 QLabel status ( i18n("Reading events ..."), 0 ); 344 QLabel status ( i18n("Reading events ..."), 0 );
382 345
383 int w = status.sizeHint().width()+20 ; 346 int w = status.sizeHint().width()+20 ;
384 if ( w < 200 ) w = 200; 347 if ( w < 200 ) w = 200;
385 int h = status.sizeHint().height()+20 ; 348 int h = status.sizeHint().height()+20 ;
386 int dw = QApplication::desktop()->width(); 349 int dw = QApplication::desktop()->width();
387 int dh = QApplication::desktop()->height(); 350 int dh = QApplication::desktop()->height();
388 status.setCaption(i18n("Reading DTM Data") ); 351 status.setCaption(i18n("Reading DTM Data") );
389 status.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 352 status.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
390 status.show(); 353 status.show();
391 status.raise(); 354 status.raise();
392 qApp->processEvents(); 355 qApp->processEvents();
393 QString fileName; 356 QString fileName;
394 if ( ! debug ) { 357 if ( ! debug ) {
395 fileName = "/tmp/kopitempout"; 358 fileName = "/tmp/kopitempout";
396 QString command ="db2file datebook -r -c "+ codec + " > " + fileName; 359 QString command ="db2file datebook -r -c "+ codec + " > " + fileName;
397 system ( command.latin1() ); 360 system ( command.latin1() );
398 } else { 361 } else {
399 fileName = "/tmp/events.txt"; 362 fileName = "/tmp/events.txt";
400 363
401 } 364 }
402 QFile file( fileName ); 365 QFile file( fileName );
403 if (!file.open( IO_ReadOnly ) ) { 366 if (!file.open( IO_ReadOnly ) ) {
404 return false; 367 return false;
405 368
406 } 369 }
407 QTextStream ts( &file ); 370 QTextStream ts( &file );
408 ts.setCodec( QTextCodec::codecForName("utf8") ); 371 ts.setCodec( QTextCodec::codecForName("utf8") );
409 text = ts.read(); 372 text = ts.read();
410 file.close(); 373 file.close();
411 status.setText( i18n("Processing events ...") ); 374 status.setText( i18n("Processing events ...") );
412 status.raise(); 375 status.raise();
413 qApp->processEvents(); 376 qApp->processEvents();
414 fromString2Cal( calendar, existngCal, text, "Event" ); 377 fromString2Cal( calendar, existngCal, text, "Event" );
415 status.setText( i18n("Reading todos ...") ); 378 status.setText( i18n("Reading todos ...") );
416 qApp->processEvents(); 379 qApp->processEvents();
417 if ( ! debug ) { 380 if ( ! debug ) {
418 fileName = "/tmp/kopitempout"; 381 fileName = "/tmp/kopitempout";
419 QString command = "db2file todo -r -c " + codec+ " > " + fileName; 382 QString command = "db2file todo -r -c " + codec+ " > " + fileName;
420 system ( command.latin1() ); 383 system ( command.latin1() );
421 } else { 384 } else {
422 fileName = "/tmp/todo.txt"; 385 fileName = "/tmp/todo.txt";
423 } 386 }
424 file.setName( fileName ); 387 file.setName( fileName );
425 if (!file.open( IO_ReadOnly ) ) { 388 if (!file.open( IO_ReadOnly ) ) {
426 return false; 389 return false;
427 390
428 } 391 }
429 ts.setDevice( &file ); 392 ts.setDevice( &file );
430 text = ts.read(); 393 text = ts.read();
431 file.close(); 394 file.close();
432 395
433 status.setText( i18n("Processing todos ...") ); 396 status.setText( i18n("Processing todos ...") );
434 status.raise(); 397 status.raise();
435 qApp->processEvents(); 398 qApp->processEvents();
436 fromString2Cal( calendar, existngCal, text, "Todo" ); 399 fromString2Cal( calendar, existngCal, text, "Todo" );
437 return true; 400 return true;
438} 401}
439int SharpFormat::getNumFromRecord( QString answer, Incidence* inc ) 402int SharpFormat::getNumFromRecord( QString answer, Incidence* inc )
440{ 403{
441 int retval = -1; 404 int retval = -1;
442 QStringList templist; 405 QStringList templist;
443 QString tempString; 406 QString tempString;
444 int start = 0; 407 int start = 0;
445 int len = answer.length(); 408 int len = answer.length();
446 int end = answer.find ("\n",start)+1; 409 int end = answer.find ("\n",start)+1;
447 bool ok = true; 410 bool ok = true;
448 start = end; 411 start = end;
449 int ccc = 0; 412 int ccc = 0;
450 while ( start > 0 ) { 413 while ( start > 0 ) {
451 templist.clear(); 414 templist.clear();
452 ok = true; 415 ok = true;
453 int loopCount = 0; 416 int loopCount = 0;
454 while ( ok ) { 417 while ( ok ) {
455 ++loopCount; 418 ++loopCount;
456 if ( loopCount > 25 ) { 419 if ( loopCount > 25 ) {
457 qDebug("KO: Error in while loop"); 420 qDebug("KO: Error in while loop");
458 ok = false; 421 ok = false;
459 start = 0; 422 start = 0;
460 break; 423 break;
461 } 424 }
462 if ( ok ) 425 if ( ok )
463 tempString = getPart( answer, ok, start ); 426 tempString = getPart( answer, ok, start );
464 if ( start >= len || start == 0 ) { 427 if ( start >= len || start == 0 ) {
465 start = 0; 428 start = 0;
466 ok = false; 429 ok = false;
467 } 430 }
468 if ( tempString.right(1) =="\n" ) 431 if ( tempString.right(1) =="\n" )
469 tempString = tempString.left( tempString.length()-1); 432 tempString = tempString.left( tempString.length()-1);
470 433
471 templist.append( tempString ); 434 templist.append( tempString );
472 } 435 }
473 ++ccc; 436 ++ccc;
474 if ( ccc == 2 && loopCount < 25 ) { 437 if ( ccc == 2 && loopCount < 25 ) {
475 start = 0; 438 start = 0;
476 bool ok; 439 bool ok;
477 int newnum = templist[0].toInt( &ok ); 440 int newnum = templist[0].toInt( &ok );
478 if ( ok && newnum > 0) { 441 if ( ok && newnum > 0) {
479 retval = newnum; 442 retval = newnum;
480 inc->setID( "Sharp_DTM",templist[0] ); 443 inc->setID( "Sharp_DTM",templist[0] );
481 inc->setCsum( "Sharp_DTM", QString::number( getCsum( templist ) )); 444 inc->setCsum( "Sharp_DTM", QString::number( getCsum( templist ) ));
482 inc->setTempSyncStat( SYNC_TEMPSTATE_NEW_ID ); 445 inc->setTempSyncStat( SYNC_TEMPSTATE_NEW_ID );
483 } 446 }
484 if ( ok && newnum == -1 ) { 447 if ( ok && newnum == -1 ) {
485 qDebug("Error writing back %s ", inc->summary().latin1()); 448 qDebug("Error writing back %s ", inc->summary().latin1());
486 } 449 }
487 } 450 }
488 } 451 }
489 //qDebug("getNumFromRecord returning : %d ", retval); 452 //qDebug("getNumFromRecord returning : %d ", retval);
490 return retval; 453 return retval;
491} 454}
492bool SharpFormat::save( Calendar *calendar) 455bool SharpFormat::save( Calendar *calendar)
493{ 456{
494 457
495 QLabel status ( i18n("Processing/adding events ..."), 0 ); 458 QLabel status ( i18n("Processing/adding events ..."), 0 );
496 int w = status.sizeHint().width()+20 ; 459 int w = status.sizeHint().width()+20 ;
497 if ( w < 200 ) w = 200; 460 if ( w < 200 ) w = 200;
498 int h = status.sizeHint().height()+20 ; 461 int h = status.sizeHint().height()+20 ;
499 int dw = QApplication::desktop()->width(); 462 int dw = QApplication::desktop()->width();
500 int dh = QApplication::desktop()->height(); 463 int dh = QApplication::desktop()->height();
501 status.setCaption(i18n("Writing DTM Data") ); 464 status.setCaption(i18n("Writing DTM Data") );
502 status.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 465 status.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
503 status.show(); 466 status.show();
504 status.raise(); 467 status.raise();
505 qApp->processEvents(); 468 qApp->processEvents();
506 bool debug = DEBUGMODE; 469 bool debug = DEBUGMODE;
507 QString codec = "utf8"; 470 QString codec = "utf8";
508 QString answer; 471 QString answer;
509 QString ePrefix = "CARDID,CATEGORY,DSRP,PLCE,MEM1,TIM1,TIM2,ADAY,ARON,ARMN,ARSD,RTYP,RFRQ,RPOS,RDYS,REND,REDT,ALSD,ALED,MDAY\n"; 472 QString ePrefix = "CARDID,CATEGORY,DSRP,PLCE,MEM1,TIM1,TIM2,ADAY,ARON,ARMN,ARSD,RTYP,RFRQ,RPOS,RDYS,REND,REDT,ALSD,ALED,MDAY\n";
510 QString tPrefix = "CARDID,CATEGORY,ETDY,LTDY,FNDY,MARK,PRTY,TITL,MEM1\n"; 473 QString tPrefix = "CARDID,CATEGORY,ETDY,LTDY,FNDY,MARK,PRTY,TITL,MEM1\n";
511 QString command; 474 QString command;
512 QPtrList<Event> er = calendar->rawEvents(); 475 QPtrList<Event> er = calendar->rawEvents();
513 Event* ev = er.first(); 476 Event* ev = er.first();
514 QString fileName = "/tmp/kopitempout"; 477 QString fileName = "/tmp/kopitempout";
515 int i = 0; 478 int i = 0;
516 QString changeString = ePrefix; 479 QString changeString = ePrefix;
517 QString deleteString = ePrefix; 480 QString deleteString = ePrefix;
518 bool deleteEnt = false; 481 bool deleteEnt = false;
519 bool changeEnt = false; 482 bool changeEnt = false;
520 QString message = i18n("Processing event # "); 483 QString message = i18n("Processing event # ");
521 int procCount = 0; 484 int procCount = 0;
522 while ( ev ) { 485 while ( ev ) {
523 //qDebug("i %d ", ++i); 486 //qDebug("i %d ", ++i);
524 if ( ev->tempSyncStat() != SYNC_TEMPSTATE_NEW_EXTERNAL ) { 487 if ( ev->tempSyncStat() != SYNC_TEMPSTATE_NEW_EXTERNAL ) {
525 status.setText ( message + QString::number ( ++procCount ) ); 488 status.setText ( message + QString::number ( ++procCount ) );
526 qApp->processEvents(); 489 qApp->processEvents();
527 QString eString = getEventString( ev ); 490 QString eString = getEventString( ev );
528 if ( ev->tempSyncStat() == SYNC_TEMPSTATE_DELETE ) { // delete 491 if ( ev->tempSyncStat() == SYNC_TEMPSTATE_DELETE ) { // delete
529 // deleting empty strings does not work. 492 // deleting empty strings does not work.
530 // we write first and x and then delete the record with the x 493 // we write first and x and then delete the record with the x
531 eString = eString.replace( QRegExp(",\"\""),",\"x\"" ); 494 eString = eString.replace( QRegExp(",\"\""),",\"x\"" );
532 changeString += eString + "\n"; 495 changeString += eString + "\n";
533 deleteString += eString + "\n"; 496 deleteString += eString + "\n";
534 deleteEnt = true; 497 deleteEnt = true;
535 changeEnt = true; 498 changeEnt = true;
536 } 499 }
537 else if ( ev->getID("Sharp_DTM").isEmpty() ) { // add new 500 else if ( ev->getID("Sharp_DTM").isEmpty() ) { // add new
538 QString fileNameIn = "/tmp/kopitempin"; 501 QString fileNameIn = "/tmp/kopitempin";
539 QFile fileIn( fileNameIn ); 502 QFile fileIn( fileNameIn );
540 if (!fileIn.open( IO_WriteOnly ) ) { 503 if (!fileIn.open( IO_WriteOnly ) ) {
541 return false; 504 return false;
542 } 505 }
543 QTextStream tsIn( &fileIn ); 506 QTextStream tsIn( &fileIn );
544 tsIn.setCodec( QTextCodec::codecForName("utf8") ); 507 tsIn.setCodec( QTextCodec::codecForName("utf8") );
545 tsIn << ePrefix << eString ; 508 tsIn << ePrefix << eString ;
546 fileIn.close(); 509 fileIn.close();
547 //command = "(echo \"" + ePrefix + eString + "\" ) | db2file datebook -w -g -c " + codec+ " > "+ fileName; 510 //command = "(echo \"" + ePrefix + eString + "\" ) | db2file datebook -w -g -c " + codec+ " > "+ fileName;
548 command = "(cat /tmp/kopitempin | db2file datebook -w -g -c " + codec+ ") > "+ fileName; 511 command = "(cat /tmp/kopitempin | db2file datebook -w -g -c " + codec+ ") > "+ fileName;
549 //qDebug("command ++++++++ "); 512 //qDebug("command ++++++++ ");
550 //qDebug("%s ",command.latin1()); 513 //qDebug("%s ",command.latin1());
551 //qDebug("command -------- "); 514 //qDebug("command -------- ");
552 system ( command.utf8() ); 515 system ( command.utf8() );
553 QFile file( fileName ); 516 QFile file( fileName );
554 if (!file.open( IO_ReadOnly ) ) { 517 if (!file.open( IO_ReadOnly ) ) {
555 return false; 518 return false;
556 519
557 } 520 }
558 QTextStream ts( &file ); 521 QTextStream ts( &file );
559 ts.setCodec( QTextCodec::codecForName("utf8") ); 522 ts.setCodec( QTextCodec::codecForName("utf8") );
560 answer = ts.read(); 523 answer = ts.read();
561 file.close(); 524 file.close();
562 //qDebug("answer \n%s ", answer.latin1()); 525 //qDebug("answer \n%s ", answer.latin1());
563 getNumFromRecord( answer, ev ) ; 526 getNumFromRecord( answer, ev ) ;
564 527
565 } 528 }
566 else { // change existing 529 else { // change existing
567 //qDebug("canging %d %d",ev->zaurusStat() ,ev->zaurusId() ); 530 //qDebug("canging %d %d",ev->zaurusStat() ,ev->zaurusId() );
568 //command = "(echo \"" + ePrefix + eString + "\" ) | db2file datebook -w -g -c " + codec+ " > "+ fileName; 531 //command = "(echo \"" + ePrefix + eString + "\" ) | db2file datebook -w -g -c " + codec+ " > "+ fileName;
569 changeString += eString + "\n"; 532 changeString += eString + "\n";
570 changeEnt = true; 533 changeEnt = true;
571 534
572 } 535 }
573 } 536 }
574 ev = er.next(); 537 ev = er.next();
575 } 538 }
576 status.setText ( i18n("Changing events ...") ); 539 status.setText ( i18n("Changing events ...") );
577 qApp->processEvents(); 540 qApp->processEvents();
578 //qDebug("changing... "); 541 //qDebug("changing... ");
579 if ( changeEnt ) { 542 if ( changeEnt ) {
580 QFile file( fileName ); 543 QFile file( fileName );
581 if (!file.open( IO_WriteOnly ) ) { 544 if (!file.open( IO_WriteOnly ) ) {
582 return false; 545 return false;
583 546
584 } 547 }
585 QTextStream ts( &file ); 548 QTextStream ts( &file );
586 ts.setCodec( QTextCodec::codecForName("utf8") ); 549 ts.setCodec( QTextCodec::codecForName("utf8") );
587 ts << changeString ; 550 ts << changeString ;
588 file.close(); 551 file.close();
589 command = "db2file datebook -w -g -c " + codec+ " < "+ fileName; 552 command = "db2file datebook -w -g -c " + codec+ " < "+ fileName;
590 system ( command.latin1() ); 553 system ( command.latin1() );
591 //qDebug("command %s file :\n%s ", command.latin1(), changeString.latin1()); 554 //qDebug("command %s file :\n%s ", command.latin1(), changeString.latin1());
592 555
593 } 556 }
594 status.setText ( i18n("Deleting events ...") ); 557 status.setText ( i18n("Deleting events ...") );
595 qApp->processEvents(); 558 qApp->processEvents();
596 //qDebug("deleting... "); 559 //qDebug("deleting... ");
597 if ( deleteEnt ) { 560 if ( deleteEnt ) {
598 QFile file( fileName ); 561 QFile file( fileName );
599 if (!file.open( IO_WriteOnly ) ) { 562 if (!file.open( IO_WriteOnly ) ) {
600 return false; 563 return false;
601 564
602 } 565 }
603 QTextStream ts( &file ); 566 QTextStream ts( &file );
604 ts.setCodec( QTextCodec::codecForName("utf8") ); 567 ts.setCodec( QTextCodec::codecForName("utf8") );
605 ts << deleteString; 568 ts << deleteString;
606 file.close(); 569 file.close();
607 command = "db2file datebook -d -c " + codec+ " < "+ fileName; 570 command = "db2file datebook -d -c " + codec+ " < "+ fileName;
608 system ( command.latin1() ); 571 system ( command.latin1() );
609 // qDebug("command %s file :\n%s ", command.latin1(), deleteString.latin1()); 572 // qDebug("command %s file :\n%s ", command.latin1(), deleteString.latin1());
610 } 573 }
611 574
612 575
613 changeString = tPrefix; 576 changeString = tPrefix;
614 deleteString = tPrefix; 577 deleteString = tPrefix;
615 status.setText ( i18n("Processing todos ...") ); 578 status.setText ( i18n("Processing todos ...") );
616 qApp->processEvents(); 579 qApp->processEvents();
617 QPtrList<Todo> tl = calendar->rawTodos(); 580 QPtrList<Todo> tl = calendar->rawTodos();
618 Todo* to = tl.first(); 581 Todo* to = tl.first();
619 i = 0; 582 i = 0;
620 message = i18n("Processing todo # "); 583 message = i18n("Processing todo # ");
621 procCount = 0; 584 procCount = 0;
622 while ( to ) { 585 while ( to ) {
623 if ( to->tempSyncStat() != SYNC_TEMPSTATE_NEW_EXTERNAL ) { 586 if ( to->tempSyncStat() != SYNC_TEMPSTATE_NEW_EXTERNAL ) {
624 status.setText ( message + QString::number ( ++procCount ) ); 587 status.setText ( message + QString::number ( ++procCount ) );
625 qApp->processEvents(); 588 qApp->processEvents();
626 QString eString = getTodoString( to ); 589 QString eString = getTodoString( to );
627 if ( to->tempSyncStat() == SYNC_TEMPSTATE_DELETE ) { // delete 590 if ( to->tempSyncStat() == SYNC_TEMPSTATE_DELETE ) { // delete
628 // deleting empty strings does not work. 591 // deleting empty strings does not work.
629 // we write first and x and then delete the record with the x 592 // we write first and x and then delete the record with the x
630 eString = eString.replace( QRegExp(",\"\""),",\"x\"" ); 593 eString = eString.replace( QRegExp(",\"\""),",\"x\"" );
631 changeString += eString + "\n"; 594 changeString += eString + "\n";
632 deleteString += eString + "\n"; 595 deleteString += eString + "\n";
633 deleteEnt = true; 596 deleteEnt = true;
634 changeEnt = true; 597 changeEnt = true;
635 } 598 }
636 else if ( to->getID("Sharp_DTM").isEmpty() ) { // add new 599 else if ( to->getID("Sharp_DTM").isEmpty() ) { // add new
637 600
638 601
639 602
640 QString fileNameIn = "/tmp/kopitempin"; 603 QString fileNameIn = "/tmp/kopitempin";
641 QFile fileIn( fileNameIn ); 604 QFile fileIn( fileNameIn );
642 if (!fileIn.open( IO_WriteOnly ) ) { 605 if (!fileIn.open( IO_WriteOnly ) ) {
643 return false; 606 return false;
644 } 607 }
645 QTextStream tsIn( &fileIn ); 608 QTextStream tsIn( &fileIn );
646 tsIn.setCodec( QTextCodec::codecForName("utf8") ); 609 tsIn.setCodec( QTextCodec::codecForName("utf8") );
647 tsIn << tPrefix << eString ; 610 tsIn << tPrefix << eString ;
648 fileIn.close(); 611 fileIn.close();
649 command = "(cat /tmp/kopitempin | db2file todo -w -g -c " + codec+ ") > "+ fileName; 612 command = "(cat /tmp/kopitempin | db2file todo -w -g -c " + codec+ ") > "+ fileName;
650 system ( command.utf8() ); 613 system ( command.utf8() );
651 QFile file( fileName ); 614 QFile file( fileName );
652 if (!file.open( IO_ReadOnly ) ) { 615 if (!file.open( IO_ReadOnly ) ) {
653 return false; 616 return false;
654 } 617 }
655 QTextStream ts( &file ); 618 QTextStream ts( &file );
656 ts.setCodec( QTextCodec::codecForName("utf8") ); 619 ts.setCodec( QTextCodec::codecForName("utf8") );
657 answer = ts.read(); 620 answer = ts.read();
658 file.close(); 621 file.close();
659 //qDebug("answer \n%s ", answer.latin1()); 622 //qDebug("answer \n%s ", answer.latin1());
660 getNumFromRecord( answer, to ) ; 623 getNumFromRecord( answer, to ) ;
661 624
662 } 625 }
663 else { // change existing 626 else { // change existing
664 //qDebug("canging %d %d",to->zaurusStat() ,to->zaurusId() ); 627 //qDebug("canging %d %d",to->zaurusStat() ,to->zaurusId() );
665 //command = "(echo \"" + ePrefix + eString + "\" ) | db2file datebook -w -g -c " + codec+ " > "+ fileName; 628 //command = "(echo \"" + ePrefix + eString + "\" ) | db2file datebook -w -g -c " + codec+ " > "+ fileName;
666 changeString += eString + "\n"; 629 changeString += eString + "\n";
667 changeEnt = true; 630 changeEnt = true;
668 631
669 } 632 }
670 } 633 }
671 634
672 to = tl.next(); 635 to = tl.next();
673 } 636 }
674 status.setText ( i18n("Changing todos ...") ); 637 status.setText ( i18n("Changing todos ...") );
675 qApp->processEvents(); 638 qApp->processEvents();
676 //qDebug("changing... "); 639 //qDebug("changing... ");
677 if ( changeEnt ) { 640 if ( changeEnt ) {
678 QFile file( fileName ); 641 QFile file( fileName );
679 if (!file.open( IO_WriteOnly ) ) { 642 if (!file.open( IO_WriteOnly ) ) {
680 return false; 643 return false;
681 644
682 } 645 }
683 QTextStream ts( &file ); 646 QTextStream ts( &file );
684 ts.setCodec( QTextCodec::codecForName("utf8") ); 647 ts.setCodec( QTextCodec::codecForName("utf8") );
685 ts << changeString ; 648 ts << changeString ;
686 file.close(); 649 file.close();
687 command = "db2file todo -w -g -c " + codec+ " < "+ fileName; 650 command = "db2file todo -w -g -c " + codec+ " < "+ fileName;
688 system ( command.latin1() ); 651 system ( command.latin1() );
689 //qDebug("command %s file :\n%s ", command.latin1(), changeString.latin1()); 652 //qDebug("command %s file :\n%s ", command.latin1(), changeString.latin1());
690 653
691 } 654 }
692 status.setText ( i18n("Deleting todos ...") ); 655 status.setText ( i18n("Deleting todos ...") );
693 qApp->processEvents(); 656 qApp->processEvents();
694 //qDebug("deleting... "); 657 //qDebug("deleting... ");
695 if ( deleteEnt ) { 658 if ( deleteEnt ) {
696 QFile file( fileName ); 659 QFile file( fileName );
697 if (!file.open( IO_WriteOnly ) ) { 660 if (!file.open( IO_WriteOnly ) ) {
698 return false; 661 return false;
699 662
700 } 663 }
701 QTextStream ts( &file ); 664 QTextStream ts( &file );
702 ts.setCodec( QTextCodec::codecForName("utf8") ); 665 ts.setCodec( QTextCodec::codecForName("utf8") );
703 ts << deleteString; 666 ts << deleteString;
704 file.close(); 667 file.close();
705 command = "db2file todo -d -c " + codec+ " < "+ fileName; 668 command = "db2file todo -d -c " + codec+ " < "+ fileName;
706 system ( command.latin1() ); 669 system ( command.latin1() );
707 // qDebug("command %s file :\n%s ", command.latin1(), deleteString.latin1()); 670 // qDebug("command %s file :\n%s ", command.latin1(), deleteString.latin1());
708 } 671 }
709 672
710 return true; 673 return true;
711} 674}
712QString SharpFormat::dtToString( const QDateTime& dti, bool useTZ ) 675QString SharpFormat::dtToString( const QDateTime& dti, bool useTZ )
713{ 676{
714 QString datestr; 677 QString datestr;
715 QString timestr; 678 QString timestr;
716 int offset = KGlobal::locale()->localTimeOffset( dti ); 679 int offset = KGlobal::locale()->localTimeOffset( dti );
717 QDateTime dt; 680 QDateTime dt;
718 if (useTZ) 681 if (useTZ)
719 dt = dti.addSecs ( -(offset*60)); 682 dt = dti.addSecs ( -(offset*60));
720 else 683 else
721 dt = dti; 684 dt = dti;
722 if(dt.date().isValid()){ 685 if(dt.date().isValid()){
723 const QDate& date = dt.date(); 686 const QDate& date = dt.date();
724 datestr.sprintf("%04d%02d%02d", 687 datestr.sprintf("%04d%02d%02d",
725 date.year(), date.month(), date.day()); 688 date.year(), date.month(), date.day());
726 } 689 }
727 if(dt.time().isValid()){ 690 if(dt.time().isValid()){
728 const QTime& time = dt.time(); 691 const QTime& time = dt.time();
729 timestr.sprintf("T%02d%02d%02d", 692 timestr.sprintf("T%02d%02d%02d",
730 time.hour(), time.minute(), time.second()); 693 time.hour(), time.minute(), time.second());
731 } 694 }
732 return datestr + timestr; 695 return datestr + timestr;
733} 696}
734QString SharpFormat::getEventString( Event* event ) 697QString SharpFormat::getEventString( Event* event )
735{ 698{
736 QStringList list; 699 QStringList list;
737 list.append( event->getID("Sharp_DTM") ); 700 list.append( event->getID("Sharp_DTM") );
738 list.append( event->categories().join(",") ); 701 list.append( event->categories().join(",") );
739 if ( !event->summary().isEmpty() ) 702 if ( !event->summary().isEmpty() )
740 list.append( event->summary() ); 703 list.append( event->summary() );
741 else 704 else
742 list.append("" ); 705 list.append("" );
743 if ( !event->location().isEmpty() ) 706 if ( !event->location().isEmpty() )
744 list.append( event->location() ); 707 list.append( event->location() );
745 else 708 else
746 list.append("" ); 709 list.append("" );
747 if ( !event->description().isEmpty() ) 710 if ( !event->description().isEmpty() )
748 list.append( event->description() ); 711 list.append( event->description() );
749 else 712 else
750 list.append( "" ); 713 list.append( "" );
751 if ( event->doesFloat () ) { 714 if ( event->doesFloat () ) {
752 list.append( dtToString( QDateTime(event->dtStart().date(), QTime(0,0,0)), false )); 715 list.append( dtToString( QDateTime(event->dtStart().date(), QTime(0,0,0)), false ));
753 list.append( dtToString( QDateTime(event->dtEnd().date(),QTime(23,59,59)), false )); //6 716 list.append( dtToString( QDateTime(event->dtEnd().date(),QTime(23,59,59)), false )); //6
754 list.append( "1" ); 717 list.append( "1" );
755 718
756 } 719 }
757 else { 720 else {
758 list.append( dtToString( event->dtStart()) ); 721 list.append( dtToString( event->dtStart()) );
759 list.append( dtToString( event->dtEnd()) ); //6 722 list.append( dtToString( event->dtEnd()) ); //6
760 list.append( "0" ); 723 list.append( "0" );
761 } 724 }
762 bool noAlarm = true; 725 bool noAlarm = true;
763 if ( event->alarms().count() > 0 ) { 726 if ( event->alarms().count() > 0 ) {
764 Alarm * al = event->alarms().first(); 727 Alarm * al = event->alarms().first();
765 if ( al->enabled() ) { 728 if ( al->enabled() ) {
766 noAlarm = false; 729 noAlarm = false;
767 list.append( "0" ); // yes, 0 == alarm 730 list.append( "0" ); // yes, 0 == alarm
768 list.append( QString::number( al->startOffset().asSeconds()/(-60) ) ); 731 list.append( QString::number( al->startOffset().asSeconds()/(-60) ) );
769 if ( al->type() == Alarm::Audio ) 732 if ( al->type() == Alarm::Audio )
770 list.append( "1" ); // type audio 733 list.append( "1" ); // type audio
771 else 734 else
772 list.append( "0" ); // type silent 735 list.append( "0" ); // type silent
773 } 736 }
774 } 737 }
775 if ( noAlarm ) { 738 if ( noAlarm ) {
776 list.append( "1" ); // yes, 1 == no alarm 739 list.append( "1" ); // yes, 1 == no alarm
777 list.append( "0" ); // no alarm offset 740 list.append( "0" ); // no alarm offset
778 list.append( "1" ); // type 741 list.append( "1" ); // type
779 } 742 }
780 // next is: 11 743 // next is: 11
781 // next is: 11-16 are recurrence 744 // next is: 11-16 are recurrence
782 Recurrence* rec = event->recurrence(); 745 Recurrence* rec = event->recurrence();
783 746
784 bool writeEndDate = false; 747 bool writeEndDate = false;
785 switch ( rec->doesRecur() ) 748 switch ( rec->doesRecur() )
786 { 749 {
787 case Recurrence::rDaily: // 0 750 case Recurrence::rDaily: // 0
788 list.append( "0" ); 751 list.append( "0" );
789 list.append( QString::number( rec->frequency() ));//12 752 list.append( QString::number( rec->frequency() ));//12
790 list.append( "0" ); 753 list.append( "0" );
791 list.append( "0" ); 754 list.append( "0" );
792 writeEndDate = true; 755 writeEndDate = true;
793 break; 756 break;
794 case Recurrence::rWeekly:// 1 757 case Recurrence::rWeekly:// 1
795 list.append( "1" ); 758 list.append( "1" );
796 list.append( QString::number( rec->frequency()) );//12 759 list.append( QString::number( rec->frequency()) );//12
797 list.append( "0" ); 760 list.append( "0" );
798 { 761 {
799 int days = 0; 762 int days = 0;
800 QBitArray weekDays = rec->days(); 763 QBitArray weekDays = rec->days();
801 int i; 764 int i;
802 for( i = 1; i <= 7; ++i ) { 765 for( i = 1; i <= 7; ++i ) {
803 if ( weekDays[i-1] ) { 766 if ( weekDays[i-1] ) {
804 days += 1 << (i-1); 767 days += 1 << (i-1);
805 } 768 }
806 } 769 }
807 list.append( QString::number( days ) ); 770 list.append( QString::number( days ) );
808 } 771 }
809 //pending weekdays 772 //pending weekdays
810 writeEndDate = true; 773 writeEndDate = true;
811 774
812 break; 775 break;
813 case Recurrence::rMonthlyPos:// 2 776 case Recurrence::rMonthlyPos:// 2
814 list.append( "2" ); 777 list.append( "2" );
815 list.append( QString::number( rec->frequency()) );//12 778 list.append( QString::number( rec->frequency()) );//12
816 779
817 writeEndDate = true; 780 writeEndDate = true;
818 { 781 {
819 int count = 1; 782 int count = 1;
820 QPtrList<Recurrence::rMonthPos> rmp; 783 QPtrList<Recurrence::rMonthPos> rmp;
821 rmp = rec->monthPositions(); 784 rmp = rec->monthPositions();
822 if ( rmp.first()->negative ) 785 if ( rmp.first()->negative )
823 count = 5 - rmp.first()->rPos - 1; 786 count = 5 - rmp.first()->rPos - 1;
824 else 787 else
825 count = rmp.first()->rPos - 1; 788 count = rmp.first()->rPos - 1;
826 list.append( QString::number( count ) ); 789 list.append( QString::number( count ) );
827 790
828 } 791 }
829 792
830 list.append( "0" ); 793 list.append( "0" );
831 break; 794 break;
832 case Recurrence::rMonthlyDay:// 3 795 case Recurrence::rMonthlyDay:// 3
833 list.append( "3" ); 796 list.append( "3" );
834 list.append( QString::number( rec->frequency()) );//12 797 list.append( QString::number( rec->frequency()) );//12
835 list.append( "0" ); 798 list.append( "0" );
836 list.append( "0" ); 799 list.append( "0" );
837 writeEndDate = true; 800 writeEndDate = true;
838 break; 801 break;
839 case Recurrence::rYearlyMonth://4 802 case Recurrence::rYearlyMonth://4
840 list.append( "4" ); 803 list.append( "4" );
841 list.append( QString::number( rec->frequency()) );//12 804 list.append( QString::number( rec->frequency()) );//12
842 list.append( "0" ); 805 list.append( "0" );
843 list.append( "0" ); 806 list.append( "0" );
844 writeEndDate = true; 807 writeEndDate = true;
845 break; 808 break;
846 809
847 default: 810 default:
848 list.append( "255" ); 811 list.append( "255" );
849 list.append( QString() ); 812 list.append( QString() );
850 list.append( "0" ); 813 list.append( "0" );
851 list.append( QString() ); 814 list.append( QString() );
852 list.append( "0" ); 815 list.append( "0" );
853 list.append( "20991231T000000" ); 816 list.append( "20991231T000000" );
854 break; 817 break;
855 } 818 }
856 if ( writeEndDate ) { 819 if ( writeEndDate ) {
857 820
858 if ( rec->endDate().isValid() ) { // 15 + 16 821 if ( rec->endDate().isValid() ) { // 15 + 16
859 list.append( "1" ); 822 list.append( "1" );
860 list.append( dtToString( rec->endDate()) ); 823 list.append( dtToString( rec->endDate()) );
861 } else { 824 } else {
862 list.append( "0" ); 825 list.append( "0" );
863 list.append( "20991231T000000" ); 826 list.append( "20991231T000000" );
864 } 827 }
865 828
866 } 829 }
867 if ( event->doesFloat () ) { 830 if ( event->doesFloat () ) {
868 list.append( dtToString( event->dtStart(), false ).left( 8 )); 831 list.append( dtToString( event->dtStart(), false ).left( 8 ));
869 list.append( dtToString( event->dtEnd(), false ).left( 8 )); //6 832 list.append( dtToString( event->dtEnd(), false ).left( 8 )); //6
870 833
871 } 834 }
872 else { 835 else {
873 list.append( QString() ); 836 list.append( QString() );
874 list.append( QString() ); 837 list.append( QString() );
875 838
876 } 839 }
877 if (event->dtStart().date() == event->dtEnd().date() ) 840 if (event->dtStart().date() == event->dtEnd().date() )
878 list.append( "0" ); 841 list.append( "0" );
879 else 842 else
880 list.append( "1" ); 843 list.append( "1" );
881 844
882 845
883 for(QStringList::Iterator it=list.begin(); 846 for(QStringList::Iterator it=list.begin();
884 it!=list.end(); ++it){ 847 it!=list.end(); ++it){
885 QString& s = (*it); 848 QString& s = (*it);
886 s.replace(QRegExp("\""), "\"\""); 849 s.replace(QRegExp("\""), "\"\"");
887 if(s.contains(QRegExp("[,\"\r\n]")) || s.stripWhiteSpace() != s){ 850 if(s.contains(QRegExp("[,\"\r\n]")) || s.stripWhiteSpace() != s){
888 s.prepend('\"'); 851 s.prepend('\"');
889 s.append('\"'); 852 s.append('\"');
890 } else if(s.isEmpty() && !s.isNull()){ 853 } else if(s.isEmpty() && !s.isNull()){
891 s = "\"\""; 854 s = "\"\"";
892 } 855 }
893 } 856 }
894 return list.join(","); 857 return list.join(",");
895 858
896 859
897} 860}
898QString SharpFormat::getTodoString( Todo* todo ) 861QString SharpFormat::getTodoString( Todo* todo )
899{ 862{
900 QStringList list; 863 QStringList list;
901 list.append( todo->getID("Sharp_DTM") ); 864 list.append( todo->getID("Sharp_DTM") );
902 list.append( todo->categories().join(",") ); 865 list.append( todo->categories().join(",") );
903 866
904 if ( todo->hasStartDate() ) { 867 if ( todo->hasStartDate() ) {
905 list.append( dtToString( todo->dtStart()) ); 868 list.append( dtToString( todo->dtStart()) );
906 } else 869 } else
907 list.append( QString() ); 870 list.append( QString() );
908 871
909 if ( todo->hasDueDate() ) { 872 if ( todo->hasDueDate() ) {
910 QTime tim; 873 QTime tim;
911 if ( todo->doesFloat()) { 874 if ( todo->doesFloat()) {
912 list.append( dtToString( QDateTime(todo->dtDue().date(),QTime( 0,0,0 )), false)) ; 875 list.append( dtToString( QDateTime(todo->dtDue().date(),QTime( 0,0,0 )), false)) ;
913 } else { 876 } else {
914 list.append( dtToString(todo->dtDue() ) ); 877 list.append( dtToString(todo->dtDue() ) );
915 } 878 }
916 } else 879 } else
917 list.append( QString() ); 880 list.append( QString() );
918 881
919 if ( todo->isCompleted() ) { 882 if ( todo->isCompleted() ) {
920 list.append( dtToString( todo->completed()) ); 883 list.append( dtToString( todo->completed()) );
921 list.append( "0" ); // yes 0 == completed 884 list.append( "0" ); // yes 0 == completed
922 } else { 885 } else {
923 list.append( dtToString( todo->completed()) ); 886 list.append( dtToString( todo->completed()) );
924 list.append( "1" ); 887 list.append( "1" );
925 } 888 }
926 list.append( QString::number( todo->priority() )); 889 list.append( QString::number( todo->priority() ));
927 if( ! todo->summary().isEmpty() ) 890 if( ! todo->summary().isEmpty() )
928 list.append( todo->summary() ); 891 list.append( todo->summary() );
929 else 892 else
930 list.append( "" ); 893 list.append( "" );
931 if (! todo->description().isEmpty() ) 894 if (! todo->description().isEmpty() )
932 list.append( todo->description() ); 895 list.append( todo->description() );
933 else 896 else
934 list.append( "" ); 897 list.append( "" );
935 for(QStringList::Iterator it=list.begin(); 898 for(QStringList::Iterator it=list.begin();
936 it!=list.end(); ++it){ 899 it!=list.end(); ++it){
937 QString& s = (*it); 900 QString& s = (*it);
938 s.replace(QRegExp("\""), "\"\""); 901 s.replace(QRegExp("\""), "\"\"");
939 if(s.contains(QRegExp("[,\"\r\n]")) || s.stripWhiteSpace() != s){ 902 if(s.contains(QRegExp("[,\"\r\n]")) || s.stripWhiteSpace() != s){
940 s.prepend('\"'); 903 s.prepend('\"');
941 s.append('\"'); 904 s.append('\"');
942 } else if(s.isEmpty() && !s.isNull()){ 905 } else if(s.isEmpty() && !s.isNull()){
943 s = "\"\""; 906 s = "\"\"";
944 } 907 }
945 } 908 }
946 return list.join(","); 909 return list.join(",");
947} 910}
948QString SharpFormat::getPart( const QString & text, bool &ok, int &start ) 911QString SharpFormat::getPart( const QString & text, bool &ok, int &start )
949{ 912{
950 //qDebug("start %d ", start); 913 //qDebug("start %d ", start);
951 914
952 QString retval =""; 915 QString retval ="";
953 if ( text.at(start) == '"' ) { 916 if ( text.at(start) == '"' ) {
954 if ( text.mid( start,2) == "\"\"" && !( text.mid( start+2,1) == "\"")) { 917 if ( text.mid( start,2) == "\"\"" && !( text.mid( start+2,1) == "\"")) {
955 start = start +2; 918 start = start +2;
956 if ( text.mid( start,1) == "," ) { 919 if ( text.mid( start,1) == "," ) {
957 start += 1; 920 start += 1;
958 } 921 }
959 retval = ""; 922 retval = "";
960 if ( text.mid( start,1) == "\n" ) { 923 if ( text.mid( start,1) == "\n" ) {
961 start += 1; 924 start += 1;
962 ok = false; 925 ok = false;
963 } 926 }
964 return retval; 927 return retval;
965 } 928 }
966 int hk = start+1; 929 int hk = start+1;
967 hk = text.find ('"',hk); 930 hk = text.find ('"',hk);
968 while ( text.at(hk+1) == '"' ) 931 while ( text.at(hk+1) == '"' )
969 hk = text.find ('"',hk+2); 932 hk = text.find ('"',hk+2);
970 retval = text.mid( start+1, hk-start-1); 933 retval = text.mid( start+1, hk-start-1);
971 start = hk+1; 934 start = hk+1;
972 retval.replace( QRegExp("\"\""), "\""); 935 retval.replace( QRegExp("\"\""), "\"");
973 if ( text.mid( start,1) == "," ) { 936 if ( text.mid( start,1) == "," ) {
974 start += 1; 937 start += 1;
975 } 938 }
976 if ( text.mid( start,1) == "\n" ) { 939 if ( text.mid( start,1) == "\n" ) {
977 start += 1; 940 start += 1;
978 ok = false; 941 ok = false;
979 } 942 }
980 //qDebug("retval***%s*** ",retval.latin1() ); 943 //qDebug("retval***%s*** ",retval.latin1() );
981 return retval; 944 return retval;
982 945
983 } else { 946 } else {
984 int nl = text.find ("\n",start); 947 int nl = text.find ("\n",start);
985 int kom = text.find (',',start); 948 int kom = text.find (',',start);
986 if ( kom < nl ) { 949 if ( kom < nl ) {
987 // qDebug("kom < nl %d ", kom); 950 // qDebug("kom < nl %d ", kom);
988 retval = text.mid(start, kom-start); 951 retval = text.mid(start, kom-start);
989 start = kom+1; 952 start = kom+1;
990 return retval; 953 return retval;
991 } else { 954 } else {
992 if ( nl == kom ) { 955 if ( nl == kom ) {
993 // qDebug(" nl == kom "); 956 // qDebug(" nl == kom ");
994 start = 0; 957 start = 0;
995 ok = false; 958 ok = false;
996 return "0"; 959 return "0";
997 } 960 }
998 // qDebug(" nl < kom ", nl); 961 // qDebug(" nl < kom ", nl);
999 retval = text.mid( start, nl-start); 962 retval = text.mid( start, nl-start);
1000 ok = false; 963 ok = false;
1001 start = nl+1; 964 start = nl+1;
1002 return retval; 965 return retval;
1003 } 966 }
1004 } 967 }
1005} 968}
1006bool SharpFormat::fromString( Calendar *calendar, const QString & text) 969bool SharpFormat::fromString( Calendar *calendar, const QString & text)
1007{ 970{
1008 return false; 971 return false;
1009} 972}
1010bool SharpFormat::fromString2Cal( Calendar *calendar,Calendar *existingCalendar, const QString & text, const QString & type) 973bool SharpFormat::fromString2Cal( Calendar *calendar,Calendar *existingCalendar, const QString & text, const QString & type)
1011{ 974{
1012 // qDebug("test %s ", text.latin1()); 975 // qDebug("test %s ", text.latin1());
1013 QStringList templist; 976 QStringList templist;
1014 QString tempString; 977 QString tempString;
1015 int start = 0; 978 int start = 0;
1016 int len = text.length(); 979 int len = text.length();
1017 int end = text.find ("\n",start)+1; 980 int end = text.find ("\n",start)+1;
1018 bool ok = true; 981 bool ok = true;
1019 start = end; 982 start = end;
1020 SharpParser handler( calendar ); 983 SharpParser handler( calendar );
1021 handler.setCategoriesList( mCategories ); 984 // handler.setCategoriesList( mCategories );
1022 while ( start > 0 ) { 985 while ( start > 0 ) {
1023 templist.clear(); 986 templist.clear();
1024 ok = true; 987 ok = true;
1025 while ( ok ) { 988 while ( ok ) {
1026 tempString = getPart( text, ok, start ); 989 tempString = getPart( text, ok, start );
1027 if ( start >= len || start == 0 ) { 990 if ( start >= len || start == 0 ) {
1028 start = 0; 991 start = 0;
1029 ok = false; 992 ok = false;
1030 } 993 }
1031 if ( tempString.right(1) =="\n" ) 994 if ( tempString.right(1) =="\n" )
1032 tempString = tempString.left( tempString.length()-1); 995 tempString = tempString.left( tempString.length()-1);
1033 //if ( ok ) 996 //if ( ok )
1034 templist.append( tempString ); 997 templist.append( tempString );
1035 //qDebug("%d ---%s---", templist.count(),tempString.latin1() ); 998 //qDebug("%d ---%s---", templist.count(),tempString.latin1() );
1036 } 999 }
1037 handler.startElement( existingCalendar, templist, type ); 1000 handler.startElement( existingCalendar, templist, type );
1038 } 1001 }
1039 1002
1040 return false; 1003 return false;
1041} 1004}
1042 1005
1043QString SharpFormat::toString( Calendar * ) 1006QString SharpFormat::toString( Calendar * )
1044{ 1007{
1045 return QString::null; 1008 return QString::null;
1046} 1009}
diff --git a/libkcal/sharpformat.h b/libkcal/sharpformat.h
index 0b13862..a71177d 100644
--- a/libkcal/sharpformat.h
+++ b/libkcal/sharpformat.h
@@ -1,61 +1,59 @@
1/* 1/*
2 This file is part of libkcal. 2 This file is part of libkcal.
3 3
4 Copyright (c) 2003 Cornelius Schumacher <schumacher@kde.org> 4 Copyright (c) 2003 Cornelius Schumacher <schumacher@kde.org>
5 5
6 This library is free software; you can redistribute it and/or 6 This library is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Library General Public 7 modify it under the terms of the GNU Library General Public
8 License as published by the Free Software Foundation; either 8 License as published by the Free Software Foundation; either
9 version 2 of the License, or (at your option) any later version. 9 version 2 of the License, or (at your option) any later version.
10 10
11 This library is distributed in the hope that it will be useful, 11 This library is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Library General Public License for more details. 14 Library General Public License for more details.
15 15
16 You should have received a copy of the GNU Library General Public License 16 You should have received a copy of the GNU Library General Public License
17 along with this library; see the file COPYING.LIB. If not, write to 17 along with this library; see the file COPYING.LIB. If not, write to
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19 Boston, MA 02111-1307, USA. 19 Boston, MA 02111-1307, USA.
20*/ 20*/
21#ifndef SHARPFORMAT_H 21#ifndef SHARPFORMAT_H
22#define SHARPAFORMAT_H 22#define SHARPAFORMAT_H
23 23
24#include <qstring.h> 24#include <qstring.h>
25 25
26#include "scheduler.h" 26#include "scheduler.h"
27 27
28#include "calformat.h" 28#include "calformat.h"
29 29
30namespace KCal { 30namespace KCal {
31 31
32/** 32/**
33 This class implements the calendar format used by Sharp. 33 This class implements the calendar format used by Sharp.
34*/ 34*/
35class SharpFormat : public QObject { 35class SharpFormat : public QObject {
36 public: 36 public:
37 /** Create new iCalendar format. */ 37 /** Create new iCalendar format. */
38 SharpFormat(); 38 SharpFormat();
39 virtual ~SharpFormat(); 39 virtual ~SharpFormat();
40 40
41 bool load( Calendar * ,Calendar *); 41 bool load( Calendar * ,Calendar *);
42 bool save( Calendar * ); 42 bool save( Calendar * );
43 void setCategoriesList ( QStringList * cat ){ mCategories = cat; }
44 bool fromString2Cal( Calendar *, Calendar *, const QString & , const QString & ); 43 bool fromString2Cal( Calendar *, Calendar *, const QString & , const QString & );
45 bool fromString( Calendar *, const QString & ); 44 bool fromString( Calendar *, const QString & );
46 QString toString( Calendar * ); 45 QString toString( Calendar * );
47 static ulong getCsum( const QStringList & ); 46 static ulong getCsum( const QStringList & );
48 47
49 private: 48 private:
50 QString getEventString( Event* ); 49 QString getEventString( Event* );
51 QString getTodoString( Todo* ); 50 QString getTodoString( Todo* );
52 QString dtToString( const QDateTime& dt, bool useTZ = true ); 51 QString dtToString( const QDateTime& dt, bool useTZ = true );
53 52
54 QStringList *mCategories;
55 int getNumFromRecord( QString answer,Incidence* inc ) ; 53 int getNumFromRecord( QString answer,Incidence* inc ) ;
56 QString getPart( const QString & text, bool &ok, int &start ); 54 QString getPart( const QString & text, bool &ok, int &start );
57}; 55};
58 56
59} 57}
60 58
61#endif 59#endif