-rw-r--r-- | libkcal/phoneformat.cpp | 25 |
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 | |||
@@ -645,494 +645,513 @@ ulong PhoneFormat::getCsumEvent( Event* event ) | |||
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 | } |
740 | ulong PhoneFormat::getCsum( const QStringList & attList) | 740 | ulong 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 |
766 | bool PhoneFormat::load( Calendar *calendar, Calendar *existingCal) | 766 | bool 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,¬e,start); | 845 | error=Phone->GetNextCalendar(&s,¬e,start); |
832 | if (error == ERR_EMPTY) break; | 846 | if (error == ERR_EMPTY) break; |
833 | start = false; | 847 | start = false; |
834 | handler.readEvent( existingCal, ¬e ); | 848 | handler.readEvent( existingCal, ¬e ); |
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 | } |
853 | void PhoneFormat::event2GSM( Event* ev, GSM_CalendarEntry*Note ) | 871 | void PhoneFormat::event2GSM( Event* ev, GSM_CalendarEntry*Note ) |
854 | { | 872 | { |
855 | 873 | ||
856 | } | 874 | } |
857 | void PhoneFormat::todo2GSM( Todo* todo, GSM_ToDoEntry *gsm ) | 875 | void 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 | } |
909 | void PhoneFormat::afterSave( Incidence* inc) | 927 | void 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 | } |
920 | bool PhoneFormat::save( Calendar *calendar) | 938 | bool 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 | } |
1039 | QString PhoneFormat::dtToGSM( const QDateTime& dti, bool useTZ ) | 1058 | QString 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 | } |
1061 | QString PhoneFormat::getEventString( Event* event ) | 1080 | QString 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; |