summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/koprefs.cpp118
-rw-r--r--libkcal/phoneformat.cpp44
-rw-r--r--libkcal/vcalformat.cpp19
-rw-r--r--libkcal/vcalformat.h5
4 files changed, 115 insertions, 71 deletions
diff --git a/korganizer/koprefs.cpp b/korganizer/koprefs.cpp
index 0db8e6d..dd978bf 100644
--- a/korganizer/koprefs.cpp
+++ b/korganizer/koprefs.cpp
@@ -369,120 +369,122 @@ void KOPrefs::setCategoryDefaults()
369 369
370 QStringList::Iterator it; 370 QStringList::Iterator it;
371 for (it = mCustomCategories.begin();it != mCustomCategories.end();++it ) { 371 for (it = mCustomCategories.begin();it != mCustomCategories.end();++it ) {
372 setCategoryColor(*it,mDefaultCategoryColor); 372 setCategoryColor(*it,mDefaultCategoryColor);
373 } 373 }
374} 374}
375 375
376QStringList KOPrefs::getDefaultList() 376QStringList KOPrefs::getDefaultList()
377{ 377{
378 QStringList retval ; 378 QStringList retval ;
379 retval << i18n("Anniversary") << i18n("Appointment") << i18n("Birthday") << i18n("Business") << i18n("Business Travel") << i18n("Cinema") << i18n("Customer") 379 retval << i18n("Anniversary") << i18n("Appointment") << i18n("Birthday") << i18n("Business") << i18n("Business Travel") << i18n("Cinema") << i18n("Customer")
380 << i18n("Break")<< i18n("Breakfast")<< i18n("Competition")<< i18n("Dinner") 380 << i18n("Break")<< i18n("Breakfast")<< i18n("Competition")<< i18n("Dinner")
381 << i18n("Education")<< i18n("Family") << i18n("Favorites") << i18n("Festival")<< i18n("Fishing")<< i18n("Flight") << i18n("Gifts") 381 << i18n("Education")<< i18n("Family") << i18n("Favorites") << i18n("Festival")<< i18n("Fishing")<< i18n("Flight") << i18n("Gifts")
382 << i18n("Holiday") << i18n("Holiday Cards")<< i18n("Hot Contacts") << i18n("Hiking") << i18n("Hunting") << i18n("Key Customer") << i18n("Kids") 382 << i18n("Holiday") << i18n("Holiday Cards")<< i18n("Hot Contacts") << i18n("Hiking") << i18n("Hunting") << i18n("Key Customer") << i18n("Kids")
383 << i18n("Lunch") << i18n("Meeting") << i18n("Miscellaneous") << i18n("Partner")<< i18n("Party") << i18n("Personal") << i18n("Personal Travel") 383 << i18n("Lunch") << i18n("Meeting") << i18n("Miscellaneous") << i18n("Partner")<< i18n("Party") << i18n("Personal") << i18n("Personal Travel")
384 << i18n("PHB") << i18n("Phone Calls") << i18n("Projects") << i18n("Recurring") << i18n("School") << i18n("Shopping") 384 << i18n("PHB") << i18n("Phone Calls") << i18n("Projects") << i18n("Recurring") << i18n("School") << i18n("Shopping")
385 << i18n("Speach") << i18n("Special Occasion") << i18n("Sports") << i18n("Talk") << i18n("Travel") << i18n("TV")<< i18n("University") 385 << i18n("Speach") << i18n("Special Occasion") << i18n("Sports") << i18n("Talk") << i18n("Travel") << i18n("TV")<< i18n("University")
386 << i18n("Vacation") << i18n("VIP") << i18n("SyncEvent") ; 386 << i18n("Vacation") << i18n("VIP") << i18n("SyncEvent") ;
387 retval.sort(); 387 retval.sort();
388 return retval; 388 return retval;
389} 389}
390 390
391void KOPrefs::usrReadConfig() 391void KOPrefs::usrReadConfig()
392{ 392{
393 mLocaleDict = 0; 393 mLocaleDict = 0;
394 // pending LR fix translation 394 // pending LR fix translation
395 // qDebug("KOPrefs::usrReadConfig() fix translation "); 395 // qDebug("KOPrefs::usrReadConfig() fix translation ");
396 if ( mPreferredLanguage == 1 ) { 396 if ( mPreferredLanguage > 0 && mPreferredLanguage < 4 ) {
397 mLocaleDict = new QDict<QString>; 397 if ( mPreferredLanguage == 1 ) {
398 int i = 0;
399 QString fw ( germanwords[i] [0]);
400 while ( !fw.isEmpty() ) {
401 mLocaleDict->insert( fw, new QString (germanwords[i] [1] ));
402 ++i;
403 fw = germanwords[i] [0];
404 }
405
406 setLocaleDict( mLocaleDict );
407 } else {
408 QString fileName ;
409 if ( mPreferredLanguage == 3 )
410 fileName = MainWindow::resourcePath()+"usertranslation.txt";
411 else if ( mPreferredLanguage == 2 )
412 fileName = MainWindow::resourcePath()+"frenchtranslation.txt";
413 else return;
414 QFile file( fileName );
415 if (file.open( IO_ReadOnly ) ) {
416 QTextStream ts( &file );
417 ts.setCodec( QTextCodec::codecForLocale() );
418 QString text = ts.read();
419 file.close();
420 text.replace( QRegExp("\\\\n"), "\n" );
421 QString line;
422 QString we;
423 QString wt;
424 int br = 0;
425 int nbr;
426 nbr = text.find ( "},", br );
427 line = text.mid( br, nbr - br );
428 br = nbr+1;
429 int se, ee, st, et;
430 mLocaleDict = new QDict<QString>; 398 mLocaleDict = new QDict<QString>;
431 QString end = "{ \"\",\"\" }"; 399 int i = 0;
432 while ( (line != end) && (br > 1) ) { 400 QString fw ( germanwords[i] [0]);
433 //qDebug("%d *%s* ", br, line.latin1()); 401 while ( !fw.isEmpty() ) {
434 se = line.find("\"")+1; 402 mLocaleDict->insert( fw, new QString (germanwords[i] [1] ));
435 et = line.findRev("\"",-1); 403 ++i;
436 ee = line.find("\",\""); 404 fw = germanwords[i] [0];
437 st = ee+3;
438 we = line.mid( se, ee-se );
439 wt = line.mid( st, et-st );
440 //qDebug("*%s* *%s* ", we.latin1(), wt.latin1());
441 mLocaleDict->insert( we, new QString (wt) );
442 nbr = text.find ( "}", br );
443 line = text.mid( br, nbr - br );
444 br = nbr+1;
445 } 405 }
446 //qDebug("end *%s* ", end.latin1()); 406
447
448 setLocaleDict( mLocaleDict ); 407 setLocaleDict( mLocaleDict );
449 } else { 408 } else {
450 qDebug("KO: Cannot find translation file %s",fileName.latin1() ); 409 QString fileName ;
451 } 410 if ( mPreferredLanguage == 3 )
411 fileName = MainWindow::resourcePath()+"usertranslation.txt";
412 else if ( mPreferredLanguage == 2 )
413 fileName = MainWindow::resourcePath()+"frenchtranslation.txt";
414 QFile file( fileName );
415 if (file.open( IO_ReadOnly ) ) {
416 QTextStream ts( &file );
417 ts.setEncoding( QTextStream::Latin1 );
418 //ts.setCodec( QTextCodec::latin1 );
419 QString text = ts.read();
420 file.close();
421 text.replace( QRegExp("\\\\n"), "\n" );
422 QString line;
423 QString we;
424 QString wt;
425 int br = 0;
426 int nbr;
427 nbr = text.find ( "},", br );
428 line = text.mid( br, nbr - br );
429 br = nbr+1;
430 int se, ee, st, et;
431 mLocaleDict = new QDict<QString>;
432 QString end = "{ \"\",\"\" }";
433 while ( (line != end) && (br > 1) ) {
434 //qDebug("%d *%s* ", br, line.latin1());
435 se = line.find("\"")+1;
436 et = line.findRev("\"",-1);
437 ee = line.find("\",\"");
438 st = ee+3;
439 we = line.mid( se, ee-se );
440 wt = line.mid( st, et-st );
441 //qDebug("*%s* *%s* ", we.latin1(), wt.latin1());
442 mLocaleDict->insert( we, new QString (wt) );
443 nbr = text.find ( "}", br );
444 line = text.mid( br, nbr - br );
445 br = nbr+1;
446 }
447 //qDebug("end *%s* ", end.latin1());
448
449 setLocaleDict( mLocaleDict );
450 } else {
451 qDebug("KO: Cannot find translation file %s",fileName.latin1() );
452 }
452 453
453} 454 }
455 }
454 config()->setGroup("General"); 456 config()->setGroup("General");
455 457
456 mCustomCategories = config()->readListEntry("Custom Categories"); 458 mCustomCategories = config()->readListEntry("Custom Categories");
457 if ( KOPrefs::instance()->mLanguageChanged ) { 459 if ( KOPrefs::instance()->mLanguageChanged ) {
458 mLocationDefaults.clear(); 460 mLocationDefaults.clear();
459 mEventSummaryUser.clear(); 461 mEventSummaryUser.clear();
460 mTodoSummaryUser.clear(); 462 mTodoSummaryUser.clear();
461 } 463 }
462 if (mLocationDefaults.isEmpty()) { 464 if (mLocationDefaults.isEmpty()) {
463 mLocationDefaults << i18n("Home") << i18n("Office") << i18n("Libary") << i18n("School") << i18n("Doctor") << i18n("Beach") 465 mLocationDefaults << i18n("Home") << i18n("Office") << i18n("Library") << i18n("School") << i18n("Doctor") << i18n("Beach")
464 << i18n("University") << i18n("Restaurant") << i18n("Bar") << i18n("Conference room") << i18n("Cinema") << i18n("Lake") << i18n("Kindergarden") 466 << i18n("University") << i18n("Restaurant") << i18n("Bar") << i18n("Conference room") << i18n("Cinema") << i18n("Lake") << i18n("Kindergarten")
465 << i18n("Germany") << i18n("Sweden") << i18n("Forest") << i18n("Desert") << i18n("Kitchen") ; 467 << i18n("Germany") << i18n("Sweden") << i18n("Forest") << i18n("Desert") << i18n("Kitchen") ;
466 // << i18n("") << i18n("") << i18n("") << i18n("") << i18n("") << i18n("") << i18n("") << i18n("") 468 // << i18n("") << i18n("") << i18n("") << i18n("") << i18n("") << i18n("") << i18n("") << i18n("")
467 mLocationDefaults.sort(); 469 mLocationDefaults.sort();
468 } 470 }
469 471
470 if (mEventSummaryUser.isEmpty()) { 472 if (mEventSummaryUser.isEmpty()) {
471 mEventSummaryUser = getDefaultList() ; 473 mEventSummaryUser = getDefaultList() ;
472 } 474 }
473 if (mTodoSummaryUser.isEmpty()) { 475 if (mTodoSummaryUser.isEmpty()) {
474 mTodoSummaryUser = getDefaultList() ; 476 mTodoSummaryUser = getDefaultList() ;
475 } 477 }
476 478
477 if (mCustomCategories.isEmpty()) setCategoryDefaults(); 479 if (mCustomCategories.isEmpty()) setCategoryDefaults();
478 480
479 config()->setGroup("Personal Settings"); 481 config()->setGroup("Personal Settings");
480 mName = config()->readEntry("user_name",""); 482 mName = config()->readEntry("user_name","");
481 mEmail = config()->readEntry("user_email",""); 483 mEmail = config()->readEntry("user_email","");
482 fillMailDefaults(); 484 fillMailDefaults();
483 485
484 config()->setGroup("Category Colors"); 486 config()->setGroup("Category Colors");
485 QStringList::Iterator it; 487 QStringList::Iterator it;
486 for (it = mCustomCategories.begin();it != mCustomCategories.end();++it ) { 488 for (it = mCustomCategories.begin();it != mCustomCategories.end();++it ) {
487 setCategoryColor(*it,config()->readColorEntry(*it,&mDefaultCategoryColor)); 489 setCategoryColor(*it,config()->readColorEntry(*it,&mDefaultCategoryColor));
488 490
diff --git a/libkcal/phoneformat.cpp b/libkcal/phoneformat.cpp
index 6276498..1769b37 100644
--- a/libkcal/phoneformat.cpp
+++ b/libkcal/phoneformat.cpp
@@ -425,52 +425,57 @@ public:
425 r->setMonthly( Recurrence::rMonthlyDay, freq, endDate ); 425 r->setMonthly( Recurrence::rMonthlyDay, freq, endDate );
426 else 426 else
427 r->setMonthly( Recurrence::rMonthlyDay, freq, -1 ); 427 r->setMonthly( Recurrence::rMonthlyDay, freq, -1 );
428 r->addMonthlyDay( startDate.day() ); 428 r->addMonthlyDay( startDate.day() );
429 } else if ( rtype == 2 ) { 429 } else if ( rtype == 2 ) {
430 if ( hasEndDate ) 430 if ( hasEndDate )
431 r->setMonthly( Recurrence::rMonthlyPos, freq, endDate ); 431 r->setMonthly( Recurrence::rMonthlyPos, freq, endDate );
432 else 432 else
433 r->setMonthly( Recurrence::rMonthlyPos, freq, -1 ); 433 r->setMonthly( Recurrence::rMonthlyPos, freq, -1 );
434 QBitArray days( 7 ); 434 QBitArray days( 7 );
435 days.fill( false ); 435 days.fill( false );
436 days.setBit( dayOfWeek - 1 ); 436 days.setBit( dayOfWeek - 1 );
437 r->addMonthlyPos( pos, days ); 437 r->addMonthlyPos( pos, days );
438 } else if ( rtype == 4 ) { 438 } else if ( rtype == 4 ) {
439 if ( hasEndDate ) 439 if ( hasEndDate )
440 r->setYearly( Recurrence::rYearlyMonth, freq, endDate ); 440 r->setYearly( Recurrence::rYearlyMonth, freq, endDate );
441 else 441 else
442 r->setYearly( Recurrence::rYearlyMonth, freq, -1 ); 442 r->setYearly( Recurrence::rYearlyMonth, freq, -1 );
443 r->addYearlyNum( startDate.month() ); 443 r->addYearlyNum( startDate.month() );
444 } 444 }
445 } else { 445 } else {
446 event->recurrence()->unsetRecurs(); 446 event->recurrence()->unsetRecurs();
447 } 447 }
448 448
449 QStringList categoryList; 449 QStringList cat = event->categories();
450 categoryList << getCategory( Note ); 450 QString nCat = getCategory( Note );
451 event->setCategories( categoryList ); 451
452 // strange 0 semms to mean: alarm enabled 452 if ( !nCat.isEmpty() )
453 if ( !cat.contains( nCat )) {
454 cat << nCat;
455 event->setCategories( cat );
456 }
457
453 if ( alarm ) { 458 if ( alarm ) {
454 Alarm *alarm; 459 Alarm *alarm;
455 if ( event->alarms().count() > 0 ) 460 if ( event->alarms().count() > 0 )
456 alarm = event->alarms().first(); 461 alarm = event->alarms().first();
457 else { 462 else {
458 alarm = new Alarm( event ); 463 alarm = new Alarm( event );
459 event->addAlarm( alarm ); 464 event->addAlarm( alarm );
460 } 465 }
461 alarm->setType( Alarm::Audio ); 466 alarm->setType( Alarm::Audio );
462 alarm->setEnabled( true ); 467 alarm->setEnabled( true );
463 int alarmOffset = alarmDt.secsTo( event->dtStart() ); 468 int alarmOffset = alarmDt.secsTo( event->dtStart() );
464 alarm->setStartOffset( -alarmOffset ); 469 alarm->setStartOffset( -alarmOffset );
465 } else { 470 } else {
466 Alarm *alarm; 471 Alarm *alarm;
467 if ( event->alarms().count() > 0 ) { 472 if ( event->alarms().count() > 0 ) {
468 alarm = event->alarms().first(); 473 alarm = event->alarms().first();
469 alarm->setType( Alarm::Audio ); 474 alarm->setType( Alarm::Audio );
470 alarm->setStartOffset( -60*15 ); 475 alarm->setStartOffset( -60*15 );
471 alarm->setEnabled( false ); 476 alarm->setEnabled( false );
472 } 477 }
473 } 478 }
474 // csum ***************************************** 479 // csum *****************************************
475 480
476 uint cSum; 481 uint cSum;
@@ -511,49 +516,49 @@ public:
511 dt = dti.addSecs ( -(offset*60)); 516 dt = dti.addSecs ( -(offset*60));
512 else 517 else
513 dt = dti; 518 dt = dti;
514 if(dt.date().isValid()){ 519 if(dt.date().isValid()){
515 const QDate& date = dt.date(); 520 const QDate& date = dt.date();
516 datestr.sprintf("%04d%02d%02d", 521 datestr.sprintf("%04d%02d%02d",
517 date.year(), date.month(), date.day()); 522 date.year(), date.month(), date.day());
518 } 523 }
519 if(dt.time().isValid()){ 524 if(dt.time().isValid()){
520 const QTime& time = dt.time(); 525 const QTime& time = dt.time();
521 timestr.sprintf("T%02d%02d%02d", 526 timestr.sprintf("T%02d%02d%02d",
522 time.hour(), time.minute(), time.second()); 527 time.hour(), time.minute(), time.second());
523 } 528 }
524 return datestr + timestr; 529 return datestr + timestr;
525 } 530 }
526 QDate datefromGSM ( GSM_DateTime*dtp ) { 531 QDate datefromGSM ( GSM_DateTime*dtp ) {
527 return QDate ( dtp->Year, dtp->Month, dtp->Day ); 532 return QDate ( dtp->Year, dtp->Month, dtp->Day );
528 } 533 }
529 QString getCategory( GSM_CalendarEntry*Note) 534 QString getCategory( GSM_CalendarEntry*Note)
530 { 535 {
531 QString CATEGORY; 536 QString CATEGORY;
532 switch (Note->Type) { 537 switch (Note->Type) {
533 case GSM_CAL_REMINDER : CATEGORY = QString("Reminder"); break; 538 case GSM_CAL_REMINDER : CATEGORY = QString("Reminder"); break;
534 case GSM_CAL_CALL : CATEGORY = QString("Call"); break; 539 case GSM_CAL_CALL : CATEGORY = QString("Call"); break;
535 case GSM_CAL_MEETING : CATEGORY = QString("Meeting"); break; 540 //case GSM_CAL_MEETING : CATEGORY = QString("Meeting"); break;
536 case GSM_CAL_BIRTHDAY : CATEGORY = QString("Birthday"); break; 541 case GSM_CAL_BIRTHDAY : CATEGORY = QString("Birthday"); break;
537 case GSM_CAL_MEMO : CATEGORY = QString("Memo"); break; 542 case GSM_CAL_MEMO : CATEGORY = QString("Memo"); break;
538 case GSM_CAL_TRAVEL : CATEGORY = QString("Travel"); break; 543 case GSM_CAL_TRAVEL : CATEGORY = QString("Travel"); break;
539 case GSM_CAL_VACATION : CATEGORY = QString("Vacation"); break; 544 case GSM_CAL_VACATION : CATEGORY = QString("Vacation"); break;
540 case GSM_CAL_ALARM : CATEGORY = QString("Alarm"); break; 545 case GSM_CAL_ALARM : CATEGORY = QString("Alarm"); break;
541 case GSM_CAL_DAILY_ALARM : CATEGORY = QString("Daily alarm"); break; 546 case GSM_CAL_DAILY_ALARM : CATEGORY = QString("Daily alarm"); break;
542 case GSM_CAL_T_ATHL : CATEGORY = QString("Training/Athletism"); break; 547 case GSM_CAL_T_ATHL : CATEGORY = QString("Training/Athletism"); break;
543 case GSM_CAL_T_BALL : CATEGORY = QString("Training/Ball Games"); break; 548 case GSM_CAL_T_BALL : CATEGORY = QString("Training/Ball Games"); break;
544 case GSM_CAL_T_CYCL : CATEGORY = QString("Training/Cycling"); break; 549 case GSM_CAL_T_CYCL : CATEGORY = QString("Training/Cycling"); break;
545 case GSM_CAL_T_BUDO : CATEGORY = QString("Training/Budo"); break; 550 case GSM_CAL_T_BUDO : CATEGORY = QString("Training/Budo"); break;
546 case GSM_CAL_T_DANC : CATEGORY = QString("Training/Dance"); break; 551 case GSM_CAL_T_DANC : CATEGORY = QString("Training/Dance"); break;
547 case GSM_CAL_T_EXTR : CATEGORY = QString("Training/Extreme Sports"); break; 552 case GSM_CAL_T_EXTR : CATEGORY = QString("Training/Extreme Sports"); break;
548 case GSM_CAL_T_FOOT : CATEGORY = QString("Training/Football"); break; 553 case GSM_CAL_T_FOOT : CATEGORY = QString("Training/Football"); break;
549 case GSM_CAL_T_GOLF : CATEGORY = QString("Training/Golf"); break; 554 case GSM_CAL_T_GOLF : CATEGORY = QString("Training/Golf"); break;
550 case GSM_CAL_T_GYM : CATEGORY = QString("Training/Gym"); break; 555 case GSM_CAL_T_GYM : CATEGORY = QString("Training/Gym"); break;
551 case GSM_CAL_T_HORS : CATEGORY = QString("Training/Horse Races"); break; 556 case GSM_CAL_T_HORS : CATEGORY = QString("Training/Horse Races"); break;
552 case GSM_CAL_T_HOCK : CATEGORY = QString("Training/Hockey"); break; 557 case GSM_CAL_T_HOCK : CATEGORY = QString("Training/Hockey"); break;
553 case GSM_CAL_T_RACE : CATEGORY = QString("Training/Races"); break; 558 case GSM_CAL_T_RACE : CATEGORY = QString("Training/Races"); break;
554 case GSM_CAL_T_RUGB : CATEGORY = QString("Training/Rugby"); break; 559 case GSM_CAL_T_RUGB : CATEGORY = QString("Training/Rugby"); break;
555 case GSM_CAL_T_SAIL : CATEGORY = QString("Training/Sailing"); break; 560 case GSM_CAL_T_SAIL : CATEGORY = QString("Training/Sailing"); break;
556 case GSM_CAL_T_STRE : CATEGORY = QString("Training/Street Games"); break; 561 case GSM_CAL_T_STRE : CATEGORY = QString("Training/Street Games"); break;
557 case GSM_CAL_T_SWIM : CATEGORY = QString("Training/Swimming"); break; 562 case GSM_CAL_T_SWIM : CATEGORY = QString("Training/Swimming"); break;
558 case GSM_CAL_T_TENN : CATEGORY = QString("Training/Tennis"); break; 563 case GSM_CAL_T_TENN : CATEGORY = QString("Training/Tennis"); break;
559 case GSM_CAL_T_TRAV : CATEGORY = QString("Training/Travels"); break; 564 case GSM_CAL_T_TRAV : CATEGORY = QString("Training/Travels"); break;
@@ -1049,55 +1054,82 @@ bool PhoneFormat::save( Calendar *calendar)
1049 if (!file.open( IO_WriteOnly ) ) { 1054 if (!file.open( IO_WriteOnly ) ) {
1050 qDebug("error open file "); 1055 qDebug("error open file ");
1051 error=GSM_TerminateConnection(&s); 1056 error=GSM_TerminateConnection(&s);
1052 return false; 1057 return false;
1053 } 1058 }
1054 QTextStream ts( &file ); 1059 QTextStream ts( &file );
1055 ts.setCodec( QTextCodec::codecForName("utf8") ); 1060 ts.setCodec( QTextCodec::codecForName("utf8") );
1056 ts << filec ; 1061 ts << filec ;
1057 file.close(); 1062 file.close();
1058 1063
1059 1064
1060 message = i18n(" Parsing temp file ... "); 1065 message = i18n(" Parsing temp file ... ");
1061 status.setText ( message ); 1066 status.setText ( message );
1062 qApp->processEvents(); 1067 qApp->processEvents();
1063 GSM_Backup Backup; 1068 GSM_Backup Backup;
1064 error=GSM_ReadBackupFile( (char*) fileName.latin1() ,&Backup); 1069 error=GSM_ReadBackupFile( (char*) fileName.latin1() ,&Backup);
1065 qDebug("Read file result %d ",error ); 1070 qDebug("Read file result %d ",error );
1066 //algo 4 writing event 1071 //algo 4 writing event
1067 int max, i; 1072 int max, i;
1068 procCount = 0; 1073 procCount = 0;
1069 message = i18n(" Writing event # "); 1074 message = i18n(" Writing event # ");
1070 if (Backup.Calendar[0] != NULL) { 1075 if (Backup.Calendar[0] != NULL) {
1071 max = 0; 1076 max = 0;
1072 while (Backup.Calendar[max]!=NULL) max++; 1077 while (Backup.Calendar[max]!=NULL) max++;
1078
1079 GSM_DateTime*dtp;
1080
1073 for (i=0;i<max;i++) { 1081 for (i=0;i<max;i++) {
1074 status.setText ( message + QString::number ( ++procCount ) ); 1082 status.setText ( message + QString::number ( ++procCount ) );
1075 qApp->processEvents(); 1083 qApp->processEvents();
1076 Note = *Backup.Calendar[i]; 1084 Note = *Backup.Calendar[i];
1085
1086#if 0
1087 int j;
1088 for (j=0;j<Note.EntriesNum;j++) {
1089 //qDebug(" for ev");
1090 switch (Note.Entries[j].EntryType) {
1091 case CAL_START_DATETIME:
1092 //Note->Entries[i].Date.Hour = 5;
1093 dtp = &Note.Entries[j].Date;
1094 qDebug("start event %d %d %d - %d %d %d", dtp->Year, dtp->Month, dtp->Day, dtp->Hour, dtp->Minute, dtp->Second );
1095 break;
1096 case CAL_END_DATETIME:
1097 dtp = &Note.Entries[j].Date;
1098 qDebug("end event %d %d %d - %d %d %d", dtp->Year, dtp->Month, dtp->Day, dtp->Hour, dtp->Minute, dtp->Second );
1099 break;
1100 }
1101 }
1102 int type = Note.Type;
1103 qDebug(" event type %d - %d %d - %d %d %d",type, GSM_CAL_CALL , GSM_CAL_MEETING ,GSM_CAL_BIRTHDAY, GSM_CAL_MEMO ,GSM_CAL_ALARM );
1104#endif
1105
1106 Note.Type = GSM_CAL_MEETING;
1107 // pending: fix in gammu GSM_ReadBackupFile the type settings
1108 int loc = Note.Location;
1077 Note.Location = 0; 1109 Note.Location = 0;
1078 error=Phone->AddCalendar(&s,&Note); 1110 error=Phone->AddCalendar(&s,&Note);
1079 qDebug("add event %d %d", error, Note.Location ); 1111 qDebug("add event %d %d %d", error, Note.Location, loc );
1080 } 1112 }
1081 } 1113 }
1082 //algo 4 writing todo 1114 //algo 4 writing todo
1083 procCount = 0; 1115 procCount = 0;
1084 message = i18n(" Writing todo # "); 1116 message = i18n(" Writing todo # ");
1085 if (Backup.ToDo[0] != NULL) { 1117 if (Backup.ToDo[0] != NULL) {
1086 max = 0; 1118 max = 0;
1087 while (Backup.ToDo[max]!=NULL) max++; 1119 while (Backup.ToDo[max]!=NULL) max++;
1088 for (i=0;i<max;i++) { 1120 for (i=0;i<max;i++) {
1089 status.setText ( message + QString::number ( ++procCount ) ); 1121 status.setText ( message + QString::number ( ++procCount ) );
1090 qApp->processEvents(); 1122 qApp->processEvents();
1091 ToDoEntry = *Backup.ToDo[i]; 1123 ToDoEntry = *Backup.ToDo[i];
1092 error = Phone->AddToDo(&s,&ToDoEntry); 1124 error = Phone->AddToDo(&s,&ToDoEntry);
1093 qDebug("add todo %d ", error); 1125 qDebug("add todo %d ", error);
1094 } 1126 }
1095 } 1127 }
1096 //algo 5 reread 1128 //algo 5 reread
1097 message = i18n(" Rereading all data ... "); 1129 message = i18n(" Rereading all data ... ");
1098 status.setText ( message ); 1130 status.setText ( message );
1099 qApp->processEvents(); 1131 qApp->processEvents();
1100 error=GSM_TerminateConnection(&s); 1132 error=GSM_TerminateConnection(&s);
1101 CalendarLocal* calendarTemp = new CalendarLocal(); 1133 CalendarLocal* calendarTemp = new CalendarLocal();
1102 calendarTemp->setTimeZoneId( calendar->timeZoneId()); 1134 calendarTemp->setTimeZoneId( calendar->timeZoneId());
1103 if ( ! load( calendarTemp,calendar) ){ 1135 if ( ! load( calendarTemp,calendar) ){
diff --git a/libkcal/vcalformat.cpp b/libkcal/vcalformat.cpp
index 9307f12..0ebd7d1 100644
--- a/libkcal/vcalformat.cpp
+++ b/libkcal/vcalformat.cpp
@@ -8,65 +8,67 @@
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 <qapplication.h> 22#include <qapplication.h>
23#include <qdatetime.h> 23#include <qdatetime.h>
24#include <qstring.h> 24#include <qstring.h>
25#include <qptrlist.h> 25#include <qptrlist.h>
26#include <qregexp.h> 26#include <qregexp.h>
27#include <qclipboard.h> 27#include <qclipboard.h>
28#include <qdialog.h> 28#include <qdialog.h>
29#include <qfile.h> 29#include <qfile.h>
30 30
31#include <kdebug.h> 31#include <kdebug.h>
32#include <kglobal.h>
32#include <kmessagebox.h> 33#include <kmessagebox.h>
33#include <kiconloader.h> 34#include <kiconloader.h>
34#include <klocale.h> 35#include <klocale.h>
35 36
36#include "vcc.h" 37#include "vcc.h"
37#include "vobject.h" 38#include "vobject.h"
38 39
39#include "vcaldrag.h" 40#include "vcaldrag.h"
40#include "calendar.h" 41#include "calendar.h"
41 42
42#include "vcalformat.h" 43#include "vcalformat.h"
43 44
44using namespace KCal; 45using namespace KCal;
45 46
46VCalFormat::VCalFormat() 47VCalFormat::VCalFormat()
47{ 48{
48 mCalendar = 0; 49 mCalendar = 0;
50 useLocalTime = false;
49} 51}
50 52
51VCalFormat::~VCalFormat() 53VCalFormat::~VCalFormat()
52{ 54{
53} 55}
54 56
55bool VCalFormat::load(Calendar *calendar, const QString &fileName) 57bool VCalFormat::load(Calendar *calendar, const QString &fileName)
56{ 58{
57 mCalendar = calendar; 59 mCalendar = calendar;
58 60
59 clearException(); 61 clearException();
60 62
61 kdDebug(5800) << "VCalFormat::load() " << fileName << endl; 63 kdDebug(5800) << "VCalFormat::load() " << fileName << endl;
62 64
63 VObject *vcal = 0; 65 VObject *vcal = 0;
64 66
65 // this is not necessarily only 1 vcal. Could be many vcals, or include 67 // this is not necessarily only 1 vcal. Could be many vcals, or include
66 // a vcard... 68 // a vcard...
67 vcal = Parse_MIME_FromFileName(const_cast<char *>(QFile::encodeName(fileName).data())); 69 vcal = Parse_MIME_FromFileName(const_cast<char *>(QFile::encodeName(fileName).data()));
68 70
69 if (!vcal) { 71 if (!vcal) {
70 setException(new ErrorFormat(ErrorFormat::CalVersionUnknown)); 72 setException(new ErrorFormat(ErrorFormat::CalVersionUnknown));
71 return FALSE; 73 return FALSE;
72 } 74 }
@@ -145,66 +147,74 @@ bool VCalFormat::fromString( Calendar *calendar, const QString &text )
145 VObjectIterator i; 147 VObjectIterator i;
146 VObject *curvo; 148 VObject *curvo;
147 initPropIterator( &i, vcal ); 149 initPropIterator( &i, vcal );
148 150
149 // we only take the first object. TODO: parse all incidences. 151 // we only take the first object. TODO: parse all incidences.
150 do { 152 do {
151 curvo = nextVObject( &i ); 153 curvo = nextVObject( &i );
152 } while ( strcmp( vObjectName( curvo ), VCEventProp ) && 154 } while ( strcmp( vObjectName( curvo ), VCEventProp ) &&
153 strcmp( vObjectName( curvo ), VCTodoProp ) ); 155 strcmp( vObjectName( curvo ), VCTodoProp ) );
154 156
155 if ( strcmp( vObjectName( curvo ), VCEventProp ) == 0 ) { 157 if ( strcmp( vObjectName( curvo ), VCEventProp ) == 0 ) {
156 Event *event = VEventToEvent( curvo ); 158 Event *event = VEventToEvent( curvo );
157 calendar->addEvent( event ); 159 calendar->addEvent( event );
158 } else { 160 } else {
159 kdDebug(5800) << "VCalFormat::fromString(): Unknown object type." << endl; 161 kdDebug(5800) << "VCalFormat::fromString(): Unknown object type." << endl;
160 deleteVObject( vcal ); 162 deleteVObject( vcal );
161 return false; 163 return false;
162 } 164 }
163 165
164 deleteVObject( vcal ); 166 deleteVObject( vcal );
165 167
166 return true; 168 return true;
167} 169}
168 170
169QString VCalFormat::eventToString( Event * event, Calendar *calendar) 171QString VCalFormat::eventToString( Event * event, Calendar *calendar, bool useLocal)
170{ 172{
173
171 if ( !event ) return QString::null; 174 if ( !event ) return QString::null;
175 bool useL = useLocalTime;
176 useLocalTime = useLocal;
172 mCalendar = calendar; 177 mCalendar = calendar;
173 VObject *vevent = eventToVEvent( event ); 178 VObject *vevent = eventToVEvent( event );
174 char *buf = writeMemVObject( 0, 0, vevent ); 179 char *buf = writeMemVObject( 0, 0, vevent );
175 QString result( buf ); 180 QString result( buf );
176 cleanVObject( vevent ); 181 cleanVObject( vevent );
182 useLocalTime = useL;
177 return result; 183 return result;
178} 184}
179QString VCalFormat::todoToString( Todo * todo, Calendar *calendar ) 185QString VCalFormat::todoToString( Todo * todo, Calendar *calendar, bool useLocal )
180{ 186{
187
181 if ( !todo ) return QString::null; 188 if ( !todo ) return QString::null;
189 bool useL = useLocalTime;
190 useLocalTime = useLocal;
182 mCalendar = calendar; 191 mCalendar = calendar;
183 VObject *vevent = eventToVTodo( todo ); 192 VObject *vevent = eventToVTodo( todo );
184 char *buf = writeMemVObject( 0, 0, vevent ); 193 char *buf = writeMemVObject( 0, 0, vevent );
185 QString result( buf ); 194 QString result( buf );
186 cleanVObject( vevent ); 195 cleanVObject( vevent );
196 useLocalTime = useL;
187 return result; 197 return result;
188} 198}
189 199
190QString VCalFormat::toString( Calendar *calendar ) 200QString VCalFormat::toString( Calendar *calendar )
191{ 201{
192 // TODO: Factor out VCalFormat::asString() 202 // TODO: Factor out VCalFormat::asString()
193 203
194 VObject *vcal = newVObject(VCCalProp); 204 VObject *vcal = newVObject(VCCalProp);
195 205
196 addPropValue( vcal, VCProdIdProp, CalFormat::productId() ); 206 addPropValue( vcal, VCProdIdProp, CalFormat::productId() );
197 QString tmpStr = mCalendar->getTimeZoneStr(); 207 QString tmpStr = mCalendar->getTimeZoneStr();
198 addPropValue( vcal, VCTimeZoneProp, tmpStr.local8Bit() ); 208 addPropValue( vcal, VCTimeZoneProp, tmpStr.local8Bit() );
199 addPropValue( vcal, VCVersionProp, _VCAL_VERSION ); 209 addPropValue( vcal, VCVersionProp, _VCAL_VERSION );
200 210
201 // TODO: Use all data. 211 // TODO: Use all data.
202 QPtrList<Event> events = calendar->events(); 212 QPtrList<Event> events = calendar->events();
203 Event *event = events.first(); 213 Event *event = events.first();
204 if ( !event ) return QString::null; 214 if ( !event ) return QString::null;
205 215
206 VObject *vevent = eventToVEvent( event ); 216 VObject *vevent = eventToVEvent( event );
207 217
208 addVObjectProp( vcal, vevent ); 218 addVObjectProp( vcal, vevent );
209 219
210 char *buf = writeMemVObject( 0, 0, vcal ); 220 char *buf = writeMemVObject( 0, 0, vcal );
@@ -1413,51 +1423,50 @@ Event* VCalFormat::VEventToEvent(VObject *vevent)
1413 anEvent->setSyncStatus(Event::SYNCMOD); 1423 anEvent->setSyncStatus(Event::SYNCMOD);
1414 1424
1415 return anEvent; 1425 return anEvent;
1416} 1426}
1417 1427
1418 1428
1419QString VCalFormat::qDateToISO(const QDate &qd) 1429QString VCalFormat::qDateToISO(const QDate &qd)
1420{ 1430{
1421 QString tmpStr; 1431 QString tmpStr;
1422 1432
1423 ASSERT(qd.isValid()); 1433 ASSERT(qd.isValid());
1424 1434
1425 tmpStr.sprintf("%.2d%.2d%.2d", 1435 tmpStr.sprintf("%.2d%.2d%.2d",
1426 qd.year(), qd.month(), qd.day()); 1436 qd.year(), qd.month(), qd.day());
1427 return tmpStr; 1437 return tmpStr;
1428 1438
1429} 1439}
1430 1440
1431QString VCalFormat::qDateTimeToISO(const QDateTime &qdt, bool zulu) 1441QString VCalFormat::qDateTimeToISO(const QDateTime &qdt, bool zulu)
1432{ 1442{
1433 QString tmpStr; 1443 QString tmpStr;
1434 1444
1435 ASSERT(qdt.date().isValid()); 1445 ASSERT(qdt.date().isValid());
1436 ASSERT(qdt.time().isValid()); 1446 ASSERT(qdt.time().isValid());
1437 if (zulu) { 1447 if (zulu && !useLocalTime ) {
1438 QDateTime tmpDT(qdt); 1448 QDateTime tmpDT = qdt.addSecs ( -KGlobal::locale()->localTimeOffset( qdt )*60);
1439 tmpDT = tmpDT.addSecs(60*(-mCalendar->getTimeZone())); // correct to GMT.
1440 tmpStr.sprintf("%.2d%.2d%.2dT%.2d%.2d%.2dZ", 1449 tmpStr.sprintf("%.2d%.2d%.2dT%.2d%.2d%.2dZ",
1441 tmpDT.date().year(), tmpDT.date().month(), 1450 tmpDT.date().year(), tmpDT.date().month(),
1442 tmpDT.date().day(), tmpDT.time().hour(), 1451 tmpDT.date().day(), tmpDT.time().hour(),
1443 tmpDT.time().minute(), tmpDT.time().second()); 1452 tmpDT.time().minute(), tmpDT.time().second());
1444 } else { 1453 } else {
1445 tmpStr.sprintf("%.2d%.2d%.2dT%.2d%.2d%.2d", 1454 tmpStr.sprintf("%.2d%.2d%.2dT%.2d%.2d%.2d",
1446 qdt.date().year(), qdt.date().month(), 1455 qdt.date().year(), qdt.date().month(),
1447 qdt.date().day(), qdt.time().hour(), 1456 qdt.date().day(), qdt.time().hour(),
1448 qdt.time().minute(), qdt.time().second()); 1457 qdt.time().minute(), qdt.time().second());
1449 } 1458 }
1450 return tmpStr; 1459 return tmpStr;
1451} 1460}
1452 1461
1453QDateTime VCalFormat::ISOToQDateTime(const QString & dtStr) 1462QDateTime VCalFormat::ISOToQDateTime(const QString & dtStr)
1454{ 1463{
1455 QDate tmpDate; 1464 QDate tmpDate;
1456 QTime tmpTime; 1465 QTime tmpTime;
1457 QString tmpStr; 1466 QString tmpStr;
1458 int year, month, day, hour, minute, second; 1467 int year, month, day, hour, minute, second;
1459 1468
1460 tmpStr = dtStr; 1469 tmpStr = dtStr;
1461 year = tmpStr.left(4).toInt(); 1470 year = tmpStr.left(4).toInt();
1462 month = tmpStr.mid(4,2).toInt(); 1471 month = tmpStr.mid(4,2).toInt();
1463 day = tmpStr.mid(6,2).toInt(); 1472 day = tmpStr.mid(6,2).toInt();
diff --git a/libkcal/vcalformat.h b/libkcal/vcalformat.h
index 7b9ca26..848be78 100644
--- a/libkcal/vcalformat.h
+++ b/libkcal/vcalformat.h
@@ -41,70 +41,71 @@ class VCalFormat : public CalFormat {
41 public: 41 public:
42 VCalFormat(); 42 VCalFormat();
43 virtual ~VCalFormat(); 43 virtual ~VCalFormat();
44 44
45 /** loads a calendar on disk in vCalendar format into the current calendar. 45 /** loads a calendar on disk in vCalendar format into the current calendar.
46 * any information already present is lost. Returns TRUE if successful, 46 * any information already present is lost. Returns TRUE if successful,
47 * else returns FALSE. 47 * else returns FALSE.
48 * @param fileName the name of the calendar on disk. 48 * @param fileName the name of the calendar on disk.
49 */ 49 */
50 bool load(Calendar *,const QString &fileName); 50 bool load(Calendar *,const QString &fileName);
51 /** writes out the calendar to disk in vCalendar format. Returns true if 51 /** writes out the calendar to disk in vCalendar format. Returns true if
52 * successful and false on error. 52 * successful and false on error.
53 * @param fileName the name of the file 53 * @param fileName the name of the file
54 */ 54 */
55 bool save(Calendar *,const QString &fileName); 55 bool save(Calendar *,const QString &fileName);
56 56
57 /** 57 /**
58 Parse string and populate calendar with that information. 58 Parse string and populate calendar with that information.
59 */ 59 */
60 bool fromString( Calendar *, const QString & ); 60 bool fromString( Calendar *, const QString & );
61 /** 61 /**
62 Return calendar information as string. 62 Return calendar information as string.
63 */ 63 */
64 QString toString( Calendar * ); 64 QString toString( Calendar * );
65 QString eventToString( Event *, Calendar *calendar ); 65 QString eventToString( Event *, Calendar *calendar, bool useLocalTime = true );
66 QString todoToString( Todo * ,Calendar *calendar ); 66 QString todoToString( Todo * ,Calendar *calendar, bool useLocalTime = true );
67 67
68 protected: 68 protected:
69 /** translates a VObject of the TODO type into a Event */ 69 /** translates a VObject of the TODO type into a Event */
70 Todo *VTodoToEvent(VObject *vtodo); 70 Todo *VTodoToEvent(VObject *vtodo);
71 /** translates a VObject into a Event and returns a pointer to it. */ 71 /** translates a VObject into a Event and returns a pointer to it. */
72 Event *VEventToEvent(VObject *vevent); 72 Event *VEventToEvent(VObject *vevent);
73 /** translate a Event into a VTodo-type VObject and return pointer */ 73 /** translate a Event into a VTodo-type VObject and return pointer */
74 VObject *eventToVTodo(const Todo *anEvent); 74 VObject *eventToVTodo(const Todo *anEvent);
75 /** translate a Event into a VObject and returns a pointer to it. */ 75 /** translate a Event into a VObject and returns a pointer to it. */
76 VObject* eventToVEvent(const Event *anEvent); 76 VObject* eventToVEvent(const Event *anEvent);
77 77
78 /** takes a QDate and returns a string in the format YYYYMMDDTHHMMSS */ 78 /** takes a QDate and returns a string in the format YYYYMMDDTHHMMSS */
79 QString qDateToISO(const QDate &); 79 QString qDateToISO(const QDate &);
80 /** takes a QDateTime and returns a string in format YYYYMMDDTHHMMSS */ 80 /** takes a QDateTime and returns a string in format YYYYMMDDTHHMMSS */
81 QString qDateTimeToISO(const QDateTime &, bool zulu=TRUE); 81 QString qDateTimeToISO(const QDateTime &, bool zulu=TRUE);
82 /** takes a string in the format YYYYMMDDTHHMMSS and returns a 82 /** takes a string in the format YYYYMMDDTHHMMSS and returns a
83 * valid QDateTime. */ 83 * valid QDateTime. */
84 QDateTime ISOToQDateTime(const QString & dtStr); 84 QDateTime ISOToQDateTime(const QString & dtStr);
85 /** takes a string in the format YYYYMMDD and returns a 85 /** takes a string in the format YYYYMMDD and returns a
86 * valid QDate. */ 86 * valid QDate. */
87 QDate ISOToQDate(const QString & dtStr); 87 QDate ISOToQDate(const QString & dtStr);
88 /** takes a vCalendar tree of VObjects, and puts all of them that have 88 /** takes a vCalendar tree of VObjects, and puts all of them that have
89 * the "event" property into the dictionary, todos in the todo-list, etc. */ 89 * the "event" property into the dictionary, todos in the todo-list, etc. */
90 void populate(VObject *vcal); 90 void populate(VObject *vcal);
91 91
92 /** takes a number 0 - 6 and returns the two letter string of that day, 92 /** takes a number 0 - 6 and returns the two letter string of that day,
93 * i.e. MO, TU, WE, etc. */ 93 * i.e. MO, TU, WE, etc. */
94 const char *dayFromNum(int day); 94 const char *dayFromNum(int day);
95 /** the reverse of the above function. */ 95 /** the reverse of the above function. */
96 int numFromDay(const QString &day); 96 int numFromDay(const QString &day);
97 97
98 Attendee::PartStat readStatus(const char *s) const; 98 Attendee::PartStat readStatus(const char *s) const;
99 QCString writeStatus(Attendee::PartStat status) const; 99 QCString writeStatus(Attendee::PartStat status) const;
100 100
101 private: 101 private:
102 Calendar *mCalendar; 102 Calendar *mCalendar;
103 bool useLocalTime;
103 104
104 QPtrList<Event> mEventsRelate; // events with relations 105 QPtrList<Event> mEventsRelate; // events with relations
105 QPtrList<Todo> mTodosRelate; // todos with relations 106 QPtrList<Todo> mTodosRelate; // todos with relations
106}; 107};
107 108
108} 109}
109 110
110#endif 111#endif