summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libkcal/phoneformat.cpp25
1 files changed, 22 insertions, 3 deletions
diff --git a/libkcal/phoneformat.cpp b/libkcal/phoneformat.cpp
index e43a507..11c68c5 100644
--- a/libkcal/phoneformat.cpp
+++ b/libkcal/phoneformat.cpp
@@ -389,901 +389,920 @@ public:
389 */ 389 */
390 int dayOfWeek = startDate.dayOfWeek(); 390 int dayOfWeek = startDate.dayOfWeek();
391 if ( repeat_weekofmonth >= 0 ) { 391 if ( repeat_weekofmonth >= 0 ) {
392 rtype = 2; // ************************ 2 MonthlyPos 392 rtype = 2; // ************************ 2 MonthlyPos
393 pos = repeat_weekofmonth; 393 pos = repeat_weekofmonth;
394 if ( repeat_dayofweek >= 0 ) 394 if ( repeat_dayofweek >= 0 )
395 dayOfWeek = repeat_dayofweek; 395 dayOfWeek = repeat_dayofweek;
396 if (repeat_month > 0) { 396 if (repeat_month > 0) {
397 if ( repeat_month != event->dtStart().date().month() ) { 397 if ( repeat_month != event->dtStart().date().month() ) {
398 QDate date (event->dtStart().date().year(),repeat_month,event->dtStart().date().day() ); 398 QDate date (event->dtStart().date().year(),repeat_month,event->dtStart().date().day() );
399 event->setDtStart(QDateTime ( date , event->dtStart().time()) ); 399 event->setDtStart(QDateTime ( date , event->dtStart().time()) );
400 } 400 }
401 if ( freq == 1 ) 401 if ( freq == 1 )
402 freq = 12; 402 freq = 12;
403 } 403 }
404 } else if ( repeat_dayofweek >= 0 ) { 404 } else if ( repeat_dayofweek >= 0 ) {
405 rtype = 1;// ************************ 1 Weekly 405 rtype = 1;// ************************ 1 Weekly
406 } else if ( repeat_day >= 0 ) { 406 } else if ( repeat_day >= 0 ) {
407 if ( repeat_month > 0) { 407 if ( repeat_month > 0) {
408 rtype = 4; 408 rtype = 4;
409 } else { 409 } else {
410 rtype = 3; 410 rtype = 3;
411 } 411 }
412 } else { 412 } else {
413 rtype = 0 ; 413 rtype = 0 ;
414 } 414 }
415 415
416 if ( rtype == 0 ) { 416 if ( rtype == 0 ) {
417 if ( hasEndDate ) r->setDaily( freq, endDate ); 417 if ( hasEndDate ) r->setDaily( freq, endDate );
418 else r->setDaily( freq, -1 ); 418 else r->setDaily( freq, -1 );
419 } else if ( rtype == 1 ) { 419 } else if ( rtype == 1 ) {
420 if ( hasEndDate ) r->setWeekly( freq, weekDays, endDate ); 420 if ( hasEndDate ) r->setWeekly( freq, weekDays, endDate );
421 else r->setWeekly( freq, weekDays, -1 ); 421 else r->setWeekly( freq, weekDays, -1 );
422 } else if ( rtype == 3 ) { 422 } else if ( rtype == 3 ) {
423 if ( hasEndDate ) 423 if ( hasEndDate )
424 r->setMonthly( Recurrence::rMonthlyDay, freq, endDate ); 424 r->setMonthly( Recurrence::rMonthlyDay, freq, endDate );
425 else 425 else
426 r->setMonthly( Recurrence::rMonthlyDay, freq, -1 ); 426 r->setMonthly( Recurrence::rMonthlyDay, freq, -1 );
427 r->addMonthlyDay( startDate.day() ); 427 r->addMonthlyDay( startDate.day() );
428 } else if ( rtype == 2 ) { 428 } else if ( rtype == 2 ) {
429 if ( hasEndDate ) 429 if ( hasEndDate )
430 r->setMonthly( Recurrence::rMonthlyPos, freq, endDate ); 430 r->setMonthly( Recurrence::rMonthlyPos, freq, endDate );
431 else 431 else
432 r->setMonthly( Recurrence::rMonthlyPos, freq, -1 ); 432 r->setMonthly( Recurrence::rMonthlyPos, freq, -1 );
433 QBitArray days( 7 ); 433 QBitArray days( 7 );
434 days.fill( false ); 434 days.fill( false );
435 days.setBit( dayOfWeek - 1 ); 435 days.setBit( dayOfWeek - 1 );
436 r->addMonthlyPos( pos, days ); 436 r->addMonthlyPos( pos, days );
437 } else if ( rtype == 4 ) { 437 } else if ( rtype == 4 ) {
438 if ( hasEndDate ) 438 if ( hasEndDate )
439 r->setYearly( Recurrence::rYearlyMonth, freq, endDate ); 439 r->setYearly( Recurrence::rYearlyMonth, freq, endDate );
440 else 440 else
441 r->setYearly( Recurrence::rYearlyMonth, freq, -1 ); 441 r->setYearly( Recurrence::rYearlyMonth, freq, -1 );
442 r->addYearlyNum( startDate.month() ); 442 r->addYearlyNum( startDate.month() );
443 } 443 }
444 } else { 444 } else {
445 event->recurrence()->unsetRecurs(); 445 event->recurrence()->unsetRecurs();
446 } 446 }
447 447
448 QStringList categoryList; 448 QStringList categoryList;
449 categoryList << getCategory( Note ); 449 categoryList << getCategory( Note );
450 event->setCategories( categoryList ); 450 event->setCategories( categoryList );
451 // strange 0 semms to mean: alarm enabled 451 // strange 0 semms to mean: alarm enabled
452 if ( alarm ) { 452 if ( alarm ) {
453 Alarm *alarm; 453 Alarm *alarm;
454 if ( event->alarms().count() > 0 ) 454 if ( event->alarms().count() > 0 )
455 alarm = event->alarms().first(); 455 alarm = event->alarms().first();
456 else { 456 else {
457 alarm = new Alarm( event ); 457 alarm = new Alarm( event );
458 event->addAlarm( alarm ); 458 event->addAlarm( alarm );
459 } 459 }
460 alarm->setType( Alarm::Audio ); 460 alarm->setType( Alarm::Audio );
461 alarm->setEnabled( true ); 461 alarm->setEnabled( true );
462 int alarmOffset = alarmDt.secsTo( event->dtStart() ); 462 int alarmOffset = alarmDt.secsTo( event->dtStart() );
463 alarm->setStartOffset( -alarmOffset ); 463 alarm->setStartOffset( -alarmOffset );
464 } else { 464 } else {
465 Alarm *alarm; 465 Alarm *alarm;
466 if ( event->alarms().count() > 0 ) { 466 if ( event->alarms().count() > 0 ) {
467 alarm = event->alarms().first(); 467 alarm = event->alarms().first();
468 alarm->setType( Alarm::Audio ); 468 alarm->setType( Alarm::Audio );
469 alarm->setStartOffset( -60*15 ); 469 alarm->setStartOffset( -60*15 );
470 alarm->setEnabled( false ); 470 alarm->setEnabled( false );
471 } 471 }
472 } 472 }
473 // csum ***************************************** 473 // csum *****************************************
474 474
475 uint cSum; 475 uint cSum;
476 cSum = PhoneFormat::getCsumEvent( event ); 476 cSum = PhoneFormat::getCsumEvent( event );
477 event->setCsum( mProfileName, QString::number( cSum )); 477 event->setCsum( mProfileName, QString::number( cSum ));
478 event->setTempSyncStat( SYNC_TEMPSTATE_NEW_EXTERNAL ); 478 event->setTempSyncStat( SYNC_TEMPSTATE_NEW_EXTERNAL );
479 mCalendar->addEvent( event); 479 mCalendar->addEvent( event);
480 480
481 return true; 481 return true;
482 } 482 }
483 483
484 484
485 QDateTime fromGSM ( GSM_DateTime*dtp, bool useTz = true ) { 485 QDateTime fromGSM ( GSM_DateTime*dtp, bool useTz = true ) {
486 QDateTime dt; 486 QDateTime dt;
487 int y,m,t,h,min,sec; 487 int y,m,t,h,min,sec;
488 y = dtp->Year; 488 y = dtp->Year;
489 m = dtp->Month; 489 m = dtp->Month;
490 t = dtp->Day; 490 t = dtp->Day;
491 h = dtp->Hour; 491 h = dtp->Hour;
492 min = dtp->Minute; 492 min = dtp->Minute;
493 sec = dtp->Second; 493 sec = dtp->Second;
494 dt = QDateTime(QDate(y,m,t), QTime(h,min,sec)); 494 dt = QDateTime(QDate(y,m,t), QTime(h,min,sec));
495 // dtp->Timezone: offset in hours 495 // dtp->Timezone: offset in hours
496 int offset = KGlobal::locale()->localTimeOffset( dt ); 496 int offset = KGlobal::locale()->localTimeOffset( dt );
497 if ( useTz ) 497 if ( useTz )
498 dt = dt.addSecs ( offset*60); 498 dt = dt.addSecs ( offset*60);
499 return dt; 499 return dt;
500 500
501 } 501 }
502 502
503 static QString dtToString( const QDateTime& dti, bool useTZ = false ) 503 static QString dtToString( const QDateTime& dti, bool useTZ = false )
504 { 504 {
505 QString datestr; 505 QString datestr;
506 QString timestr; 506 QString timestr;
507 int offset = KGlobal::locale()->localTimeOffset( dti ); 507 int offset = KGlobal::locale()->localTimeOffset( dti );
508 QDateTime dt; 508 QDateTime dt;
509 if (useTZ) 509 if (useTZ)
510 dt = dti.addSecs ( -(offset*60)); 510 dt = dti.addSecs ( -(offset*60));
511 else 511 else
512 dt = dti; 512 dt = dti;
513 if(dt.date().isValid()){ 513 if(dt.date().isValid()){
514 const QDate& date = dt.date(); 514 const QDate& date = dt.date();
515 datestr.sprintf("%04d%02d%02d", 515 datestr.sprintf("%04d%02d%02d",
516 date.year(), date.month(), date.day()); 516 date.year(), date.month(), date.day());
517 } 517 }
518 if(dt.time().isValid()){ 518 if(dt.time().isValid()){
519 const QTime& time = dt.time(); 519 const QTime& time = dt.time();
520 timestr.sprintf("T%02d%02d%02d", 520 timestr.sprintf("T%02d%02d%02d",
521 time.hour(), time.minute(), time.second()); 521 time.hour(), time.minute(), time.second());
522 } 522 }
523 return datestr + timestr; 523 return datestr + timestr;
524 } 524 }
525 QDate datefromGSM ( GSM_DateTime*dtp ) { 525 QDate datefromGSM ( GSM_DateTime*dtp ) {
526 return QDate ( dtp->Year, dtp->Month, dtp->Day ); 526 return QDate ( dtp->Year, dtp->Month, dtp->Day );
527 } 527 }
528 QString getCategory( GSM_CalendarEntry*Note) 528 QString getCategory( GSM_CalendarEntry*Note)
529 { 529 {
530 QString CATEGORY; 530 QString CATEGORY;
531 switch (Note->Type) { 531 switch (Note->Type) {
532 case GSM_CAL_REMINDER : CATEGORY = QString("Reminder"); break; 532 case GSM_CAL_REMINDER : CATEGORY = QString("Reminder"); break;
533 case GSM_CAL_CALL : CATEGORY = QString("Call"); break; 533 case GSM_CAL_CALL : CATEGORY = QString("Call"); break;
534 case GSM_CAL_MEETING : CATEGORY = QString("Meeting"); break; 534 case GSM_CAL_MEETING : CATEGORY = QString("Meeting"); break;
535 case GSM_CAL_BIRTHDAY : CATEGORY = QString("Birthday"); break; 535 case GSM_CAL_BIRTHDAY : CATEGORY = QString("Birthday"); break;
536 case GSM_CAL_MEMO : CATEGORY = QString("Memo"); break; 536 case GSM_CAL_MEMO : CATEGORY = QString("Memo"); break;
537 case GSM_CAL_TRAVEL : CATEGORY = QString("Travel"); break; 537 case GSM_CAL_TRAVEL : CATEGORY = QString("Travel"); break;
538 case GSM_CAL_VACATION : CATEGORY = QString("Vacation"); break; 538 case GSM_CAL_VACATION : CATEGORY = QString("Vacation"); break;
539 case GSM_CAL_ALARM : CATEGORY = QString("Alarm"); break; 539 case GSM_CAL_ALARM : CATEGORY = QString("Alarm"); break;
540 case GSM_CAL_DAILY_ALARM : CATEGORY = QString("Daily alarm"); break; 540 case GSM_CAL_DAILY_ALARM : CATEGORY = QString("Daily alarm"); break;
541 case GSM_CAL_T_ATHL : CATEGORY = QString("Training/Athletism"); break; 541 case GSM_CAL_T_ATHL : CATEGORY = QString("Training/Athletism"); break;
542 case GSM_CAL_T_BALL : CATEGORY = QString("Training/Ball Games"); break; 542 case GSM_CAL_T_BALL : CATEGORY = QString("Training/Ball Games"); break;
543 case GSM_CAL_T_CYCL : CATEGORY = QString("Training/Cycling"); break; 543 case GSM_CAL_T_CYCL : CATEGORY = QString("Training/Cycling"); break;
544 case GSM_CAL_T_BUDO : CATEGORY = QString("Training/Budo"); break; 544 case GSM_CAL_T_BUDO : CATEGORY = QString("Training/Budo"); break;
545 case GSM_CAL_T_DANC : CATEGORY = QString("Training/Dance"); break; 545 case GSM_CAL_T_DANC : CATEGORY = QString("Training/Dance"); break;
546 case GSM_CAL_T_EXTR : CATEGORY = QString("Training/Extreme Sports"); break; 546 case GSM_CAL_T_EXTR : CATEGORY = QString("Training/Extreme Sports"); break;
547 case GSM_CAL_T_FOOT : CATEGORY = QString("Training/Football"); break; 547 case GSM_CAL_T_FOOT : CATEGORY = QString("Training/Football"); break;
548 case GSM_CAL_T_GOLF : CATEGORY = QString("Training/Golf"); break; 548 case GSM_CAL_T_GOLF : CATEGORY = QString("Training/Golf"); break;
549 case GSM_CAL_T_GYM : CATEGORY = QString("Training/Gym"); break; 549 case GSM_CAL_T_GYM : CATEGORY = QString("Training/Gym"); break;
550 case GSM_CAL_T_HORS : CATEGORY = QString("Training/Horse Races"); break; 550 case GSM_CAL_T_HORS : CATEGORY = QString("Training/Horse Races"); break;
551 case GSM_CAL_T_HOCK : CATEGORY = QString("Training/Hockey"); break; 551 case GSM_CAL_T_HOCK : CATEGORY = QString("Training/Hockey"); break;
552 case GSM_CAL_T_RACE : CATEGORY = QString("Training/Races"); break; 552 case GSM_CAL_T_RACE : CATEGORY = QString("Training/Races"); break;
553 case GSM_CAL_T_RUGB : CATEGORY = QString("Training/Rugby"); break; 553 case GSM_CAL_T_RUGB : CATEGORY = QString("Training/Rugby"); break;
554 case GSM_CAL_T_SAIL : CATEGORY = QString("Training/Sailing"); break; 554 case GSM_CAL_T_SAIL : CATEGORY = QString("Training/Sailing"); break;
555 case GSM_CAL_T_STRE : CATEGORY = QString("Training/Street Games"); break; 555 case GSM_CAL_T_STRE : CATEGORY = QString("Training/Street Games"); break;
556 case GSM_CAL_T_SWIM : CATEGORY = QString("Training/Swimming"); break; 556 case GSM_CAL_T_SWIM : CATEGORY = QString("Training/Swimming"); break;
557 case GSM_CAL_T_TENN : CATEGORY = QString("Training/Tennis"); break; 557 case GSM_CAL_T_TENN : CATEGORY = QString("Training/Tennis"); break;
558 case GSM_CAL_T_TRAV : CATEGORY = QString("Training/Travels"); break; 558 case GSM_CAL_T_TRAV : CATEGORY = QString("Training/Travels"); break;
559 case GSM_CAL_T_WINT : CATEGORY = QString("Training/Winter Games"); break; 559 case GSM_CAL_T_WINT : CATEGORY = QString("Training/Winter Games"); break;
560 default : CATEGORY = QString(""); 560 default : CATEGORY = QString("");
561 } 561 }
562 562
563 return CATEGORY; 563 return CATEGORY;
564 } 564 }
565 565
566protected: 566protected:
567private: 567private:
568 Calendar *mCalendar; 568 Calendar *mCalendar;
569 QString mProfileName ; 569 QString mProfileName ;
570}; 570};
571 571
572 572
573PhoneFormat::PhoneFormat(QString profileName, QString device,QString connection, QString model ) 573PhoneFormat::PhoneFormat(QString profileName, QString device,QString connection, QString model )
574{ 574{
575 mProfileName = profileName; 575 mProfileName = profileName;
576 mDevice = device; 576 mDevice = device;
577 mConnection = connection; 577 mConnection = connection;
578 mModel = model; 578 mModel = model;
579} 579}
580 580
581PhoneFormat::~PhoneFormat() 581PhoneFormat::~PhoneFormat()
582{ 582{
583} 583}
584int PhoneFormat::initDevice(GSM_StateMachine *s) 584int PhoneFormat::initDevice(GSM_StateMachine *s)
585{ 585{
586 GSM_ReadConfig(NULL, &s->Config[0], 0); 586 GSM_ReadConfig(NULL, &s->Config[0], 0);
587 s->ConfigNum = 1; 587 s->ConfigNum = 1;
588 GSM_Config *cfg = &s->Config[0]; 588 GSM_Config *cfg = &s->Config[0];
589 if ( ! mConnection.isEmpty() ) { 589 if ( ! mConnection.isEmpty() ) {
590 cfg->Connection = strdup(mConnection.latin1()); 590 cfg->Connection = strdup(mConnection.latin1());
591 cfg->DefaultConnection = false; 591 cfg->DefaultConnection = false;
592 qDebug("Connection set %s ", cfg->Connection ); 592 qDebug("Connection set %s ", cfg->Connection );
593 593
594 } 594 }
595 if ( ! mDevice.isEmpty() ) { 595 if ( ! mDevice.isEmpty() ) {
596 cfg->Device = strdup(mDevice.latin1()); 596 cfg->Device = strdup(mDevice.latin1());
597 cfg->DefaultDevice = false; 597 cfg->DefaultDevice = false;
598 qDebug("Device set %s ", cfg->Device); 598 qDebug("Device set %s ", cfg->Device);
599 599
600 } 600 }
601 if ( ! mModel.isEmpty() ) { 601 if ( ! mModel.isEmpty() ) {
602 strcpy(cfg->Model,mModel.latin1() ); 602 strcpy(cfg->Model,mModel.latin1() );
603 cfg->DefaultModel = false; 603 cfg->DefaultModel = false;
604 qDebug("Model set %s ",cfg->Model ); 604 qDebug("Model set %s ",cfg->Model );
605 } 605 }
606 int error=GSM_InitConnection(s,3); 606 int error=GSM_InitConnection(s,3);
607 return error; 607 return error;
608} 608}
609ulong PhoneFormat::getCsumTodo( Todo* todo ) 609ulong PhoneFormat::getCsumTodo( Todo* todo )
610{ 610{
611 QStringList attList; 611 QStringList attList;
612 if ( todo->hasDueDate() ) 612 if ( todo->hasDueDate() )
613 attList << PhoneParser::dtToString ( todo->dtDue() ); 613 attList << PhoneParser::dtToString ( todo->dtDue() );
614 attList << todo->summary(); 614 attList << todo->summary();
615 QString completedString = "no"; 615 QString completedString = "no";
616 if ( todo->isCompleted() ) 616 if ( todo->isCompleted() )
617 completedString = "yes"; 617 completedString = "yes";
618 attList << completedString; 618 attList << completedString;
619 attList << QString::number( todo->priority() ); 619 attList << QString::number( todo->priority() );
620 QString alarmString = "na"; 620 QString alarmString = "na";
621 Alarm *alarm; 621 Alarm *alarm;
622 if ( todo->alarms().count() > 0 ) { 622 if ( todo->alarms().count() > 0 ) {
623 alarm = todo->alarms().first(); 623 alarm = todo->alarms().first();
624 if ( alarm->enabled() ) { 624 if ( alarm->enabled() ) {
625 alarmString = QString::number(alarm->startOffset().asSeconds() ); 625 alarmString = QString::number(alarm->startOffset().asSeconds() );
626 } 626 }
627 } 627 }
628 attList << alarmString; 628 attList << alarmString;
629 attList << todo->categoriesStr(); 629 attList << todo->categoriesStr();
630 attList << todo->secrecyStr(); 630 attList << todo->secrecyStr();
631 return PhoneFormat::getCsum(attList ); 631 return PhoneFormat::getCsum(attList );
632 632
633} 633}
634ulong PhoneFormat::getCsumEvent( Event* event ) 634ulong PhoneFormat::getCsumEvent( Event* event )
635{ 635{
636 QStringList attList; 636 QStringList attList;
637 attList << PhoneParser::dtToString ( event->dtStart() ); 637 attList << PhoneParser::dtToString ( event->dtStart() );
638 attList << PhoneParser::dtToString ( event->dtEnd() ); 638 attList << PhoneParser::dtToString ( event->dtEnd() );
639 attList << event->summary(); 639 attList << event->summary();
640 attList << event->location(); 640 attList << event->location();
641 QString alarmString = "na"; 641 QString alarmString = "na";
642 Alarm *alarm; 642 Alarm *alarm;
643 if ( event->alarms().count() > 0 ) { 643 if ( event->alarms().count() > 0 ) {
644 alarm = event->alarms().first(); 644 alarm = event->alarms().first();
645 if ( alarm->enabled() ) { 645 if ( alarm->enabled() ) {
646 alarmString = QString::number( alarm->startOffset().asSeconds() ); 646 alarmString = QString::number( alarm->startOffset().asSeconds() );
647 } 647 }
648 } 648 }
649 attList << alarmString; 649 attList << alarmString;
650 Recurrence* rec = event->recurrence(); 650 Recurrence* rec = event->recurrence();
651 QStringList list; 651 QStringList list;
652 bool writeEndDate = false; 652 bool writeEndDate = false;
653 switch ( rec->doesRecur() ) 653 switch ( rec->doesRecur() )
654 { 654 {
655 case Recurrence::rDaily: // 0 655 case Recurrence::rDaily: // 0
656 list.append( "0" ); 656 list.append( "0" );
657 list.append( QString::number( rec->frequency() ));//12 657 list.append( QString::number( rec->frequency() ));//12
658 list.append( "0" ); 658 list.append( "0" );
659 list.append( "0" ); 659 list.append( "0" );
660 writeEndDate = true; 660 writeEndDate = true;
661 break; 661 break;
662 case Recurrence::rWeekly:// 1 662 case Recurrence::rWeekly:// 1
663 list.append( "1" ); 663 list.append( "1" );
664 list.append( QString::number( rec->frequency()) );//12 664 list.append( QString::number( rec->frequency()) );//12
665 list.append( "0" ); 665 list.append( "0" );
666 { 666 {
667 int days = 0; 667 int days = 0;
668 QBitArray weekDays = rec->days(); 668 QBitArray weekDays = rec->days();
669 int i; 669 int i;
670 for( i = 1; i <= 7; ++i ) { 670 for( i = 1; i <= 7; ++i ) {
671 if ( weekDays[i-1] ) { 671 if ( weekDays[i-1] ) {
672 days += 1 << (i-1); 672 days += 1 << (i-1);
673 } 673 }
674 } 674 }
675 list.append( QString::number( days ) ); 675 list.append( QString::number( days ) );
676 } 676 }
677 //pending weekdays 677 //pending weekdays
678 writeEndDate = true; 678 writeEndDate = true;
679 679
680 break; 680 break;
681 case Recurrence::rMonthlyPos:// 2 681 case Recurrence::rMonthlyPos:// 2
682 list.append( "2" ); 682 list.append( "2" );
683 list.append( QString::number( rec->frequency()) );//12 683 list.append( QString::number( rec->frequency()) );//12
684 684
685 writeEndDate = true; 685 writeEndDate = true;
686 { 686 {
687 int count = 1; 687 int count = 1;
688 QPtrList<Recurrence::rMonthPos> rmp; 688 QPtrList<Recurrence::rMonthPos> rmp;
689 rmp = rec->monthPositions(); 689 rmp = rec->monthPositions();
690 if ( rmp.first()->negative ) 690 if ( rmp.first()->negative )
691 count = 5 - rmp.first()->rPos - 1; 691 count = 5 - rmp.first()->rPos - 1;
692 else 692 else
693 count = rmp.first()->rPos - 1; 693 count = rmp.first()->rPos - 1;
694 list.append( QString::number( count ) ); 694 list.append( QString::number( count ) );
695 695
696 } 696 }
697 697
698 list.append( "0" ); 698 list.append( "0" );
699 break; 699 break;
700 case Recurrence::rMonthlyDay:// 3 700 case Recurrence::rMonthlyDay:// 3
701 list.append( "3" ); 701 list.append( "3" );
702 list.append( QString::number( rec->frequency()) );//12 702 list.append( QString::number( rec->frequency()) );//12
703 list.append( "0" ); 703 list.append( "0" );
704 list.append( "0" ); 704 list.append( "0" );
705 writeEndDate = true; 705 writeEndDate = true;
706 break; 706 break;
707 case Recurrence::rYearlyMonth://4 707 case Recurrence::rYearlyMonth://4
708 list.append( "4" ); 708 list.append( "4" );
709 list.append( QString::number( rec->frequency()) );//12 709 list.append( QString::number( rec->frequency()) );//12
710 list.append( "0" ); 710 list.append( "0" );
711 list.append( "0" ); 711 list.append( "0" );
712 writeEndDate = true; 712 writeEndDate = true;
713 break; 713 break;
714 714
715 default: 715 default:
716 list.append( "255" ); 716 list.append( "255" );
717 list.append( QString() ); 717 list.append( QString() );
718 list.append( "0" ); 718 list.append( "0" );
719 list.append( QString() ); 719 list.append( QString() );
720 list.append( "0" ); 720 list.append( "0" );
721 list.append( "20991231T000000" ); 721 list.append( "20991231T000000" );
722 break; 722 break;
723 } 723 }
724 if ( writeEndDate ) { 724 if ( writeEndDate ) {
725 725
726 if ( rec->endDate().isValid() ) { // 15 + 16 726 if ( rec->endDate().isValid() ) { // 15 + 16
727 list.append( "1" ); 727 list.append( "1" );
728 list.append( PhoneParser::dtToString( rec->endDate()) ); 728 list.append( PhoneParser::dtToString( rec->endDate()) );
729 } else { 729 } else {
730 list.append( "0" ); 730 list.append( "0" );
731 list.append( "20991231T000000" ); 731 list.append( "20991231T000000" );
732 } 732 }
733 733
734 } 734 }
735 attList << list.join(""); 735 attList << list.join("");
736 attList << event->categoriesStr(); 736 attList << event->categoriesStr();
737 attList << event->secrecyStr(); 737 attList << event->secrecyStr();
738 return PhoneFormat::getCsum(attList ); 738 return PhoneFormat::getCsum(attList );
739} 739}
740ulong PhoneFormat::getCsum( const QStringList & attList) 740ulong PhoneFormat::getCsum( const QStringList & attList)
741{ 741{
742 int max = attList.count() -1; 742 int max = attList.count() -1;
743 ulong cSum = 0; 743 ulong cSum = 0;
744 int j,k,i; 744 int j,k,i;
745 int add; 745 int add;
746 for ( i = 1; i < max ; ++i ) { 746 for ( i = 1; i < max ; ++i ) {
747 QString s = attList[i]; 747 QString s = attList[i];
748 if ( ! s.isEmpty() ){ 748 if ( ! s.isEmpty() ){
749 j = s.length(); 749 j = s.length();
750 for ( k = 0; k < j; ++k ) { 750 for ( k = 0; k < j; ++k ) {
751 int mul = k +1; 751 int mul = k +1;
752 add = s[k].unicode (); 752 add = s[k].unicode ();
753 if ( k < 16 ) 753 if ( k < 16 )
754 mul = mul * mul; 754 mul = mul * mul;
755 add = add * mul *i*i*i; 755 add = add * mul *i*i*i;
756 cSum += add; 756 cSum += add;
757 } 757 }
758 } 758 }
759 } 759 }
760 return cSum; 760 return cSum;
761 761
762} 762}
763//extern "C" GSM_Error GSM_InitConnection(GSM_StateMachine *s, int ReplyNum); 763//extern "C" GSM_Error GSM_InitConnection(GSM_StateMachine *s, int ReplyNum);
764#include <stdlib.h> 764#include <stdlib.h>
765#define DEBUGMODE false 765#define DEBUGMODE false
766bool PhoneFormat::load( Calendar *calendar, Calendar *existingCal) 766bool PhoneFormat::load( Calendar *calendar, Calendar *existingCal)
767{ 767{
768 GSM_StateMachines; 768 GSM_StateMachines;
769 qDebug(" load "); 769 qDebug(" load ");
770 s.opened = false; 770 s.opened = false;
771 s.msg = NULL; 771 s.msg = NULL;
772 s.ConfigNum = 0; 772 s.ConfigNum = 0;
773 QLabel status ( i18n("Reading data. Opening device ..."), 0 );
774 int w = status.sizeHint().width()+20 ;
775 if ( w < 200 ) w = 200;
776 int h = status.sizeHint().height()+20 ;
777 int dw = QApplication::desktop()->width();
778 int dh = QApplication::desktop()->height();
779 status.setCaption(i18n("Reading Phone Data") );
780 status.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
781 status.show();
782 status.raise();
783 qApp->processEvents();
773#if 0 784#if 0
774 static char*cp; 785 static char*cp;
775 static INI_Section *cfg = NULL; 786 static INI_Section *cfg = NULL;
776 cfg=GSM_FindGammuRC(); 787 cfg=GSM_FindGammuRC();
777 int i; 788 int i;
778 for (i = 0; i <= MAX_CONFIG_NUM; i++) { 789 for (i = 0; i <= MAX_CONFIG_NUM; i++) {
779 if (cfg!=NULL) { 790 if (cfg!=NULL) {
780 cp = (char *)INI_GetValue(cfg, (unsigned char*) "gammu", (unsigned char*)"gammucoding", false); 791 cp = (char *)INI_GetValue(cfg, (unsigned char*) "gammu", (unsigned char*)"gammucoding", false);
781 if (cp) di.coding = cp; 792 if (cp) di.coding = cp;
782 793
783 s.Config[i].Localize = (char *)INI_GetValue(cfg, (unsigned char*) "gammu", (unsigned char*) "gammuloc", false); 794 s.Config[i].Localize = (char *)INI_GetValue(cfg, (unsigned char*) "gammu", (unsigned char*) "gammuloc", false);
784 if (s.Config[i].Localize) { 795 if (s.Config[i].Localize) {
785 s.msg=INI_ReadFile(s.Config[i].Localize, true); 796 s.msg=INI_ReadFile(s.Config[i].Localize, true);
786 } else { 797 } else {
787#if !defined(WIN32) && defined(LOCALE_PATH) 798#if !defined(WIN32) && defined(LOCALE_PATH)
788 locale = setlocale(LC_MESSAGES, NULL); 799 locale = setlocale(LC_MESSAGES, NULL);
789 if (locale != NULL) { 800 if (locale != NULL) {
790 snprintf(locale_file, 200, "%s/gammu_%c%c.txt", 801 snprintf(locale_file, 200, "%s/gammu_%c%c.txt",
791 LOCALE_PATH, 802 LOCALE_PATH,
792 tolower(locale[0]), 803 tolower(locale[0]),
793 tolower(locale[1])); 804 tolower(locale[1]));
794 s.msg = INI_ReadFile(locale_file, true); 805 s.msg = INI_ReadFile(locale_file, true);
795 } 806 }
796#endif 807#endif
797 } 808 }
798 } 809 }
799 810
800 /* Wanted user specific configuration? */ 811 /* Wanted user specific configuration? */
801 812
802 if (!GSM_ReadConfig(cfg, &s.Config[i], i) && i != 0) break; 813 if (!GSM_ReadConfig(cfg, &s.Config[i], i) && i != 0) break;
803 814
804 s.ConfigNum++; 815 s.ConfigNum++;
805 816
806 /* We want to use only one file descriptor for global and state machine debug output */ 817 /* We want to use only one file descriptor for global and state machine debug output */
807 s.Config[i].UseGlobalDebugFile = true; 818 s.Config[i].UseGlobalDebugFile = true;
808 819
809 820
810 821
811 /* We wanted to read just user specified configuration. */ 822 /* We wanted to read just user specified configuration. */
812 {break;} 823 {break;}
813 } 824 }
814 825
815#endif 826#endif
816 int error=initDevice(&s); 827 int error=initDevice(&s);
817 qDebug("GSM Init %d (no error is %d)", error, ERR_NONE); 828 qDebug("GSM Init %d (no error is %d)", error, ERR_NONE);
818 if ( error != ERR_NONE ) 829 if ( error != ERR_NONE )
819 return false; 830 return false;
820 GSM_Phone_Functions*Phone; 831 GSM_Phone_Functions*Phone;
821 GSM_CalendarEntrynote; 832 GSM_CalendarEntrynote;
822 bool start = true; 833 bool start = true;
823 Phone=s.Phone.Functions; 834 Phone=s.Phone.Functions;
824 bool gshutdown = false; 835 bool gshutdown = false;
825 PhoneParser handler( calendar, mProfileName ); 836 PhoneParser handler( calendar, mProfileName );
826 int ccc = 0; 837 int ccc = 0;
838 QString message = i18n("Processing event # ");
839 int procCount = 0;
827 qDebug("Debug: only 10 calender items are downloaded "); 840 qDebug("Debug: only 10 calender items are downloaded ");
828 while (!gshutdown && ccc++ < 10) { 841 while (!gshutdown && ccc++ < 10) {
829 842 status.setText ( message + QString::number ( ++procCount ) );
843 qApp->processEvents();
830 qDebug("readEvent %d ", ccc); 844 qDebug("readEvent %d ", ccc);
831 error=Phone->GetNextCalendar(&s,&note,start); 845 error=Phone->GetNextCalendar(&s,&note,start);
832 if (error == ERR_EMPTY) break; 846 if (error == ERR_EMPTY) break;
833 start = false; 847 start = false;
834 handler.readEvent( existingCal, &note ); 848 handler.readEvent( existingCal, &note );
835 } 849 }
836 850
837 start = true; 851 start = true;
838 GSM_ToDoEntry ToDo; 852 GSM_ToDoEntry ToDo;
839 ccc = 0; 853 ccc = 0;
854 message = i18n("Processing todo # ");
855 procCount = 0;
840 while (!gshutdown) { 856 while (!gshutdown) {
857 status.setText ( message + QString::number ( ++procCount ) );
858 qApp->processEvents();
841 error = Phone->GetNextToDo(&s, &ToDo, start); 859 error = Phone->GetNextToDo(&s, &ToDo, start);
842 if (error == ERR_EMPTY) break; 860 if (error == ERR_EMPTY) break;
843 start = false; 861 start = false;
844 qDebug("ReadTodo %d ", ++ccc); 862 qDebug("ReadTodo %d ", ++ccc);
845 handler.readTodo( existingCal, &ToDo, &s); 863 handler.readTodo( existingCal, &ToDo, &s);
846 864
847 } 865 }
848 866
849 error=GSM_TerminateConnection(&s); 867 error=GSM_TerminateConnection(&s);
850 868
851 return true; 869 return true;
852} 870}
853void PhoneFormat::event2GSM( Event* ev, GSM_CalendarEntry*Note ) 871void PhoneFormat::event2GSM( Event* ev, GSM_CalendarEntry*Note )
854{ 872{
855 873
856} 874}
857void PhoneFormat::todo2GSM( Todo* todo, GSM_ToDoEntry *gsm ) 875void PhoneFormat::todo2GSM( Todo* todo, GSM_ToDoEntry *gsm )
858{ 876{
859#if 0 877#if 0
860 QStringList list; 878 QStringList list;
861 list.append( QString::number( todo->zaurusId() ) ); 879 list.append( QString::number( todo->zaurusId() ) );
862 list.append( todo->categories().join(",") ); 880 list.append( todo->categories().join(",") );
863 881
864 if ( todo->hasStartDate() ) { 882 if ( todo->hasStartDate() ) {
865 list.append( dtToString( todo->dtStart()) ); 883 list.append( dtToString( todo->dtStart()) );
866 } else 884 } else
867 list.append( QString() ); 885 list.append( QString() );
868 886
869 if ( todo->hasDueDate() ) { 887 if ( todo->hasDueDate() ) {
870 QTime tim; 888 QTime tim;
871 if ( todo->doesFloat()) { 889 if ( todo->doesFloat()) {
872 list.append( dtToString( QDateTime(todo->dtDue().date(),QTime( 0,0,0 )), false)) ; 890 list.append( dtToString( QDateTime(todo->dtDue().date(),QTime( 0,0,0 )), false)) ;
873 } else { 891 } else {
874 list.append( dtToString(todo->dtDue() ) ); 892 list.append( dtToString(todo->dtDue() ) );
875 } 893 }
876 } else 894 } else
877 list.append( QString() ); 895 list.append( QString() );
878 896
879 if ( todo->isCompleted() ) { 897 if ( todo->isCompleted() ) {
880 list.append( dtToString( todo->completed()) ); 898 list.append( dtToString( todo->completed()) );
881 list.append( "0" ); // yes 0 == completed 899 list.append( "0" ); // yes 0 == completed
882 } else { 900 } else {
883 list.append( dtToString( todo->completed()) ); 901 list.append( dtToString( todo->completed()) );
884 list.append( "1" ); 902 list.append( "1" );
885 } 903 }
886 list.append( QString::number( todo->priority() )); 904 list.append( QString::number( todo->priority() ));
887 if( ! todo->summary().isEmpty() ) 905 if( ! todo->summary().isEmpty() )
888 list.append( todo->summary() ); 906 list.append( todo->summary() );
889 else 907 else
890 list.append( "" ); 908 list.append( "" );
891 if (! todo->description().isEmpty() ) 909 if (! todo->description().isEmpty() )
892 list.append( todo->description() ); 910 list.append( todo->description() );
893 else 911 else
894 list.append( "" ); 912 list.append( "" );
895 for(QStringList::Iterator it=list.begin(); 913 for(QStringList::Iterator it=list.begin();
896 it!=list.end(); ++it){ 914 it!=list.end(); ++it){
897 QString& s = (*it); 915 QString& s = (*it);
898 s.replace(QRegExp("\""), "\"\""); 916 s.replace(QRegExp("\""), "\"\"");
899 if(s.contains(QRegExp("[,\"\r\n]")) || s.stripWhiteSpace() != s){ 917 if(s.contains(QRegExp("[,\"\r\n]")) || s.stripWhiteSpace() != s){
900 s.prepend('\"'); 918 s.prepend('\"');
901 s.append('\"'); 919 s.append('\"');
902 } else if(s.isEmpty() && !s.isNull()){ 920 } else if(s.isEmpty() && !s.isNull()){
903 s = "\"\""; 921 s = "\"\"";
904 } 922 }
905 } 923 }
906 return list.join(","); 924 return list.join(",");
907#endif 925#endif
908} 926}
909void PhoneFormat::afterSave( Incidence* inc) 927void PhoneFormat::afterSave( Incidence* inc)
910{ 928{
911 uint csum; 929 uint csum;
912 if ( inc->type() == "Event") 930 if ( inc->type() == "Event")
913 csum = PhoneFormat::getCsumEvent( (Event*) inc ); 931 csum = PhoneFormat::getCsumEvent( (Event*) inc );
914 else 932 else
915 csum = PhoneFormat::getCsumTodo( (Todo*) inc ); 933 csum = PhoneFormat::getCsumTodo( (Todo*) inc );
916 inc->setCsum( mProfileName, QString::number( csum )); 934 inc->setCsum( mProfileName, QString::number( csum ));
917 inc->setTempSyncStat( SYNC_TEMPSTATE_NEW_ID ); 935 inc->setTempSyncStat( SYNC_TEMPSTATE_NEW_ID );
918 936
919} 937}
920bool PhoneFormat::save( Calendar *calendar) 938bool PhoneFormat::save( Calendar *calendar)
921{ 939{
922 GSM_StateMachines; 940 GSM_StateMachines;
923 qDebug(" save "); 941 qDebug(" save ");
924 s.opened = false; 942 s.opened = false;
925 s.msg = NULL; 943 s.msg = NULL;
926 s.ConfigNum = 0; 944 s.ConfigNum = 0;
927 QLabel status ( i18n("Writing data. Opening device ..."), 0 ); 945 QLabel status ( i18n("Writing data. Opening device ..."), 0 );
928 int w = status.sizeHint().width()+20 ; 946 int w = status.sizeHint().width()+20 ;
929 if ( w < 200 ) w = 200; 947 if ( w < 200 ) w = 200;
930 int h = status.sizeHint().height()+20 ; 948 int h = status.sizeHint().height()+20 ;
931 int dw = QApplication::desktop()->width(); 949 int dw = QApplication::desktop()->width();
932 int dh = QApplication::desktop()->height(); 950 int dh = QApplication::desktop()->height();
933 status.setCaption(i18n("Writing DTM Data") ); 951 status.setCaption(i18n("Writing Phone Data") );
934 status.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 952 status.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
935 status.show(); 953 status.show();
936 status.raise(); 954 status.raise();
937 qApp->processEvents(); 955 qApp->processEvents();
938 956
939 int error=initDevice(&s); 957 int error=initDevice(&s);
940 qDebug("GSM Init %d (no error is %d)", error, ERR_NONE); 958 qDebug("GSM Init %d (no error is %d)", error, ERR_NONE);
941 if ( error != ERR_NONE ) 959 if ( error != ERR_NONE )
942 return false; 960 return false;
943 GSM_Phone_Functions*Phone; 961 GSM_Phone_Functions*Phone;
944 GSM_CalendarEntryNote; 962 GSM_CalendarEntryNote;
945 bool start = true; 963 bool start = true;
946 Phone=s.Phone.Functions; 964 Phone=s.Phone.Functions;
947 bool gshutdown = false; 965 bool gshutdown = false;
948 QPtrList<Event> er = calendar->rawEvents(); 966 QPtrList<Event> er = calendar->rawEvents();
949 Event* ev = er.first(); 967 Event* ev = er.first();
950 QString message = i18n("Processing event # "); 968 QString message = i18n("Processing event # ");
951 int procCount = 0; 969 int procCount = 0;
952 while ( ev ) { 970 while ( ev ) {
953 //qDebug("i %d ", ++i); 971 //qDebug("i %d ", ++i);
954 if ( ev->tempSyncStat() != SYNC_TEMPSTATE_NEW_EXTERNAL ) { // event was changed during sync or is a new one 972 if ( ev->tempSyncStat() != SYNC_TEMPSTATE_NEW_EXTERNAL ) { // event was changed during sync or is a new one
955 973
956 status.setText ( message + QString::number ( ++procCount ) ); 974 status.setText ( message + QString::number ( ++procCount ) );
957 qApp->processEvents(); 975 qApp->processEvents();
958 event2GSM( ev, &Note ); 976 event2GSM( ev, &Note );
959 if ( ev->tempSyncStat() == SYNC_TEMPSTATE_DELETE ) { // delete 977 if ( ev->tempSyncStat() == SYNC_TEMPSTATE_DELETE ) { // delete
960 error = Phone->DeleteCalendar(&s, &Note); 978 error = Phone->DeleteCalendar(&s, &Note);
961 } 979 }
962 else if ( ev->getID(mProfileName).isEmpty() ) { // add new 980 else if ( ev->getID(mProfileName).isEmpty() ) { // add new
963 // we have to do this later after deleting 981 // we have to do this later after deleting
964 982
965 } 983 }
966 else { // change existing 984 else { // change existing
967 error = Phone->SetCalendar(&s, &Note); 985 error = Phone->SetCalendar(&s, &Note);
968 } 986 }
969 } 987 }
970 ev = er.next(); 988 ev = er.next();
971 } 989 }
972 ev = er.first(); 990 ev = er.first();
973 // pending get empty slots 991 // pending get empty slots
974 while ( ev ) { 992 while ( ev ) {
975 if ( ev->tempSyncStat() != SYNC_TEMPSTATE_NEW_EXTERNAL && ev->tempSyncStat() != SYNC_TEMPSTATE_DELETE) { 993 if ( ev->tempSyncStat() != SYNC_TEMPSTATE_NEW_EXTERNAL && ev->tempSyncStat() != SYNC_TEMPSTATE_DELETE) {
976 if ( ev->getID(mProfileName).isEmpty() ) { 994 if ( ev->getID(mProfileName).isEmpty() ) {
977 status.setText ( message + QString::number ( ++procCount ) ); 995 status.setText ( message + QString::number ( ++procCount ) );
978 qApp->processEvents(); 996 qApp->processEvents();
979 //int newID ;//= pending 997 //int newID ;//= pending
980 //ev->setID(mProfileName, QString::number( newID )); 998 //ev->setID(mProfileName, QString::number( newID ));
981 event2GSM( ev, &Note ); 999 event2GSM( ev, &Note );
982 Note.Location = 0; 1000 Note.Location = 0;
983 error = Phone->AddCalendar(&s, &Note); 1001 error = Phone->AddCalendar(&s, &Note);
984 ev->setID( mProfileName, QString::number( Note.Location ) ); 1002 ev->setID( mProfileName, QString::number( Note.Location ) );
1003 qDebug("New Calendar. Location %d ",Note.Location );
985 afterSave( ev ); 1004 afterSave( ev );
986 } else { 1005 } else {
987 afterSave( ev ); // setting temp sync stat for changed items 1006 afterSave( ev ); // setting temp sync stat for changed items
988 } 1007 }
989 } 1008 }
990 ev = er.next(); 1009 ev = er.next();
991 } 1010 }
992 GSM_ToDoEntry ToDoEntry; 1011 GSM_ToDoEntry ToDoEntry;
993 QPtrList<Todo> tl = calendar->rawTodos(); 1012 QPtrList<Todo> tl = calendar->rawTodos();
994 Todo* to = tl.first(); 1013 Todo* to = tl.first();
995 1014
996 message = i18n("Processing todo # "); 1015 message = i18n("Processing todo # ");
997 procCount = 0; 1016 procCount = 0;
998 while ( to ) { 1017 while ( to ) {
999 if ( to->tempSyncStat() != SYNC_TEMPSTATE_NEW_EXTERNAL ) { 1018 if ( to->tempSyncStat() != SYNC_TEMPSTATE_NEW_EXTERNAL ) {
1000 status.setText ( message + QString::number ( ++procCount ) ); 1019 status.setText ( message + QString::number ( ++procCount ) );
1001 qApp->processEvents(); 1020 qApp->processEvents();
1002 todo2GSM( to, &ToDoEntry ); 1021 todo2GSM( to, &ToDoEntry );
1003 if ( to->tempSyncStat() == SYNC_TEMPSTATE_DELETE ) { // delete 1022 if ( to->tempSyncStat() == SYNC_TEMPSTATE_DELETE ) { // delete
1004 error=Phone->DeleteToDo(&s,&ToDoEntry); 1023 error=Phone->DeleteToDo(&s,&ToDoEntry);
1005 } 1024 }
1006 else if ( to->getID("Sharp_DTM").isEmpty() ) { // add new 1025 else if ( to->getID("Sharp_DTM").isEmpty() ) { // add new
1007 ; 1026 ;
1008 } 1027 }
1009 else { // change existing 1028 else { // change existing
1010 error=Phone->AddToDo(&s,&ToDoEntry); 1029 error=Phone->SetToDo(&s,&ToDoEntry);
1011 } 1030 }
1012 } 1031 }
1013 to = tl.next(); 1032 to = tl.next();
1014 } 1033 }
1015 1034
1016 // pending get empty slots 1035 // pending get empty slots
1017 to = tl.first(); 1036 to = tl.first();
1018 while ( to ) { 1037 while ( to ) {
1019 if ( to->tempSyncStat() != SYNC_TEMPSTATE_NEW_EXTERNAL && to->tempSyncStat() != SYNC_TEMPSTATE_DELETE) { 1038 if ( to->tempSyncStat() != SYNC_TEMPSTATE_NEW_EXTERNAL && to->tempSyncStat() != SYNC_TEMPSTATE_DELETE) {
1020 if ( to->getID(mProfileName).isEmpty() ) { 1039 if ( to->getID(mProfileName).isEmpty() ) {
1021 status.setText ( message + QString::number ( ++procCount ) ); 1040 status.setText ( message + QString::number ( ++procCount ) );
1022 qApp->processEvents(); 1041 qApp->processEvents();
1023 //int newID ;//= pending 1042 //int newID ;//= pending
1024 //to->setID(mProfileName, QString::number( newID )); 1043 //to->setID(mProfileName, QString::number( newID ));
1025 todo2GSM( to, &ToDoEntry ); 1044 todo2GSM( to, &ToDoEntry );
1026 ToDoEntry.Location = 0; 1045 ToDoEntry.Location = 0;
1027 error=Phone->AddToDo(&s,&ToDoEntry); 1046 error=Phone->AddToDo(&s,&ToDoEntry);
1028 to->setID(mProfileName, QString::number( ToDoEntry.Location )); 1047 to->setID(mProfileName, QString::number( ToDoEntry.Location ));
1029 afterSave( to ); 1048 afterSave( to );
1030 qDebug("New Todo. Location %d ",ToDoEntry.Location ); 1049 qDebug("New Todo. Location %d ",ToDoEntry.Location );
1031 } else { 1050 } else {
1032 afterSave( to ); 1051 afterSave( to );
1033 } 1052 }
1034 } 1053 }
1035 to = tl.next(); 1054 to = tl.next();
1036 } 1055 }
1037 return true; 1056 return true;
1038} 1057}
1039QString PhoneFormat::dtToGSM( const QDateTime& dti, bool useTZ ) 1058QString PhoneFormat::dtToGSM( const QDateTime& dti, bool useTZ )
1040{ 1059{
1041 QString datestr; 1060 QString datestr;
1042 QString timestr; 1061 QString timestr;
1043 int offset = KGlobal::locale()->localTimeOffset( dti ); 1062 int offset = KGlobal::locale()->localTimeOffset( dti );
1044 QDateTime dt; 1063 QDateTime dt;
1045 if (useTZ) 1064 if (useTZ)
1046 dt = dti.addSecs ( -(offset*60)); 1065 dt = dti.addSecs ( -(offset*60));
1047 else 1066 else
1048 dt = dti; 1067 dt = dti;
1049 if(dt.date().isValid()){ 1068 if(dt.date().isValid()){
1050 const QDate& date = dt.date(); 1069 const QDate& date = dt.date();
1051 datestr.sprintf("%04d%02d%02d", 1070 datestr.sprintf("%04d%02d%02d",
1052 date.year(), date.month(), date.day()); 1071 date.year(), date.month(), date.day());
1053 } 1072 }
1054 if(dt.time().isValid()){ 1073 if(dt.time().isValid()){
1055 const QTime& time = dt.time(); 1074 const QTime& time = dt.time();
1056 timestr.sprintf("T%02d%02d%02d", 1075 timestr.sprintf("T%02d%02d%02d",
1057 time.hour(), time.minute(), time.second()); 1076 time.hour(), time.minute(), time.second());
1058 } 1077 }
1059 return datestr + timestr; 1078 return datestr + timestr;
1060} 1079}
1061QString PhoneFormat::getEventString( Event* event ) 1080QString PhoneFormat::getEventString( Event* event )
1062{ 1081{
1063#if 0 1082#if 0
1064 QStringList list; 1083 QStringList list;
1065 list.append( QString::number(event->zaurusId() ) ); 1084 list.append( QString::number(event->zaurusId() ) );
1066 list.append( event->categories().join(",") ); 1085 list.append( event->categories().join(",") );
1067 if ( !event->summary().isEmpty() ) 1086 if ( !event->summary().isEmpty() )
1068 list.append( event->summary() ); 1087 list.append( event->summary() );
1069 else 1088 else
1070 list.append("" ); 1089 list.append("" );
1071 if ( !event->location().isEmpty() ) 1090 if ( !event->location().isEmpty() )
1072 list.append( event->location() ); 1091 list.append( event->location() );
1073 else 1092 else
1074 list.append("" ); 1093 list.append("" );
1075 if ( !event->description().isEmpty() ) 1094 if ( !event->description().isEmpty() )
1076 list.append( event->description() ); 1095 list.append( event->description() );
1077 else 1096 else
1078 list.append( "" ); 1097 list.append( "" );
1079 if ( event->doesFloat () ) { 1098 if ( event->doesFloat () ) {
1080 list.append( dtToString( QDateTime(event->dtStart().date(), QTime(0,0,0)), false )); 1099 list.append( dtToString( QDateTime(event->dtStart().date(), QTime(0,0,0)), false ));
1081 list.append( dtToString( QDateTime(event->dtEnd().date(),QTime(23,59,59)), false )); //6 1100 list.append( dtToString( QDateTime(event->dtEnd().date(),QTime(23,59,59)), false )); //6
1082 list.append( "1" ); 1101 list.append( "1" );
1083 1102
1084 } 1103 }
1085 else { 1104 else {
1086 list.append( dtToString( event->dtStart()) ); 1105 list.append( dtToString( event->dtStart()) );
1087 list.append( dtToString( event->dtEnd()) ); //6 1106 list.append( dtToString( event->dtEnd()) ); //6
1088 list.append( "0" ); 1107 list.append( "0" );
1089 } 1108 }
1090 bool noAlarm = true; 1109 bool noAlarm = true;
1091 if ( event->alarms().count() > 0 ) { 1110 if ( event->alarms().count() > 0 ) {
1092 Alarm * al = event->alarms().first(); 1111 Alarm * al = event->alarms().first();
1093 if ( al->enabled() ) { 1112 if ( al->enabled() ) {
1094 noAlarm = false; 1113 noAlarm = false;
1095 list.append( "0" ); // yes, 0 == alarm 1114 list.append( "0" ); // yes, 0 == alarm
1096 list.append( QString::number( al->startOffset().asSeconds()/(-60) ) ); 1115 list.append( QString::number( al->startOffset().asSeconds()/(-60) ) );
1097 if ( al->type() == Alarm::Audio ) 1116 if ( al->type() == Alarm::Audio )
1098 list.append( "1" ); // type audio 1117 list.append( "1" ); // type audio
1099 else 1118 else
1100 list.append( "0" ); // type silent 1119 list.append( "0" ); // type silent
1101 } 1120 }
1102 } 1121 }
1103 if ( noAlarm ) { 1122 if ( noAlarm ) {
1104 list.append( "1" ); // yes, 1 == no alarm 1123 list.append( "1" ); // yes, 1 == no alarm
1105 list.append( "0" ); // no alarm offset 1124 list.append( "0" ); // no alarm offset
1106 list.append( "1" ); // type 1125 list.append( "1" ); // type
1107 } 1126 }
1108 // next is: 11 1127 // next is: 11
1109 // next is: 11-16 are recurrence 1128 // next is: 11-16 are recurrence
1110 Recurrence* rec = event->recurrence(); 1129 Recurrence* rec = event->recurrence();
1111 1130
1112 bool writeEndDate = false; 1131 bool writeEndDate = false;
1113 switch ( rec->doesRecur() ) 1132 switch ( rec->doesRecur() )
1114 { 1133 {
1115 case Recurrence::rDaily: // 0 1134 case Recurrence::rDaily: // 0
1116 list.append( "0" ); 1135 list.append( "0" );
1117 list.append( QString::number( rec->frequency() ));//12 1136 list.append( QString::number( rec->frequency() ));//12
1118 list.append( "0" ); 1137 list.append( "0" );
1119 list.append( "0" ); 1138 list.append( "0" );
1120 writeEndDate = true; 1139 writeEndDate = true;
1121 break; 1140 break;
1122 case Recurrence::rWeekly:// 1 1141 case Recurrence::rWeekly:// 1
1123 list.append( "1" ); 1142 list.append( "1" );
1124 list.append( QString::number( rec->frequency()) );//12 1143 list.append( QString::number( rec->frequency()) );//12
1125 list.append( "0" ); 1144 list.append( "0" );
1126 { 1145 {
1127 int days = 0; 1146 int days = 0;
1128 QBitArray weekDays = rec->days(); 1147 QBitArray weekDays = rec->days();
1129 int i; 1148 int i;
1130 for( i = 1; i <= 7; ++i ) { 1149 for( i = 1; i <= 7; ++i ) {
1131 if ( weekDays[i-1] ) { 1150 if ( weekDays[i-1] ) {
1132 days += 1 << (i-1); 1151 days += 1 << (i-1);
1133 } 1152 }
1134 } 1153 }
1135 list.append( QString::number( days ) ); 1154 list.append( QString::number( days ) );
1136 } 1155 }
1137 //pending weekdays 1156 //pending weekdays
1138 writeEndDate = true; 1157 writeEndDate = true;
1139 1158
1140 break; 1159 break;
1141 case Recurrence::rMonthlyPos:// 2 1160 case Recurrence::rMonthlyPos:// 2
1142 list.append( "2" ); 1161 list.append( "2" );
1143 list.append( QString::number( rec->frequency()) );//12 1162 list.append( QString::number( rec->frequency()) );//12
1144 1163
1145 writeEndDate = true; 1164 writeEndDate = true;
1146 { 1165 {
1147 int count = 1; 1166 int count = 1;
1148 QPtrList<Recurrence::rMonthPos> rmp; 1167 QPtrList<Recurrence::rMonthPos> rmp;
1149 rmp = rec->monthPositions(); 1168 rmp = rec->monthPositions();
1150 if ( rmp.first()->negative ) 1169 if ( rmp.first()->negative )
1151 count = 5 - rmp.first()->rPos - 1; 1170 count = 5 - rmp.first()->rPos - 1;
1152 else 1171 else
1153 count = rmp.first()->rPos - 1; 1172 count = rmp.first()->rPos - 1;
1154 list.append( QString::number( count ) ); 1173 list.append( QString::number( count ) );
1155 1174
1156 } 1175 }
1157 1176
1158 list.append( "0" ); 1177 list.append( "0" );
1159 break; 1178 break;
1160 case Recurrence::rMonthlyDay:// 3 1179 case Recurrence::rMonthlyDay:// 3
1161 list.append( "3" ); 1180 list.append( "3" );
1162 list.append( QString::number( rec->frequency()) );//12 1181 list.append( QString::number( rec->frequency()) );//12
1163 list.append( "0" ); 1182 list.append( "0" );
1164 list.append( "0" ); 1183 list.append( "0" );
1165 writeEndDate = true; 1184 writeEndDate = true;
1166 break; 1185 break;
1167 case Recurrence::rYearlyMonth://4 1186 case Recurrence::rYearlyMonth://4
1168 list.append( "4" ); 1187 list.append( "4" );
1169 list.append( QString::number( rec->frequency()) );//12 1188 list.append( QString::number( rec->frequency()) );//12
1170 list.append( "0" ); 1189 list.append( "0" );
1171 list.append( "0" ); 1190 list.append( "0" );
1172 writeEndDate = true; 1191 writeEndDate = true;
1173 break; 1192 break;
1174 1193
1175 default: 1194 default:
1176 list.append( "255" ); 1195 list.append( "255" );
1177 list.append( QString() ); 1196 list.append( QString() );
1178 list.append( "0" ); 1197 list.append( "0" );
1179 list.append( QString() ); 1198 list.append( QString() );
1180 list.append( "0" ); 1199 list.append( "0" );
1181 list.append( "20991231T000000" ); 1200 list.append( "20991231T000000" );
1182 break; 1201 break;
1183 } 1202 }
1184 if ( writeEndDate ) { 1203 if ( writeEndDate ) {
1185 1204
1186 if ( rec->endDate().isValid() ) { // 15 + 16 1205 if ( rec->endDate().isValid() ) { // 15 + 16
1187 list.append( "1" ); 1206 list.append( "1" );
1188 list.append( dtToString( rec->endDate()) ); 1207 list.append( dtToString( rec->endDate()) );
1189 } else { 1208 } else {
1190 list.append( "0" ); 1209 list.append( "0" );
1191 list.append( "20991231T000000" ); 1210 list.append( "20991231T000000" );
1192 } 1211 }
1193 1212
1194 } 1213 }
1195 if ( event->doesFloat () ) { 1214 if ( event->doesFloat () ) {
1196 list.append( dtToString( event->dtStart(), false ).left( 8 )); 1215 list.append( dtToString( event->dtStart(), false ).left( 8 ));
1197 list.append( dtToString( event->dtEnd(), false ).left( 8 )); //6 1216 list.append( dtToString( event->dtEnd(), false ).left( 8 )); //6
1198 1217
1199 } 1218 }
1200 else { 1219 else {
1201 list.append( QString() ); 1220 list.append( QString() );
1202 list.append( QString() ); 1221 list.append( QString() );
1203 1222
1204 } 1223 }
1205 if (event->dtStart().date() == event->dtEnd().date() ) 1224 if (event->dtStart().date() == event->dtEnd().date() )
1206 list.append( "0" ); 1225 list.append( "0" );
1207 else 1226 else
1208 list.append( "1" ); 1227 list.append( "1" );
1209 1228
1210 1229
1211 for(QStringList::Iterator it=list.begin(); 1230 for(QStringList::Iterator it=list.begin();
1212 it!=list.end(); ++it){ 1231 it!=list.end(); ++it){
1213 QString& s = (*it); 1232 QString& s = (*it);
1214 s.replace(QRegExp("\""), "\"\""); 1233 s.replace(QRegExp("\""), "\"\"");
1215 if(s.contains(QRegExp("[,\"\r\n]")) || s.stripWhiteSpace() != s){ 1234 if(s.contains(QRegExp("[,\"\r\n]")) || s.stripWhiteSpace() != s){
1216 s.prepend('\"'); 1235 s.prepend('\"');
1217 s.append('\"'); 1236 s.append('\"');
1218 } else if(s.isEmpty() && !s.isNull()){ 1237 } else if(s.isEmpty() && !s.isNull()){
1219 s = "\"\""; 1238 s = "\"\"";
1220 } 1239 }
1221 } 1240 }
1222 return list.join(","); 1241 return list.join(",");
1223#endif 1242#endif
1224 return QString(); 1243 return QString();
1225 1244
1226} 1245}
1227QString PhoneFormat::getTodoString( Todo* todo ) 1246QString PhoneFormat::getTodoString( Todo* todo )
1228{ 1247{
1229#if 0 1248#if 0
1230 QStringList list; 1249 QStringList list;
1231 list.append( QString::number( todo->zaurusId() ) ); 1250 list.append( QString::number( todo->zaurusId() ) );
1232 list.append( todo->categories().join(",") ); 1251 list.append( todo->categories().join(",") );
1233 1252
1234 if ( todo->hasStartDate() ) { 1253 if ( todo->hasStartDate() ) {
1235 list.append( dtToString( todo->dtStart()) ); 1254 list.append( dtToString( todo->dtStart()) );
1236 } else 1255 } else
1237 list.append( QString() ); 1256 list.append( QString() );
1238 1257
1239 if ( todo->hasDueDate() ) { 1258 if ( todo->hasDueDate() ) {
1240 QTime tim; 1259 QTime tim;
1241 if ( todo->doesFloat()) { 1260 if ( todo->doesFloat()) {
1242 list.append( dtToString( QDateTime(todo->dtDue().date(),QTime( 0,0,0 )), false)) ; 1261 list.append( dtToString( QDateTime(todo->dtDue().date(),QTime( 0,0,0 )), false)) ;
1243 } else { 1262 } else {
1244 list.append( dtToString(todo->dtDue() ) ); 1263 list.append( dtToString(todo->dtDue() ) );
1245 } 1264 }
1246 } else 1265 } else
1247 list.append( QString() ); 1266 list.append( QString() );
1248 1267
1249 if ( todo->isCompleted() ) { 1268 if ( todo->isCompleted() ) {
1250 list.append( dtToString( todo->completed()) ); 1269 list.append( dtToString( todo->completed()) );
1251 list.append( "0" ); // yes 0 == completed 1270 list.append( "0" ); // yes 0 == completed
1252 } else { 1271 } else {
1253 list.append( dtToString( todo->completed()) ); 1272 list.append( dtToString( todo->completed()) );
1254 list.append( "1" ); 1273 list.append( "1" );
1255 } 1274 }
1256 list.append( QString::number( todo->priority() )); 1275 list.append( QString::number( todo->priority() ));
1257 if( ! todo->summary().isEmpty() ) 1276 if( ! todo->summary().isEmpty() )
1258 list.append( todo->summary() ); 1277 list.append( todo->summary() );
1259 else 1278 else
1260 list.append( "" ); 1279 list.append( "" );
1261 if (! todo->description().isEmpty() ) 1280 if (! todo->description().isEmpty() )
1262 list.append( todo->description() ); 1281 list.append( todo->description() );
1263 else 1282 else
1264 list.append( "" ); 1283 list.append( "" );
1265 for(QStringList::Iterator it=list.begin(); 1284 for(QStringList::Iterator it=list.begin();
1266 it!=list.end(); ++it){ 1285 it!=list.end(); ++it){
1267 QString& s = (*it); 1286 QString& s = (*it);
1268 s.replace(QRegExp("\""), "\"\""); 1287 s.replace(QRegExp("\""), "\"\"");
1269 if(s.contains(QRegExp("[,\"\r\n]")) || s.stripWhiteSpace() != s){ 1288 if(s.contains(QRegExp("[,\"\r\n]")) || s.stripWhiteSpace() != s){
1270 s.prepend('\"'); 1289 s.prepend('\"');
1271 s.append('\"'); 1290 s.append('\"');
1272 } else if(s.isEmpty() && !s.isNull()){ 1291 } else if(s.isEmpty() && !s.isNull()){
1273 s = "\"\""; 1292 s = "\"\"";
1274 } 1293 }
1275 } 1294 }
1276 return list.join(","); 1295 return list.join(",");
1277#endif 1296#endif
1278 return QString(); 1297 return QString();
1279} 1298}
1280 1299
1281 1300
1282QString PhoneFormat::toString( Calendar * ) 1301QString PhoneFormat::toString( Calendar * )
1283{ 1302{
1284 return QString::null; 1303 return QString::null;
1285} 1304}
1286bool PhoneFormat::fromString( Calendar *calendar, const QString & text) 1305bool PhoneFormat::fromString( Calendar *calendar, const QString & text)
1287{ 1306{
1288 return false; 1307 return false;
1289} 1308}