summaryrefslogtreecommitdiffabout
authorzautrix <zautrix>2004-08-09 14:56:56 (UTC)
committer zautrix <zautrix>2004-08-09 14:56:56 (UTC)
commitad99dd380750834b3ccc4dd6fdcdd446ca5ba7ee (patch) (unidiff)
tree0394df7d796d38e7df637e6d45b82e7945fab55e
parent48f53b2d2e7ed189e88f924259693ab66ff44b7f (diff)
downloadkdepimpi-ad99dd380750834b3ccc4dd6fdcdd446ca5ba7ee.zip
kdepimpi-ad99dd380750834b3ccc4dd6fdcdd446ca5ba7ee.tar.gz
kdepimpi-ad99dd380750834b3ccc4dd6fdcdd446ca5ba7ee.tar.bz2
more phone sync
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/calendarview.cpp8
-rw-r--r--libkcal/phoneformat.cpp341
-rw-r--r--libkcal/phoneformat.h13
3 files changed, 168 insertions, 194 deletions
diff --git a/korganizer/calendarview.cpp b/korganizer/calendarview.cpp
index d6ead37..547d02b 100644
--- a/korganizer/calendarview.cpp
+++ b/korganizer/calendarview.cpp
@@ -1154,103 +1154,101 @@ bool CalendarView::syncCalendar(QString filename, int mode)
1154 FileStorage* storage = new FileStorage( calendar ); 1154 FileStorage* storage = new FileStorage( calendar );
1155 bool syncOK = false; 1155 bool syncOK = false;
1156 storage->setFileName( filename ); 1156 storage->setFileName( filename );
1157 // qDebug("loading ... "); 1157 // qDebug("loading ... ");
1158 if ( storage->load(KOPrefs::instance()->mUseQuicksave) ) { 1158 if ( storage->load(KOPrefs::instance()->mUseQuicksave) ) {
1159 getEventViewerDialog()->setSyncMode( true ); 1159 getEventViewerDialog()->setSyncMode( true );
1160 syncOK = synchronizeCalendar( mCalendar, calendar, mode ); 1160 syncOK = synchronizeCalendar( mCalendar, calendar, mode );
1161 getEventViewerDialog()->setSyncMode( false ); 1161 getEventViewerDialog()->setSyncMode( false );
1162 if ( syncOK ) { 1162 if ( syncOK ) {
1163 if ( KOPrefs::instance()->mWriteBackFile ) 1163 if ( KOPrefs::instance()->mWriteBackFile )
1164 { 1164 {
1165 storage->setSaveFormat( new ICalFormat( KOPrefs::instance()->mUseQuicksave) ); 1165 storage->setSaveFormat( new ICalFormat( KOPrefs::instance()->mUseQuicksave) );
1166 storage->save(); 1166 storage->save();
1167 } 1167 }
1168 } 1168 }
1169 setModified( true ); 1169 setModified( true );
1170 } 1170 }
1171 delete storage; 1171 delete storage;
1172 delete calendar; 1172 delete calendar;
1173 if ( syncOK ) 1173 if ( syncOK )
1174 updateView(); 1174 updateView();
1175 return syncOK; 1175 return syncOK;
1176} 1176}
1177void CalendarView::syncPhone() 1177void CalendarView::syncPhone()
1178{ 1178{
1179 syncExternal( 1 ); 1179 syncExternal( 1 );
1180} 1180}
1181void CalendarView::syncExternal( int mode ) 1181void CalendarView::syncExternal( int mode )
1182{ 1182{
1183 mGlobalSyncMode = SYNC_MODE_EXTERNAL; 1183 mGlobalSyncMode = SYNC_MODE_EXTERNAL;
1184 //mCurrentSyncDevice = "sharp-DTM"; 1184 //mCurrentSyncDevice = "sharp-DTM";
1185 if ( KOPrefs::instance()->mAskForPreferences ) 1185 if ( KOPrefs::instance()->mAskForPreferences )
1186 edit_sync_options(); 1186 edit_sync_options();
1187 qApp->processEvents(); 1187 qApp->processEvents();
1188 CalendarLocal* calendar = new CalendarLocal(); 1188 CalendarLocal* calendar = new CalendarLocal();
1189 calendar->setTimeZoneId(KOPrefs::instance()->mTimeZoneId); 1189 calendar->setTimeZoneId(KOPrefs::instance()->mTimeZoneId);
1190 bool syncOK = false; 1190 bool syncOK = false;
1191 bool loadSuccess = false; 1191 bool loadSuccess = false;
1192 PhoneFormat* phoneFormat = 0; 1192 PhoneFormat* phoneFormat = 0;
1193#ifndef DESKTOP_VERSION 1193#ifndef DESKTOP_VERSION
1194 SharpFormat* sharpFormat = 0; 1194 SharpFormat* sharpFormat = 0;
1195 if ( mode == 0 ) { // sharp 1195 if ( mode == 0 ) { // sharp
1196 sharpFormat = new SharpFormat () ; 1196 sharpFormat = new SharpFormat () ;
1197 loadSuccess = sharpFormat->load( calendar, mCalendar ); 1197 loadSuccess = sharpFormat->load( calendar, mCalendar );
1198 1198
1199 } else 1199 } else
1200#endif 1200#endif
1201 if ( mode == 1 ) { // phone 1201 if ( mode == 1 ) { // phone
1202 phoneFormat = new PhoneFormat (); 1202 phoneFormat = new PhoneFormat (mCurrentSyncDevice,
1203 loadSuccess = phoneFormat->load( calendar,
1204 mCalendar,
1205 mCurrentSyncDevice,
1206 KOPrefs::instance()->mPhoneDevice, 1203 KOPrefs::instance()->mPhoneDevice,
1207 KOPrefs::instance()->mPhoneConnection, 1204 KOPrefs::instance()->mPhoneConnection,
1208 KOPrefs::instance()->mPhoneModel); 1205 KOPrefs::instance()->mPhoneModel);
1206 loadSuccess = phoneFormat->load( calendar,mCalendar);
1209 1207
1210 } else 1208 } else
1211 return; 1209 return;
1212 if ( loadSuccess ) { 1210 if ( loadSuccess ) {
1213 getEventViewerDialog()->setSyncMode( true ); 1211 getEventViewerDialog()->setSyncMode( true );
1214 syncOK = synchronizeCalendar( mCalendar, calendar, KOPrefs::instance()->mSyncAlgoPrefs ); 1212 syncOK = synchronizeCalendar( mCalendar, calendar, KOPrefs::instance()->mSyncAlgoPrefs );
1215 getEventViewerDialog()->setSyncMode( false ); 1213 getEventViewerDialog()->setSyncMode( false );
1216 qApp->processEvents(); 1214 qApp->processEvents();
1217 if ( syncOK ) { 1215 if ( syncOK ) {
1218 if ( KOPrefs::instance()->mWriteBackFile ) 1216 if ( KOPrefs::instance()->mWriteBackFile )
1219 { 1217 {
1220 QPtrList<Incidence> iL = mCalendar->rawIncidences(); 1218 QPtrList<Incidence> iL = mCalendar->rawIncidences();
1221 Incidence* inc = iL.first(); 1219 Incidence* inc = iL.first();
1222 /* obsolete 1220 /* obsolete
1223 while ( inc ) { 1221 while ( inc ) {
1224 inc->setZaurusStat( inc->revision () ); 1222 inc->setZaurusStat( inc->revision () );
1225 inc = iL.next(); 1223 inc = iL.next();
1226 } 1224 }
1227 */ 1225 */
1228#ifndef DESKTOP_VERSION 1226#ifndef DESKTOP_VERSION
1229 if ( sharpFormat ) 1227 if ( sharpFormat )
1230 sharpFormat->save(calendar); 1228 sharpFormat->save(calendar);
1231#endif 1229#endif
1232 if ( phoneFormat ) 1230 if ( phoneFormat )
1233 phoneFormat->save(calendar); 1231 phoneFormat->save(calendar);
1234 iL = calendar->rawIncidences(); 1232 iL = calendar->rawIncidences();
1235 inc = iL.first(); 1233 inc = iL.first();
1236 Incidence* loc; 1234 Incidence* loc;
1237 while ( inc ) { 1235 while ( inc ) {
1238 if ( inc->tempSyncStat() == SYNC_TEMPSTATE_NEW_ID ) { 1236 if ( inc->tempSyncStat() == SYNC_TEMPSTATE_NEW_ID ) {
1239 loc = mCalendar->incidence(inc->uid() ); 1237 loc = mCalendar->incidence(inc->uid() );
1240 if ( loc ) { 1238 if ( loc ) {
1241 loc->setID(mCurrentSyncDevice, inc->getID(mCurrentSyncDevice) ); 1239 loc->setID(mCurrentSyncDevice, inc->getID(mCurrentSyncDevice) );
1242 loc->setCsum( mCurrentSyncDevice, inc->getCsum(mCurrentSyncDevice) ); 1240 loc->setCsum( mCurrentSyncDevice, inc->getCsum(mCurrentSyncDevice) );
1243 } 1241 }
1244 } 1242 }
1245 inc = iL.next(); 1243 inc = iL.next();
1246 } 1244 }
1247 Incidence* lse = getLastSyncEvent(); 1245 Incidence* lse = getLastSyncEvent();
1248 if ( lse ) { 1246 if ( lse ) {
1249 lse->setReadOnly( false ); 1247 lse->setReadOnly( false );
1250 lse->setDescription( "" ); 1248 lse->setDescription( "" );
1251 lse->setReadOnly( true ); 1249 lse->setReadOnly( true );
1252 } 1250 }
1253 } 1251 }
1254 } 1252 }
1255 setModified( true ); 1253 setModified( true );
1256 } else { 1254 } else {
diff --git a/libkcal/phoneformat.cpp b/libkcal/phoneformat.cpp
index 596148e..b8fed47 100644
--- a/libkcal/phoneformat.cpp
+++ b/libkcal/phoneformat.cpp
@@ -150,96 +150,97 @@ public:
150 } 150 }
151#endif 151#endif
152 break; 152 break;
153 case TODO_PHONE: 153 case TODO_PHONE:
154#if 0 154#if 0
155 // not supported 155 // not supported
156 printmsg("Phone : \"%s\"\n",DecodeUnicodeConsole(ToDo->Entries[j].Text)); 156 printmsg("Phone : \"%s\"\n",DecodeUnicodeConsole(ToDo->Entries[j].Text));
157#endif 157#endif
158 break; 158 break;
159 } 159 }
160 } 160 }
161 QString alarmString = "na"; 161 QString alarmString = "na";
162 if ( alarm ) { 162 if ( alarm ) {
163 Alarm *alarm; 163 Alarm *alarm;
164 if ( todo->alarms().count() > 0 ) 164 if ( todo->alarms().count() > 0 )
165 alarm = todo->alarms().first(); 165 alarm = todo->alarms().first();
166 else { 166 else {
167 alarm = new Alarm( todo ); 167 alarm = new Alarm( todo );
168 todo->addAlarm( alarm ); 168 todo->addAlarm( alarm );
169 } 169 }
170 alarm->setType( Alarm::Audio ); 170 alarm->setType( Alarm::Audio );
171 alarm->setEnabled( true ); 171 alarm->setEnabled( true );
172 int alarmOffset = alarmDt.secsTo( todo->dtStart() ); 172 int alarmOffset = alarmDt.secsTo( todo->dtStart() );
173 alarm->setStartOffset( -alarmOffset ); 173 alarm->setStartOffset( -alarmOffset );
174 alarmString = QString::number( alarmOffset ); 174 alarmString = QString::number( alarmOffset );
175 } else { 175 } else {
176 Alarm *alarm; 176 Alarm *alarm;
177 if ( todo->alarms().count() > 0 ) { 177 if ( todo->alarms().count() > 0 ) {
178 alarm = todo->alarms().first(); 178 alarm = todo->alarms().first();
179 alarm->setType( Alarm::Audio ); 179 alarm->setType( Alarm::Audio );
180 alarm->setStartOffset( -60*15 ); 180 alarm->setStartOffset( -60*15 );
181 alarm->setEnabled( false ); 181 alarm->setEnabled( false );
182 } 182 }
183 } 183 }
184 // csum ***************************************** 184 // csum *****************************************
185 QStringList attList; 185 QStringList attList;
186 uint cSum; 186 uint cSum;
187 if ( todo->hasDueDate() ) 187 if ( todo->hasDueDate() )
188 attList << dtToString ( todo->dtDue() ); 188 attList << dtToString ( todo->dtDue() );
189 attList << QString::number( id ); 189 attList << QString::number( id );
190 attList << todo->summary(); 190 attList << todo->summary();
191 attList << completedString; 191 attList << completedString;
192 attList << QString::number( todo->priority() ); 192 attList << QString::number( todo->priority() );
193 attList << alarmString; 193 attList << alarmString;
194 attList << todo->categoriesStr(); 194 attList << todo->categoriesStr();
195 attList << todo->secrecyStr(); 195 attList << todo->secrecyStr();
196 cSum = PhoneFormat::getCsum(attList ); 196 cSum = PhoneFormat::getCsum(attList );
197 todo->setCsum( mProfileName, QString::number( cSum )); 197 todo->setCsum( mProfileName, QString::number( cSum ));
198 todo->setTempSyncStat( SYNC_TEMPSTATE_NEW_EXTERNAL );
198 mCalendar->addTodo( todo); 199 mCalendar->addTodo( todo);
199 200
200 return true; 201 return true;
201 } 202 }
202 bool readEvent( Calendar *existingCalendar, GSM_CalendarEntry*Note) 203 bool readEvent( Calendar *existingCalendar, GSM_CalendarEntry*Note)
203 { 204 {
204 205
205 int id = Note->Location; 206 int id = Note->Location;
206 Event *event; 207 Event *event;
207 event = existingCalendar->event( mProfileName ,QString::number( id ) ); 208 event = existingCalendar->event( mProfileName ,QString::number( id ) );
208 if ( event ) 209 if ( event )
209 event = (Event*)event->clone(); 210 event = (Event*)event->clone();
210 else 211 else
211 event = new Event; 212 event = new Event;
212 event->setID( mProfileName,QString::number( id ) ); 213 event->setID( mProfileName,QString::number( id ) );
213 event->setTempSyncStat(SYNC_TEMPSTATE_NEW_EXTERNAL ); 214 event->setTempSyncStat(SYNC_TEMPSTATE_NEW_EXTERNAL );
214 215
215 216
216 int i = 0; 217 int i = 0;
217 bool repeating = false; 218 bool repeating = false;
218 int repeat_dayofweek = -1; 219 int repeat_dayofweek = -1;
219 int repeat_day = -1; 220 int repeat_day = -1;
220 int repeat_weekofmonth = -1; 221 int repeat_weekofmonth = -1;
221 int repeat_month = -1; 222 int repeat_month = -1;
222 int repeat_frequency = -1; 223 int repeat_frequency = -1;
223 int rec_type = -1; 224 int rec_type = -1;
224 GSM_DateTime repeat_startdate = {0,0,0,0,0,0,0}; 225 GSM_DateTime repeat_startdate = {0,0,0,0,0,0,0};
225 GSM_DateTime repeat_stopdate = {0,0,0,0,0,0,0}; 226 GSM_DateTime repeat_stopdate = {0,0,0,0,0,0,0};
226 GSM_DateTime* dtp; 227 GSM_DateTime* dtp;
227 bool alarm = false; 228 bool alarm = false;
228 QDateTime alarmDt; 229 QDateTime alarmDt;
229 repeat_startdate.Day= 0; 230 repeat_startdate.Day= 0;
230 repeat_stopdate.Day = 0; 231 repeat_stopdate.Day = 0;
231 for (i=0;i<Note->EntriesNum;i++) { 232 for (i=0;i<Note->EntriesNum;i++) {
232 233
233 //qDebug(" for ev"); 234 //qDebug(" for ev");
234 switch (Note->Entries[i].EntryType) { 235 switch (Note->Entries[i].EntryType) {
235 case CAL_START_DATETIME: 236 case CAL_START_DATETIME:
236 dtp = &Note->Entries[i].Date ; 237 dtp = &Note->Entries[i].Date ;
237 if ( dtp->Hour > 24 ) { 238 if ( dtp->Hour > 24 ) {
238 event->setFloats( true ); 239 event->setFloats( true );
239 event->setDtStart( QDateTime (datefromGSM ( dtp ), QTime(0,0,0 ))); 240 event->setDtStart( QDateTime (datefromGSM ( dtp ), QTime(0,0,0 )));
240 } else { 241 } else {
241 event->setDtStart (fromGSM ( dtp )); 242 event->setDtStart (fromGSM ( dtp ));
242 243
243 } 244 }
244 break; 245 break;
245 case CAL_END_DATETIME: 246 case CAL_END_DATETIME:
@@ -452,530 +453,502 @@ public:
452 r->setYearly( Recurrence::rYearlyMonth, freq, -1 ); 453 r->setYearly( Recurrence::rYearlyMonth, freq, -1 );
453 r->addYearlyNum( startDate.month() ); 454 r->addYearlyNum( startDate.month() );
454 } 455 }
455 } else { 456 } else {
456 event->recurrence()->unsetRecurs(); 457 event->recurrence()->unsetRecurs();
457 } 458 }
458 459
459 QStringList categoryList; 460 QStringList categoryList;
460 categoryList << getCategory( Note ); 461 categoryList << getCategory( Note );
461 event->setCategories( categoryList ); 462 event->setCategories( categoryList );
462 QString alarmString = "na"; 463 QString alarmString = "na";
463 // strange 0 semms to mean: alarm enabled 464 // strange 0 semms to mean: alarm enabled
464 if ( alarm ) { 465 if ( alarm ) {
465 Alarm *alarm; 466 Alarm *alarm;
466 if ( event->alarms().count() > 0 ) 467 if ( event->alarms().count() > 0 )
467 alarm = event->alarms().first(); 468 alarm = event->alarms().first();
468 else { 469 else {
469 alarm = new Alarm( event ); 470 alarm = new Alarm( event );
470 event->addAlarm( alarm ); 471 event->addAlarm( alarm );
471 } 472 }
472 alarm->setType( Alarm::Audio ); 473 alarm->setType( Alarm::Audio );
473 alarm->setEnabled( true ); 474 alarm->setEnabled( true );
474 int alarmOffset = alarmDt.secsTo( event->dtStart() ); 475 int alarmOffset = alarmDt.secsTo( event->dtStart() );
475 alarm->setStartOffset( -alarmOffset ); 476 alarm->setStartOffset( -alarmOffset );
476 alarmString = QString::number( alarmOffset ); 477 alarmString = QString::number( alarmOffset );
477 } else { 478 } else {
478 Alarm *alarm; 479 Alarm *alarm;
479 if ( event->alarms().count() > 0 ) { 480 if ( event->alarms().count() > 0 ) {
480 alarm = event->alarms().first(); 481 alarm = event->alarms().first();
481 alarm->setType( Alarm::Audio ); 482 alarm->setType( Alarm::Audio );
482 alarm->setStartOffset( -60*15 ); 483 alarm->setStartOffset( -60*15 );
483 alarm->setEnabled( false ); 484 alarm->setEnabled( false );
484 } 485 }
485 } 486 }
486 // csum ***************************************** 487 // csum *****************************************
487 QStringList attList; 488 QStringList attList;
488 uint cSum; 489 uint cSum;
489 attList << dtToString ( event->dtStart() ); 490 attList << dtToString ( event->dtStart() );
490 attList << dtToString ( event->dtEnd() ); 491 attList << dtToString ( event->dtEnd() );
491 attList << QString::number( id ); 492 attList << QString::number( id );
492 attList << event->summary(); 493 attList << event->summary();
493 attList << event->location(); 494 attList << event->location();
494 attList << alarmString; 495 attList << alarmString;
495 attList << recurString; 496 attList << recurString;
496 attList << event->categoriesStr(); 497 attList << event->categoriesStr();
497 attList << event->secrecyStr(); 498 attList << event->secrecyStr();
498 cSum = PhoneFormat::getCsum(attList ); 499 cSum = PhoneFormat::getCsum(attList );
499 event->setCsum( mProfileName, QString::number( cSum )); 500 event->setCsum( mProfileName, QString::number( cSum ));
501 event->setTempSyncStat( SYNC_TEMPSTATE_NEW_EXTERNAL );
500 mCalendar->addEvent( event); 502 mCalendar->addEvent( event);
501 503
502 return true; 504 return true;
503 } 505 }
504 506
505 507
506 QDateTime fromGSM ( GSM_DateTime*dtp, bool useTz = true ) { 508 QDateTime fromGSM ( GSM_DateTime*dtp, bool useTz = true ) {
507 QDateTime dt; 509 QDateTime dt;
508 int y,m,t,h,min,sec; 510 int y,m,t,h,min,sec;
509 y = dtp->Year; 511 y = dtp->Year;
510 m = dtp->Month; 512 m = dtp->Month;
511 t = dtp->Day; 513 t = dtp->Day;
512 h = dtp->Hour; 514 h = dtp->Hour;
513 min = dtp->Minute; 515 min = dtp->Minute;
514 sec = dtp->Second; 516 sec = dtp->Second;
515 dt = QDateTime(QDate(y,m,t), QTime(h,min,sec)); 517 dt = QDateTime(QDate(y,m,t), QTime(h,min,sec));
516 // dtp->Timezone: offset in hours 518 // dtp->Timezone: offset in hours
517 int offset = KGlobal::locale()->localTimeOffset( dt ); 519 int offset = KGlobal::locale()->localTimeOffset( dt );
518 if ( useTz ) 520 if ( useTz )
519 dt = dt.addSecs ( offset*60); 521 dt = dt.addSecs ( offset*60);
520 return dt; 522 return dt;
521 523
522 } 524 }
523 525
524 QString dtToString( const QDateTime& dti, bool useTZ = false ) 526 QString dtToString( const QDateTime& dti, bool useTZ = false )
525 { 527 {
526 QString datestr; 528 QString datestr;
527 QString timestr; 529 QString timestr;
528 int offset = KGlobal::locale()->localTimeOffset( dti ); 530 int offset = KGlobal::locale()->localTimeOffset( dti );
529 QDateTime dt; 531 QDateTime dt;
530 if (useTZ) 532 if (useTZ)
531 dt = dti.addSecs ( -(offset*60)); 533 dt = dti.addSecs ( -(offset*60));
532 else 534 else
533 dt = dti; 535 dt = dti;
534 if(dt.date().isValid()){ 536 if(dt.date().isValid()){
535 const QDate& date = dt.date(); 537 const QDate& date = dt.date();
536 datestr.sprintf("%04d%02d%02d", 538 datestr.sprintf("%04d%02d%02d",
537 date.year(), date.month(), date.day()); 539 date.year(), date.month(), date.day());
538 } 540 }
539 if(dt.time().isValid()){ 541 if(dt.time().isValid()){
540 const QTime& time = dt.time(); 542 const QTime& time = dt.time();
541 timestr.sprintf("T%02d%02d%02d", 543 timestr.sprintf("T%02d%02d%02d",
542 time.hour(), time.minute(), time.second()); 544 time.hour(), time.minute(), time.second());
543 } 545 }
544 return datestr + timestr; 546 return datestr + timestr;
545 } 547 }
546 QDate datefromGSM ( GSM_DateTime*dtp ) { 548 QDate datefromGSM ( GSM_DateTime*dtp ) {
547 return QDate ( dtp->Year, dtp->Month, dtp->Day ); 549 return QDate ( dtp->Year, dtp->Month, dtp->Day );
548 } 550 }
549 QString getCategory( GSM_CalendarEntry*Note) 551 QString getCategory( GSM_CalendarEntry*Note)
550 { 552 {
551 QString CATEGORY; 553 QString CATEGORY;
552 switch (Note->Type) { 554 switch (Note->Type) {
553 case GSM_CAL_REMINDER : CATEGORY = QString("Reminder"); break; 555 case GSM_CAL_REMINDER : CATEGORY = QString("Reminder"); break;
554 case GSM_CAL_CALL : CATEGORY = QString("Call"); break; 556 case GSM_CAL_CALL : CATEGORY = QString("Call"); break;
555 case GSM_CAL_MEETING : CATEGORY = QString("Meeting"); break; 557 case GSM_CAL_MEETING : CATEGORY = QString("Meeting"); break;
556 case GSM_CAL_BIRTHDAY : CATEGORY = QString("Birthday"); break; 558 case GSM_CAL_BIRTHDAY : CATEGORY = QString("Birthday"); break;
557 case GSM_CAL_MEMO : CATEGORY = QString("Memo"); break; 559 case GSM_CAL_MEMO : CATEGORY = QString("Memo"); break;
558 case GSM_CAL_TRAVEL : CATEGORY = QString("Travel"); break; 560 case GSM_CAL_TRAVEL : CATEGORY = QString("Travel"); break;
559 case GSM_CAL_VACATION : CATEGORY = QString("Vacation"); break; 561 case GSM_CAL_VACATION : CATEGORY = QString("Vacation"); break;
560 case GSM_CAL_ALARM : CATEGORY = QString("Alarm"); break; 562 case GSM_CAL_ALARM : CATEGORY = QString("Alarm"); break;
561 case GSM_CAL_DAILY_ALARM : CATEGORY = QString("Daily alarm"); break; 563 case GSM_CAL_DAILY_ALARM : CATEGORY = QString("Daily alarm"); break;
562 case GSM_CAL_T_ATHL : CATEGORY = QString("Training/Athletism"); break; 564 case GSM_CAL_T_ATHL : CATEGORY = QString("Training/Athletism"); break;
563 case GSM_CAL_T_BALL : CATEGORY = QString("Training/Ball Games"); break; 565 case GSM_CAL_T_BALL : CATEGORY = QString("Training/Ball Games"); break;
564 case GSM_CAL_T_CYCL : CATEGORY = QString("Training/Cycling"); break; 566 case GSM_CAL_T_CYCL : CATEGORY = QString("Training/Cycling"); break;
565 case GSM_CAL_T_BUDO : CATEGORY = QString("Training/Budo"); break; 567 case GSM_CAL_T_BUDO : CATEGORY = QString("Training/Budo"); break;
566 case GSM_CAL_T_DANC : CATEGORY = QString("Training/Dance"); break; 568 case GSM_CAL_T_DANC : CATEGORY = QString("Training/Dance"); break;
567 case GSM_CAL_T_EXTR : CATEGORY = QString("Training/Extreme Sports"); break; 569 case GSM_CAL_T_EXTR : CATEGORY = QString("Training/Extreme Sports"); break;
568 case GSM_CAL_T_FOOT : CATEGORY = QString("Training/Football"); break; 570 case GSM_CAL_T_FOOT : CATEGORY = QString("Training/Football"); break;
569 case GSM_CAL_T_GOLF : CATEGORY = QString("Training/Golf"); break; 571 case GSM_CAL_T_GOLF : CATEGORY = QString("Training/Golf"); break;
570 case GSM_CAL_T_GYM : CATEGORY = QString("Training/Gym"); break; 572 case GSM_CAL_T_GYM : CATEGORY = QString("Training/Gym"); break;
571 case GSM_CAL_T_HORS : CATEGORY = QString("Training/Horse Races"); break; 573 case GSM_CAL_T_HORS : CATEGORY = QString("Training/Horse Races"); break;
572 case GSM_CAL_T_HOCK : CATEGORY = QString("Training/Hockey"); break; 574 case GSM_CAL_T_HOCK : CATEGORY = QString("Training/Hockey"); break;
573 case GSM_CAL_T_RACE : CATEGORY = QString("Training/Races"); break; 575 case GSM_CAL_T_RACE : CATEGORY = QString("Training/Races"); break;
574 case GSM_CAL_T_RUGB : CATEGORY = QString("Training/Rugby"); break; 576 case GSM_CAL_T_RUGB : CATEGORY = QString("Training/Rugby"); break;
575 case GSM_CAL_T_SAIL : CATEGORY = QString("Training/Sailing"); break; 577 case GSM_CAL_T_SAIL : CATEGORY = QString("Training/Sailing"); break;
576 case GSM_CAL_T_STRE : CATEGORY = QString("Training/Street Games"); break; 578 case GSM_CAL_T_STRE : CATEGORY = QString("Training/Street Games"); break;
577 case GSM_CAL_T_SWIM : CATEGORY = QString("Training/Swimming"); break; 579 case GSM_CAL_T_SWIM : CATEGORY = QString("Training/Swimming"); break;
578 case GSM_CAL_T_TENN : CATEGORY = QString("Training/Tennis"); break; 580 case GSM_CAL_T_TENN : CATEGORY = QString("Training/Tennis"); break;
579 case GSM_CAL_T_TRAV : CATEGORY = QString("Training/Travels"); break; 581 case GSM_CAL_T_TRAV : CATEGORY = QString("Training/Travels"); break;
580 case GSM_CAL_T_WINT : CATEGORY = QString("Training/Winter Games"); break; 582 case GSM_CAL_T_WINT : CATEGORY = QString("Training/Winter Games"); break;
581 default : CATEGORY = QString(""); 583 default : CATEGORY = QString("");
582 } 584 }
583 585
584 return CATEGORY; 586 return CATEGORY;
585 } 587 }
586 588
587protected: 589protected:
588private: 590private:
589 Calendar *mCalendar; 591 Calendar *mCalendar;
590 QString mProfileName ; 592 QString mProfileName ;
591}; 593};
592 594
593 595
594PhoneFormat::PhoneFormat() 596PhoneFormat::PhoneFormat(QString profileName, QString device,QString connection, QString model )
595{ 597{
596 ; 598 mProfileName = profileName;
599 mDevice = device;
600 mConnection = connection;
601 mModel = model;
597} 602}
598 603
599PhoneFormat::~PhoneFormat() 604PhoneFormat::~PhoneFormat()
600{ 605{
601} 606}
607int PhoneFormat::initDevice(GSM_StateMachine *s)
608{
609 GSM_ReadConfig(NULL, &s->Config[0], 0);
610 s->ConfigNum = 1;
611 GSM_Config *cfg = &s->Config[0];
612 if ( ! mConnection.isEmpty() ) {
613 cfg->Connection = strdup(mConnection.latin1());
614 cfg->DefaultConnection = false;
615 qDebug("Connection set %s ", cfg->Connection );
616
617 }
618 if ( ! mDevice.isEmpty() ) {
619 cfg->Device = strdup(mDevice.latin1());
620 cfg->DefaultDevice = false;
621 qDebug("Device set %s ", cfg->Device);
622
623 }
624 if ( ! mModel.isEmpty() ) {
625 strcpy(cfg->Model,mModel.latin1() );
626 cfg->DefaultModel = false;
627 qDebug("Model set %s ",cfg->Model );
628 }
629 int error=GSM_InitConnection(s,3);
630 return error;
631}
602ulong PhoneFormat::getCsum( const QStringList & attList) 632ulong PhoneFormat::getCsum( const QStringList & attList)
603{ 633{
604 int max = attList.count() -1; 634 int max = attList.count() -1;
605 ulong cSum = 0; 635 ulong cSum = 0;
606 int j,k,i; 636 int j,k,i;
607 int add; 637 int add;
608 for ( i = 1; i < max ; ++i ) { 638 for ( i = 1; i < max ; ++i ) {
609 QString s = attList[i]; 639 QString s = attList[i];
610 if ( ! s.isEmpty() ){ 640 if ( ! s.isEmpty() ){
611 j = s.length(); 641 j = s.length();
612 for ( k = 0; k < j; ++k ) { 642 for ( k = 0; k < j; ++k ) {
613 int mul = k +1; 643 int mul = k +1;
614 add = s[k].unicode (); 644 add = s[k].unicode ();
615 if ( k < 16 ) 645 if ( k < 16 )
616 mul = mul * mul; 646 mul = mul * mul;
617 add = add * mul *i*i*i; 647 add = add * mul *i*i*i;
618 cSum += add; 648 cSum += add;
619 } 649 }
620 } 650 }
621 } 651 }
622 return cSum; 652 return cSum;
623 653
624} 654}
625//extern "C" GSM_Error GSM_InitConnection(GSM_StateMachine *s, int ReplyNum); 655//extern "C" GSM_Error GSM_InitConnection(GSM_StateMachine *s, int ReplyNum);
626#include <stdlib.h> 656#include <stdlib.h>
627#define DEBUGMODE false 657#define DEBUGMODE false
628bool PhoneFormat::load( Calendar *calendar, Calendar *existingCal ,QString profileName, QString device,QString connection, QString model ) 658bool PhoneFormat::load( Calendar *calendar, Calendar *existingCal)
629{ 659{
630 mProfileName = profileName;
631 GSM_StateMachines; 660 GSM_StateMachines;
632 qDebug(" load "); 661 qDebug(" load ");
633 s.opened = false; 662 s.opened = false;
634 s.msg = NULL; 663 s.msg = NULL;
635 s.ConfigNum = 0; 664 s.ConfigNum = 0;
636#if 0 665#if 0
637 static char*cp; 666 static char*cp;
638 static INI_Section *cfg = NULL; 667 static INI_Section *cfg = NULL;
639 cfg=GSM_FindGammuRC(); 668 cfg=GSM_FindGammuRC();
640 int i; 669 int i;
641 for (i = 0; i <= MAX_CONFIG_NUM; i++) { 670 for (i = 0; i <= MAX_CONFIG_NUM; i++) {
642 if (cfg!=NULL) { 671 if (cfg!=NULL) {
643 cp = (char *)INI_GetValue(cfg, (unsigned char*) "gammu", (unsigned char*)"gammucoding", false); 672 cp = (char *)INI_GetValue(cfg, (unsigned char*) "gammu", (unsigned char*)"gammucoding", false);
644 if (cp) di.coding = cp; 673 if (cp) di.coding = cp;
645 674
646 s.Config[i].Localize = (char *)INI_GetValue(cfg, (unsigned char*) "gammu", (unsigned char*) "gammuloc", false); 675 s.Config[i].Localize = (char *)INI_GetValue(cfg, (unsigned char*) "gammu", (unsigned char*) "gammuloc", false);
647 if (s.Config[i].Localize) { 676 if (s.Config[i].Localize) {
648 s.msg=INI_ReadFile(s.Config[i].Localize, true); 677 s.msg=INI_ReadFile(s.Config[i].Localize, true);
649 } else { 678 } else {
650#if !defined(WIN32) && defined(LOCALE_PATH) 679#if !defined(WIN32) && defined(LOCALE_PATH)
651 locale = setlocale(LC_MESSAGES, NULL); 680 locale = setlocale(LC_MESSAGES, NULL);
652 if (locale != NULL) { 681 if (locale != NULL) {
653 snprintf(locale_file, 200, "%s/gammu_%c%c.txt", 682 snprintf(locale_file, 200, "%s/gammu_%c%c.txt",
654 LOCALE_PATH, 683 LOCALE_PATH,
655 tolower(locale[0]), 684 tolower(locale[0]),
656 tolower(locale[1])); 685 tolower(locale[1]));
657 s.msg = INI_ReadFile(locale_file, true); 686 s.msg = INI_ReadFile(locale_file, true);
658 } 687 }
659#endif 688#endif
660 } 689 }
661 } 690 }
662 691
663 /* Wanted user specific configuration? */ 692 /* Wanted user specific configuration? */
664 693
665 if (!GSM_ReadConfig(cfg, &s.Config[i], i) && i != 0) break; 694 if (!GSM_ReadConfig(cfg, &s.Config[i], i) && i != 0) break;
666 695
667 s.ConfigNum++; 696 s.ConfigNum++;
668 697
669 /* We want to use only one file descriptor for global and state machine debug output */ 698 /* We want to use only one file descriptor for global and state machine debug output */
670 s.Config[i].UseGlobalDebugFile = true; 699 s.Config[i].UseGlobalDebugFile = true;
671 700
672 701
673 702
674 /* We wanted to read just user specified configuration. */ 703 /* We wanted to read just user specified configuration. */
675 {break;} 704 {break;}
676 } 705 }
677 706
678#endif 707#endif
679 setlocale(LC_ALL, ""); 708 int error=initDevice(&s);
680 GSM_ReadConfig(NULL, &s.Config[0], 0);
681 s.ConfigNum = 1;
682 GSM_Config *cfg = &s.Config[0];
683 if ( ! connection.isEmpty() ) {
684 cfg->Connection = strdup(connection.latin1());
685 cfg->DefaultConnection = false;
686 qDebug("Connection set %s ", cfg->Connection );
687
688 }
689 if ( ! device.isEmpty() ) {
690 cfg->Device = strdup(device.latin1());
691 cfg->DefaultDevice = false;
692 qDebug("Device set %s ", cfg->Device);
693
694 }
695 if ( ! model.isEmpty() ) {
696 strcpy(cfg->Model,model.latin1() );
697 cfg->DefaultModel = false;
698 qDebug("Model set %s ",cfg->Model );
699
700
701 }
702 int error=GSM_InitConnection(&s,3);
703 qDebug("GSM Init %d (no error is %d)", error, ERR_NONE); 709 qDebug("GSM Init %d (no error is %d)", error, ERR_NONE);
704 if ( error != ERR_NONE ) 710 if ( error != ERR_NONE )
705 return false; 711 return false;
706 GSM_Phone_Functions*Phone; 712 GSM_Phone_Functions*Phone;
707 GSM_CalendarEntrynote; 713 GSM_CalendarEntrynote;
708 bool start = true; 714 bool start = true;
709 Phone=s.Phone.Functions; 715 Phone=s.Phone.Functions;
710 bool gshutdown = false; 716 bool gshutdown = false;
711 PhoneParser handler( calendar, profileName ); 717 PhoneParser handler( calendar, mProfileName );
712 int ccc = 0; 718 int ccc = 0;
713 qDebug("Debug: only 10 calender items are downloaded "); 719 qDebug("Debug: only 10 calender items are downloaded ");
714 while (!gshutdown && ccc++ < 10) { 720 while (!gshutdown && ccc++ < 10) {
715 721
716 qDebug("readEvent %d ", ccc); 722 qDebug("readEvent %d ", ccc);
717 error=Phone->GetNextCalendar(&s,&note,start); 723 error=Phone->GetNextCalendar(&s,&note,start);
718 if (error == ERR_EMPTY) break; 724 if (error == ERR_EMPTY) break;
719 start = false; 725 start = false;
720 handler.readEvent( existingCal, &note ); 726 handler.readEvent( existingCal, &note );
721 } 727 }
722 728
723 start = true; 729 start = true;
724 GSM_ToDoEntry ToDo; 730 GSM_ToDoEntry ToDo;
725 ccc = 0; 731 ccc = 0;
726 while (!gshutdown) { 732 while (!gshutdown) {
727 error = Phone->GetNextToDo(&s, &ToDo, start); 733 error = Phone->GetNextToDo(&s, &ToDo, start);
728 if (error == ERR_EMPTY) break; 734 if (error == ERR_EMPTY) break;
729 start = false; 735 start = false;
730 qDebug("ReadTodo %d ", ++ccc); 736 qDebug("ReadTodo %d ", ++ccc);
731 handler.readTodo( existingCal, &ToDo, &s); 737 handler.readTodo( existingCal, &ToDo, &s);
732 738
733 } 739 }
734 740
735 error=GSM_TerminateConnection(&s); 741 error=GSM_TerminateConnection(&s);
736 742
737 return true; 743 return true;
738} 744}
745void PhoneFormat::event2GSM( Event* ev, GSM_CalendarEntry*Note )
746{
739 747
740bool PhoneFormat::save( Calendar *calendar) 748}
749void PhoneFormat::todo2GSM( Todo* todo, GSM_ToDoEntry *gsm )
741{ 750{
742#if 0 751#if 0
743 QLabel status ( i18n("Processing/adding events ..."), 0 ); 752 QStringList list;
753 list.append( QString::number( todo->zaurusId() ) );
754 list.append( todo->categories().join(",") );
755
756 if ( todo->hasStartDate() ) {
757 list.append( dtToString( todo->dtStart()) );
758 } else
759 list.append( QString() );
760
761 if ( todo->hasDueDate() ) {
762 QTime tim;
763 if ( todo->doesFloat()) {
764 list.append( dtToString( QDateTime(todo->dtDue().date(),QTime( 0,0,0 )), false)) ;
765 } else {
766 list.append( dtToString(todo->dtDue() ) );
767 }
768 } else
769 list.append( QString() );
770
771 if ( todo->isCompleted() ) {
772 list.append( dtToString( todo->completed()) );
773 list.append( "0" ); // yes 0 == completed
774 } else {
775 list.append( dtToString( todo->completed()) );
776 list.append( "1" );
777 }
778 list.append( QString::number( todo->priority() ));
779 if( ! todo->summary().isEmpty() )
780 list.append( todo->summary() );
781 else
782 list.append( "" );
783 if (! todo->description().isEmpty() )
784 list.append( todo->description() );
785 else
786 list.append( "" );
787 for(QStringList::Iterator it=list.begin();
788 it!=list.end(); ++it){
789 QString& s = (*it);
790 s.replace(QRegExp("\""), "\"\"");
791 if(s.contains(QRegExp("[,\"\r\n]")) || s.stripWhiteSpace() != s){
792 s.prepend('\"');
793 s.append('\"');
794 } else if(s.isEmpty() && !s.isNull()){
795 s = "\"\"";
796 }
797 }
798 return list.join(",");
799#endif
800}
801bool PhoneFormat::save( Calendar *calendar)
802{
803 GSM_StateMachines;
804 qDebug(" save ");
805 s.opened = false;
806 s.msg = NULL;
807 s.ConfigNum = 0;
808 QLabel status ( i18n("Writing data. Opening device ..."), 0 );
744 int w = status.sizeHint().width()+20 ; 809 int w = status.sizeHint().width()+20 ;
745 if ( w < 200 ) w = 200; 810 if ( w < 200 ) w = 200;
746 int h = status.sizeHint().height()+20 ; 811 int h = status.sizeHint().height()+20 ;
747 int dw = QApplication::desktop()->width(); 812 int dw = QApplication::desktop()->width();
748 int dh = QApplication::desktop()->height(); 813 int dh = QApplication::desktop()->height();
749 status.setCaption(i18n("Writing DTM Data") ); 814 status.setCaption(i18n("Writing DTM Data") );
750 status.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 815 status.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
751 status.show(); 816 status.show();
752 status.raise(); 817 status.raise();
753 qApp->processEvents(); 818 qApp->processEvents();
754 bool debug = DEBUGMODE; 819
755 QString codec = "utf8"; 820 int error=initDevice(&s);
756 QString answer; 821 qDebug("GSM Init %d (no error is %d)", error, ERR_NONE);
757 QString ePrefix = "CARDID,CATEGORY,DSRP,PLCE,MEM1,TIM1,TIM2,ADAY,ARON,ARMN,ARSD,RTYP,RFRQ,RPOS,RDYS,REND,REDT,ALSD,ALED,MDAY\n"; 822 if ( error != ERR_NONE )
758 QString tPrefix = "CARDID,CATEGORY,ETDY,LTDY,FNDY,MARK,PRTY,TITL,MEM1\n"; 823 return false;
759 QString command; 824 GSM_Phone_Functions*Phone;
760 QPtrList<Event> er = calendar->rawEvents(); 825 GSM_CalendarEntryNote;
761 Event* ev = er.first(); 826 bool start = true;
762 QString fileName = "/tmp/kopitempout"; 827 Phone=s.Phone.Functions;
763 int i = 0; 828 bool gshutdown = false;
764 QString changeString = ePrefix; 829 QPtrList<Event> er = calendar->rawEvents();
765 QString deleteString = ePrefix; 830 Event* ev = er.first();
766 bool deleteEnt = false;
767 bool changeEnt = false;
768 QString message = i18n("Processing event # "); 831 QString message = i18n("Processing event # ");
769 int procCount = 0; 832 int procCount = 0;
770 while ( ev ) { 833 while ( ev ) {
771 //qDebug("i %d ", ++i); 834 //qDebug("i %d ", ++i);
772 if ( true /*ev->zaurusStat() != -2*/ ) { 835 if ( ev->tempSyncStat() != SYNC_TEMPSTATE_NEW_EXTERNAL ) { // event was changed during sync or is a new one
836
773 status.setText ( message + QString::number ( ++procCount ) ); 837 status.setText ( message + QString::number ( ++procCount ) );
774 qApp->processEvents(); 838 qApp->processEvents();
775 QString eString = getEventString( ev ); 839 event2GSM( ev, &Note );
776 if (/* ev->zaurusStat() == -3 */ true) { // delete 840 if ( ev->tempSyncStat() == SYNC_TEMPSTATE_DELETE ) { // delete
777 // deleting empty strings does not work. 841 error = Phone->DeleteCalendar(&s, &Note);
778 // we write first and x and then delete the record with the x
779 eString = eString.replace( QRegExp(",\"\""),",\"x\"" );
780 changeString += eString + "\n";
781 deleteString += eString + "\n";
782 deleteEnt = true;
783 changeEnt = true;
784 } 842 }
785 else if ( /*ev->zaurusId() == -1*/true ) { // add new 843 else if ( ev->getID(mProfileName).isEmpty() ) { // add new
786 command = "(echo \"" + ePrefix + eString + "\" ) | db2file datebook -w -g -c " + codec+ " > "+ fileName; 844 // we have to do this later after deleting
787 system ( command.utf8() ); 845
788 QFile file( fileName );
789 if (!file.open( IO_ReadOnly ) ) {
790 return false;
791
792 }
793 QTextStream ts( &file );
794 ts.setCodec( QTextCodec::codecForName("utf8") );
795 answer = ts.read();
796 file.close();
797 //qDebug("answer \n%s ", answer.latin1());
798 getNumFromRecord( answer, ev ) ;
799
800 } 846 }
801 else { // change existing 847 else { // change existing
802 //qDebug("canging %d %d",ev->zaurusStat() ,ev->zaurusId() ); 848 error = Phone->AddCalendar(&s, &Note);
803 //command = "(echo \"" + ePrefix + eString + "\" ) | db2file datebook -w -g -c " + codec+ " > "+ fileName;
804 changeString += eString + "\n";
805 changeEnt = true;
806
807 } 849 }
808 } 850 }
809 ev = er.next(); 851 ev = er.next();
810 } 852 }
811 status.setText ( i18n("Changing events ...") ); 853 ev = er.first();
812 qApp->processEvents(); 854 // pending get empty slots
813 //qDebug("changing... "); 855 while ( ev ) {
814 if ( changeEnt ) { 856 if ( ev->tempSyncStat() != SYNC_TEMPSTATE_NEW_EXTERNAL && ev->tempSyncStat() != SYNC_TEMPSTATE_DELETE) {
815 QFile file( fileName ); 857 if ( ev->getID(mProfileName).isEmpty() ) {
816 if (!file.open( IO_WriteOnly ) ) { 858 status.setText ( message + QString::number ( ++procCount ) );
817 return false; 859 qApp->processEvents();
818 860 int newID ;//= pending
819 } 861 ev->setID(mProfileName, QString::number( newID ));
820 QTextStream ts( &file ); 862 event2GSM( ev, &Note );
821 ts.setCodec( QTextCodec::codecForName("utf8") ); 863 error = Phone->AddCalendar(&s, &Note);
822 ts << changeString ; 864 }
823 file.close(); 865 }
824 command = "db2file datebook -w -g -c " + codec+ " < "+ fileName; 866 ev = er.next();
825 system ( command.latin1() );
826 //qDebug("command %s file :\n%s ", command.latin1(), changeString.latin1());
827
828 }
829 status.setText ( i18n("Deleting events ...") );
830 qApp->processEvents();
831 //qDebug("deleting... ");
832 if ( deleteEnt ) {
833 QFile file( fileName );
834 if (!file.open( IO_WriteOnly ) ) {
835 return false;
836
837 }
838 QTextStream ts( &file );
839 ts.setCodec( QTextCodec::codecForName("utf8") );
840 ts << deleteString;
841 file.close();
842 command = "db2file datebook -d -c " + codec+ " < "+ fileName;
843 system ( command.latin1() );
844 // qDebug("command %s file :\n%s ", command.latin1(), deleteString.latin1());
845 } 867 }
846 868 GSM_ToDoEntry ToDoEntry;
847
848 changeString = tPrefix;
849 deleteString = tPrefix;
850 status.setText ( i18n("Processing todos ...") );
851 qApp->processEvents();
852 QPtrList<Todo> tl = calendar->rawTodos(); 869 QPtrList<Todo> tl = calendar->rawTodos();
853 Todo* to = tl.first(); 870 Todo* to = tl.first();
854 i = 0; 871
855 message = i18n("Processing todo # "); 872 message = i18n("Processing todo # ");
856 procCount = 0; 873 procCount = 0;
857 while ( to ) { 874 while ( to ) {
858 if ( true /*to->zaurusStat() != -2 */) { 875 if ( to->tempSyncStat() != SYNC_TEMPSTATE_NEW_EXTERNAL ) {
859 status.setText ( message + QString::number ( ++procCount ) ); 876 status.setText ( message + QString::number ( ++procCount ) );
860 qApp->processEvents(); 877 qApp->processEvents();
861 QString eString = getTodoString( to ); 878 todo2GSM( to, &ToDoEntry );
862 if ( /*to->zaurusStat() == -3*/true ) { // delete 879 if ( to->tempSyncStat() == SYNC_TEMPSTATE_DELETE ) { // delete
863 // deleting empty strings does not work. 880 error=Phone->DeleteToDo(&s,&ToDoEntry);
864 // we write first and x and then delete the record with the x
865 eString = eString.replace( QRegExp(",\"\""),",\"x\"" );
866 changeString += eString + "\n";
867 deleteString += eString + "\n";
868 deleteEnt = true;
869 changeEnt = true;
870 } 881 }
871 else if ( true /*to->zaurusId() == -1*/ ) { // add new 882 else if ( to->getID("Sharp_DTM").isEmpty() ) { // add new
872 command = "(echo \"" + tPrefix + eString + "\" ) | db2file todo -w -g -c " + codec+ " > "+ fileName; 883 ;
873 system ( command.utf8() );
874 QFile file( fileName );
875 if (!file.open( IO_ReadOnly ) ) {
876 return false;
877
878 }
879 QTextStream ts( &file );
880 ts.setCodec( QTextCodec::codecForName("utf8") );
881 answer = ts.read();
882 file.close();
883 //qDebug("answer \n%s ", answer.latin1());
884 getNumFromRecord( answer, to ) ;
885
886 } 884 }
887 else { // change existing 885 else { // change existing
888 //qDebug("canging %d %d",to->zaurusStat() ,to->zaurusId() ); 886 error=Phone->AddToDo(&s,&ToDoEntry);
889 //command = "(echo \"" + ePrefix + eString + "\" ) | db2file datebook -w -g -c " + codec+ " > "+ fileName;
890 changeString += eString + "\n";
891 changeEnt = true;
892
893 } 887 }
894 } 888 }
895
896 to = tl.next(); 889 to = tl.next();
897 } 890 }
898 status.setText ( i18n("Changing todos ...") ); 891
899 qApp->processEvents(); 892 // pending get empty slots
900 //qDebug("changing... "); 893 to = tl.first();
901 if ( changeEnt ) { 894 while ( to ) {
902 QFile file( fileName ); 895 if ( to->tempSyncStat() != SYNC_TEMPSTATE_NEW_EXTERNAL && to->tempSyncStat() != SYNC_TEMPSTATE_DELETE) {
903 if (!file.open( IO_WriteOnly ) ) { 896 if ( to->getID(mProfileName).isEmpty() ) {
904 return false; 897 status.setText ( message + QString::number ( ++procCount ) );
905 898 qApp->processEvents();
906 } 899 int newID ;//= pending
907 QTextStream ts( &file ); 900 to->setID(mProfileName, QString::number( newID ));
908 ts.setCodec( QTextCodec::codecForName("utf8") ); 901 todo2GSM( to, &ToDoEntry );
909 ts << changeString ; 902 error=Phone->AddToDo(&s,&ToDoEntry);
910 file.close(); 903 }
911 command = "db2file todo -w -g -c " + codec+ " < "+ fileName; 904 }
912 system ( command.latin1() ); 905 to = tl.next();
913 //qDebug("command %s file :\n%s ", command.latin1(), changeString.latin1());
914
915 }
916 status.setText ( i18n("Deleting todos ...") );
917 qApp->processEvents();
918 //qDebug("deleting... ");
919 if ( deleteEnt ) {
920 QFile file( fileName );
921 if (!file.open( IO_WriteOnly ) ) {
922 return false;
923
924 }
925 QTextStream ts( &file );
926 ts.setCodec( QTextCodec::codecForName("utf8") );
927 ts << deleteString;
928 file.close();
929 command = "db2file todo -d -c " + codec+ " < "+ fileName;
930 system ( command.latin1() );
931 // qDebug("command %s file :\n%s ", command.latin1(), deleteString.latin1());
932 } 906 }
933#endif
934 return true; 907 return true;
935} 908}
936QString PhoneFormat::dtToGSM( const QDateTime& dti, bool useTZ ) 909QString PhoneFormat::dtToGSM( const QDateTime& dti, bool useTZ )
937{ 910{
938 QString datestr; 911 QString datestr;
939 QString timestr; 912 QString timestr;
940 int offset = KGlobal::locale()->localTimeOffset( dti ); 913 int offset = KGlobal::locale()->localTimeOffset( dti );
941 QDateTime dt; 914 QDateTime dt;
942 if (useTZ) 915 if (useTZ)
943 dt = dti.addSecs ( -(offset*60)); 916 dt = dti.addSecs ( -(offset*60));
944 else 917 else
945 dt = dti; 918 dt = dti;
946 if(dt.date().isValid()){ 919 if(dt.date().isValid()){
947 const QDate& date = dt.date(); 920 const QDate& date = dt.date();
948 datestr.sprintf("%04d%02d%02d", 921 datestr.sprintf("%04d%02d%02d",
949 date.year(), date.month(), date.day()); 922 date.year(), date.month(), date.day());
950 } 923 }
951 if(dt.time().isValid()){ 924 if(dt.time().isValid()){
952 const QTime& time = dt.time(); 925 const QTime& time = dt.time();
953 timestr.sprintf("T%02d%02d%02d", 926 timestr.sprintf("T%02d%02d%02d",
954 time.hour(), time.minute(), time.second()); 927 time.hour(), time.minute(), time.second());
955 } 928 }
956 return datestr + timestr; 929 return datestr + timestr;
957} 930}
958QString PhoneFormat::getEventString( Event* event ) 931QString PhoneFormat::getEventString( Event* event )
959{ 932{
960#if 0 933#if 0
961 QStringList list; 934 QStringList list;
962 list.append( QString::number(event->zaurusId() ) ); 935 list.append( QString::number(event->zaurusId() ) );
963 list.append( event->categories().join(",") ); 936 list.append( event->categories().join(",") );
964 if ( !event->summary().isEmpty() ) 937 if ( !event->summary().isEmpty() )
965 list.append( event->summary() ); 938 list.append( event->summary() );
966 else 939 else
967 list.append("" ); 940 list.append("" );
968 if ( !event->location().isEmpty() ) 941 if ( !event->location().isEmpty() )
969 list.append( event->location() ); 942 list.append( event->location() );
970 else 943 else
971 list.append("" ); 944 list.append("" );
972 if ( !event->description().isEmpty() ) 945 if ( !event->description().isEmpty() )
973 list.append( event->description() ); 946 list.append( event->description() );
974 else 947 else
975 list.append( "" ); 948 list.append( "" );
976 if ( event->doesFloat () ) { 949 if ( event->doesFloat () ) {
977 list.append( dtToString( QDateTime(event->dtStart().date(), QTime(0,0,0)), false )); 950 list.append( dtToString( QDateTime(event->dtStart().date(), QTime(0,0,0)), false ));
978 list.append( dtToString( QDateTime(event->dtEnd().date(),QTime(23,59,59)), false )); //6 951 list.append( dtToString( QDateTime(event->dtEnd().date(),QTime(23,59,59)), false )); //6
979 list.append( "1" ); 952 list.append( "1" );
980 953
981 } 954 }
diff --git a/libkcal/phoneformat.h b/libkcal/phoneformat.h
index 8d4e200..1472880 100644
--- a/libkcal/phoneformat.h
+++ b/libkcal/phoneformat.h
@@ -1,60 +1,63 @@
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 PHONEFORMAT_H 21#ifndef PHONEFORMAT_H
22#define PHONEFORMAT_H 22#define PHONEFORMAT_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"
29extern "C" { 29extern "C" {
30#include "../gammu/emb/common/gammu.h" 30#include "../gammu/emb/common/gammu.h"
31} 31}
32
33namespace KCal { 32namespace KCal {
34 33
35/** 34/**
36 This class implements the calendar format used by Phone. 35 This class implements the calendar format used by Phone.
37*/ 36*/
38 37 class Event;
38 class Todo;
39class PhoneFormat : public QObject { 39class PhoneFormat : public QObject {
40 public: 40 public:
41 /** Create new iCalendar format. */ 41 /** Create new iCalendar format. */
42 PhoneFormat(); 42 PhoneFormat(QString profileName, QString device,QString connection, QString model);
43 virtual ~PhoneFormat(); 43 virtual ~PhoneFormat();
44 44
45 bool load( Calendar * ,Calendar *, QString profileName, QString device,QString connection, QString model ); 45 bool load( Calendar * ,Calendar * );
46 bool save( Calendar * ); 46 bool save( Calendar * );
47 bool fromString( Calendar *, const QString & ); 47 bool fromString( Calendar *, const QString & );
48 QString toString( Calendar * ); 48 QString toString( Calendar * );
49 static ulong getCsum( const QStringList & ); 49 static ulong getCsum( const QStringList & );
50 50
51 private: 51 private:
52 void event2GSM( Event* ev, GSM_CalendarEntry*Note );
53 void todo2GSM( Todo* ev, GSM_ToDoEntry *ToDo );
54 int initDevice(GSM_StateMachine *s);
52 QString getEventString( Event* ); 55 QString getEventString( Event* );
53 QString getTodoString( Todo* ); 56 QString getTodoString( Todo* );
54 QString dtToGSM( const QDateTime& dt, bool useTZ = true ); 57 QString dtToGSM( const QDateTime& dt, bool useTZ = true );
55 QString mProfileName; 58 QString mProfileName, mDevice, mConnection, mModel;
56}; 59};
57 60
58} 61}
59 62
60#endif 63#endif