-rw-r--r-- | libkcal/phoneformat.cpp | 68 | ||||
-rw-r--r-- | libkcal/phoneformat.h | 2 |
2 files changed, 44 insertions, 26 deletions
diff --git a/libkcal/phoneformat.cpp b/libkcal/phoneformat.cpp index 29c1ae6..b2a62b1 100644 --- a/libkcal/phoneformat.cpp +++ b/libkcal/phoneformat.cpp | |||
@@ -63,50 +63,61 @@ public: | |||
63 | dt = dti.addSecs ( -(offset*60)); | 63 | dt = dti.addSecs ( -(offset*60)); |
64 | else | 64 | else |
65 | dt = dti; | 65 | dt = dti; |
66 | if(dt.date().isValid()){ | 66 | if(dt.date().isValid()){ |
67 | const QDate& date = dt.date(); | 67 | const QDate& date = dt.date(); |
68 | datestr.sprintf("%04d%02d%02d", | 68 | datestr.sprintf("%04d%02d%02d", |
69 | date.year(), date.month(), date.day()); | 69 | date.year(), date.month(), date.day()); |
70 | } | 70 | } |
71 | if(dt.time().isValid()){ | 71 | if(dt.time().isValid()){ |
72 | const QTime& time = dt.time(); | 72 | const QTime& time = dt.time(); |
73 | timestr.sprintf("T%02d%02d%02d", | 73 | timestr.sprintf("T%02d%02d%02d", |
74 | time.hour(), time.minute(), time.second()); | 74 | time.hour(), time.minute(), time.second()); |
75 | } | 75 | } |
76 | return datestr + timestr; | 76 | return datestr + timestr; |
77 | } | 77 | } |
78 | 78 | ||
79 | 79 | ||
80 | }; | 80 | }; |
81 | 81 | ||
82 | 82 | ||
83 | 83 | ||
84 | PhoneFormat::PhoneFormat(QString profileName, QString device,QString connection, QString model ) | 84 | PhoneFormat::PhoneFormat(QString profileName, QString device,QString connection, QString model ) |
85 | { | 85 | { |
86 | mProfileName = profileName; | 86 | mProfileName = profileName; |
87 | 87 | writeConfig( device, connection, model ); | |
88 | } | ||
89 | |||
90 | PhoneFormat::~PhoneFormat() | ||
91 | { | ||
92 | } | ||
93 | void PhoneFormat::writeConfig( QString device, QString connection, QString model ) | ||
94 | { | ||
95 | #ifdef _WIN32_ | ||
96 | QString fileName = qApp->applicationDirPath () +"\\gammurc"; | ||
97 | #else | ||
88 | QString fileName = QDir::homeDirPath() +"/.gammurc"; | 98 | QString fileName = QDir::homeDirPath() +"/.gammurc"; |
99 | #endif | ||
89 | //qDebug("save %d ", load ); | 100 | //qDebug("save %d ", load ); |
90 | QString content; | 101 | QString content; |
91 | bool write = false; | 102 | bool write = false; |
92 | bool addPort = true, addConnection = true, addModel = true; | 103 | bool addPort = true, addConnection = true, addModel = true; |
93 | QFile file( fileName ); | 104 | QFile file( fileName ); |
94 | if ( QFile::exists( fileName) ) { | 105 | if ( QFile::exists( fileName) ) { |
95 | if (!file.open( IO_ReadOnly ) ) { | 106 | if (!file.open( IO_ReadOnly ) ) { |
96 | qDebug("Error: cannot open %s ", fileName.latin1() ); | 107 | qDebug("Error: cannot open %s ", fileName.latin1() ); |
97 | return; | 108 | return; |
98 | } | 109 | } |
99 | QString line; | 110 | QString line; |
100 | while ( file.readLine( line, 1024 ) > 0 ) { | 111 | while ( file.readLine( line, 1024 ) > 0 ) { |
101 | //qDebug("*%s* ", line.latin1() ); | 112 | //qDebug("*%s* ", line.latin1() ); |
102 | if ( line.left(7 ) == "[gammu]" ) { | 113 | if ( line.left(7 ) == "[gammu]" ) { |
103 | ; | 114 | ; |
104 | } else | 115 | } else |
105 | if ( line.left(4 ) == "port" ) { | 116 | if ( line.left(4 ) == "port" ) { |
106 | if ( line == "port = " + device+"\n" ) { | 117 | if ( line == "port = " + device+"\n" ) { |
107 | content += line ; | 118 | content += line ; |
108 | addPort = false; | 119 | addPort = false; |
109 | //qDebug("port found" ); | 120 | //qDebug("port found" ); |
110 | } | 121 | } |
111 | 122 | ||
112 | } else if ( line.left(5 ) == "model" ) { | 123 | } else if ( line.left(5 ) == "model" ) { |
@@ -155,52 +166,49 @@ PhoneFormat::PhoneFormat(QString profileName, QString device,QString connection, | |||
155 | write = true; | 166 | write = true; |
156 | content += "port = "; | 167 | content += "port = "; |
157 | content += device; | 168 | content += device; |
158 | content += "\n"; | 169 | content += "\n"; |
159 | 170 | ||
160 | } | 171 | } |
161 | if ( addModel ) { | 172 | if ( addModel ) { |
162 | if ( ! write ) | 173 | if ( ! write ) |
163 | content += "[gammu]\n"; | 174 | content += "[gammu]\n"; |
164 | write = true; | 175 | write = true; |
165 | content += "model = "; | 176 | content += "model = "; |
166 | content += model; | 177 | content += model; |
167 | content += "\n"; | 178 | content += "\n"; |
168 | } | 179 | } |
169 | if ( write ) { | 180 | if ( write ) { |
170 | if (!file.open( IO_WriteOnly ) ) { | 181 | if (!file.open( IO_WriteOnly ) ) { |
171 | qDebug("Error: cannot write file %s ", fileName.latin1() ); | 182 | qDebug("Error: cannot write file %s ", fileName.latin1() ); |
172 | return; | 183 | return; |
173 | } | 184 | } |
174 | qDebug("Writing file %s ", fileName.latin1() ); | 185 | qDebug("Writing file %s ", fileName.latin1() ); |
175 | QTextStream ts( &file ); | 186 | QTextStream ts( &file ); |
176 | ts << content ; | 187 | ts << content ; |
177 | file.close(); | 188 | file.close(); |
178 | } | 189 | } |
179 | } | ||
180 | 190 | ||
181 | PhoneFormat::~PhoneFormat() | ||
182 | { | ||
183 | } | 191 | } |
184 | #if 0 | 192 | #if 0 |
185 | int PhoneFormat::initDevice(GSM_StateMachine *s) | 193 | int PhoneFormat::initDevice(GSM_StateMachine *s) |
186 | { | 194 | { |
187 | GSM_ReadConfig(NULL, &s->Config[0], 0); | 195 | GSM_ReadConfig(NULL, &s->Config[0], 0); |
188 | s->ConfigNum = 1; | 196 | s->ConfigNum = 1; |
189 | GSM_Config *cfg = &s->Config[0]; | 197 | GSM_Config *cfg = &s->Config[0]; |
190 | if ( ! mConnection.isEmpty() ) { | 198 | if ( ! mConnection.isEmpty() ) { |
191 | cfg->Connection = strdup(mConnection.latin1()); | 199 | cfg->Connection = strdup(mConnection.latin1()); |
192 | cfg->DefaultConnection = false; | 200 | cfg->DefaultConnection = false; |
193 | qDebug("Connection set %s ", cfg->Connection ); | 201 | qDebug("Connection set %s ", cfg->Connection ); |
194 | 202 | ||
195 | } | 203 | } |
196 | if ( ! mDevice.isEmpty() ) { | 204 | if ( ! mDevice.isEmpty() ) { |
197 | cfg->Device = strdup(mDevice.latin1()); | 205 | cfg->Device = strdup(mDevice.latin1()); |
198 | cfg->DefaultDevice = false; | 206 | cfg->DefaultDevice = false; |
199 | qDebug("Device set %s ", cfg->Device); | 207 | qDebug("Device set %s ", cfg->Device); |
200 | 208 | ||
201 | } | 209 | } |
202 | if ( ! mModel.isEmpty() ) { | 210 | if ( ! mModel.isEmpty() ) { |
203 | strcpy(cfg->Model,mModel.latin1() ); | 211 | strcpy(cfg->Model,mModel.latin1() ); |
204 | cfg->DefaultModel = false; | 212 | cfg->DefaultModel = false; |
205 | qDebug("Model set %s ",cfg->Model ); | 213 | qDebug("Model set %s ",cfg->Model ); |
206 | } | 214 | } |
@@ -548,111 +556,119 @@ void PhoneFormat::copyTodo( Todo* to, Todo* from ) | |||
548 | } | 556 | } |
549 | if( to->priority() == 2 && from->priority() == 1 ) | 557 | if( to->priority() == 2 && from->priority() == 1 ) |
550 | ; //skip | 558 | ; //skip |
551 | else if (to->priority() == 4 && from->priority() == 5 ) | 559 | else if (to->priority() == 4 && from->priority() == 5 ) |
552 | ; | 560 | ; |
553 | else | 561 | else |
554 | to->setPriority(from->priority()); | 562 | to->setPriority(from->priority()); |
555 | 563 | ||
556 | } | 564 | } |
557 | #include <qcstring.h> | 565 | #include <qcstring.h> |
558 | 566 | ||
559 | void PhoneFormat::afterSave( Incidence* inc) | 567 | void PhoneFormat::afterSave( Incidence* inc) |
560 | { | 568 | { |
561 | uint csum; | 569 | uint csum; |
562 | inc->removeID( mProfileName ); | 570 | inc->removeID( mProfileName ); |
563 | if ( inc->type() == "Event") | 571 | if ( inc->type() == "Event") |
564 | csum = PhoneFormat::getCsumEvent( (Event*) inc ); | 572 | csum = PhoneFormat::getCsumEvent( (Event*) inc ); |
565 | else | 573 | else |
566 | csum = PhoneFormat::getCsumTodo( (Todo*) inc ); | 574 | csum = PhoneFormat::getCsumTodo( (Todo*) inc ); |
567 | inc->setCsum( mProfileName, QString::number( csum )); | 575 | inc->setCsum( mProfileName, QString::number( csum )); |
568 | 576 | ||
569 | inc->setTempSyncStat( SYNC_TEMPSTATE_NEW_ID ); | 577 | inc->setTempSyncStat( SYNC_TEMPSTATE_NEW_ID ); |
570 | 578 | ||
571 | } | 579 | } |
580 | |||
581 | bool PhoneFormat::writeToPhone( Calendar * calendar) | ||
582 | { | ||
583 | #ifdef _WIN32_ | ||
584 | QString fileName = locateLocal("tmp", "tempfile.vcs"); | ||
585 | #else | ||
586 | QString fileName = "/tmp/kdepimtemp.vcs"; | ||
587 | #endif | ||
588 | |||
589 | VCalFormat vfsave; | ||
590 | vfsave.setLocalTime ( true ); | ||
591 | if ( ! vfsave.save( calendar, fileName ) ) | ||
592 | return false; | ||
593 | // 4 call kammu | ||
594 | #ifdef DESKTOP_VERSION | ||
595 | QString command ="./kammu --restore " + fileName ; | ||
596 | #else | ||
597 | QString command ="kammu --restore " + fileName ; | ||
598 | #endif | ||
599 | int ret; | ||
600 | while ( (ret = system ( command.latin1())) != 0 ) { | ||
601 | qDebug("Error S::command returned %d. asking users", ret); | ||
602 | int retval = KMessageBox::warningContinueCancel(0, | ||
603 | i18n("Error accessing device!\nPlease turn on connection\nand retry!"),i18n("KO/Pi phone access"),i18n("Retry"),i18n("Cancel")); | ||
604 | if ( retval != KMessageBox::Continue ) | ||
605 | return false; | ||
606 | } | ||
607 | return true; | ||
608 | } | ||
572 | bool PhoneFormat::save( Calendar *calendar) | 609 | bool PhoneFormat::save( Calendar *calendar) |
573 | { | 610 | { |
574 | QLabel status ( i18n(" Opening device ..."), 0 ); | 611 | QLabel status ( i18n(" Opening device ..."), 0 ); |
575 | int w = status.sizeHint().width()+20 ; | 612 | int w = status.sizeHint().width()+20 ; |
576 | if ( w < 200 ) w = 230; | 613 | if ( w < 200 ) w = 230; |
577 | int h = status.sizeHint().height()+20 ; | 614 | int h = status.sizeHint().height()+20 ; |
578 | int dw = QApplication::desktop()->width(); | 615 | int dw = QApplication::desktop()->width(); |
579 | int dh = QApplication::desktop()->height(); | 616 | int dh = QApplication::desktop()->height(); |
580 | status.setCaption(i18n("Writing to phone...") ); | 617 | status.setCaption(i18n("Writing to phone...") ); |
581 | status.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); | 618 | status.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); |
582 | status.show(); | 619 | status.show(); |
583 | status.raise(); | 620 | status.raise(); |
584 | qApp->processEvents(); | 621 | qApp->processEvents(); |
585 | QString message; | 622 | QString message; |
586 | #ifdef _WIN32_ | ||
587 | QString fileName = locateLocal("tmp", "tempfile.vcs"); | ||
588 | #else | ||
589 | QString fileName = "/tmp/kdepimtemp.vcs"; | ||
590 | #endif | ||
591 | 623 | ||
592 | // 1 remove events which should be deleted | 624 | // 1 remove events which should be deleted |
593 | QPtrList<Event> er = calendar->rawEvents(); | 625 | QPtrList<Event> er = calendar->rawEvents(); |
594 | Event* ev = er.first(); | 626 | Event* ev = er.first(); |
595 | while ( ev ) { | 627 | while ( ev ) { |
596 | if ( ev->tempSyncStat() == SYNC_TEMPSTATE_DELETE ) { | 628 | if ( ev->tempSyncStat() == SYNC_TEMPSTATE_DELETE ) { |
597 | calendar->deleteEvent( ev ); | 629 | calendar->deleteEvent( ev ); |
598 | } else { | 630 | } else { |
599 | 631 | ||
600 | } | 632 | } |
601 | ev = er.next(); | 633 | ev = er.next(); |
602 | } | 634 | } |
603 | // 2 remove todos which should be deleted | 635 | // 2 remove todos which should be deleted |
604 | QPtrList<Todo> tl = calendar->rawTodos(); | 636 | QPtrList<Todo> tl = calendar->rawTodos(); |
605 | Todo* to = tl.first(); | 637 | Todo* to = tl.first(); |
606 | while ( to ) { | 638 | while ( to ) { |
607 | if ( to->tempSyncStat() == SYNC_TEMPSTATE_DELETE ) { | 639 | if ( to->tempSyncStat() == SYNC_TEMPSTATE_DELETE ) { |
608 | calendar->deleteTodo( to ); | 640 | calendar->deleteTodo( to ); |
609 | } else { | 641 | } else { |
610 | if ( to->isCompleted()) { | 642 | if ( to->isCompleted()) { |
611 | calendar->deleteTodo( to ); | 643 | calendar->deleteTodo( to ); |
612 | } | 644 | } |
613 | } | 645 | } |
614 | to = tl.next(); | 646 | to = tl.next(); |
615 | } | 647 | } |
616 | // 3 save file | 648 | // 3 save file |
617 | VCalFormat vfsave; | 649 | if ( !writeToPhone( calendar ) ) |
618 | vfsave.setLocalTime ( true ); | ||
619 | if ( ! vfsave.save( calendar, fileName ) ) | ||
620 | return false; | 650 | return false; |
621 | // 4 call kammu | ||
622 | #ifdef DESKTOP_VERSION | ||
623 | QString command ="./kammu --restore " + fileName ; | ||
624 | #else | ||
625 | QString command ="kammu --restore " + fileName ; | ||
626 | #endif | ||
627 | int ret; | ||
628 | while ( (ret = system ( command.latin1())) != 0 ) { | ||
629 | qDebug("Error S::command returned %d. asking users", ret); | ||
630 | int retval = KMessageBox::warningContinueCancel(0, | ||
631 | i18n("Error accessing device!\nPlease turn on connection\nand retry!"),i18n("KO/Pi phone sync"),i18n("Retry"),i18n("Cancel")); | ||
632 | if ( retval != KMessageBox::Continue ) | ||
633 | return false; | ||
634 | } | ||
635 | 651 | ||
636 | // 5 reread data | 652 | // 5 reread data |
637 | message = i18n(" Rereading all data ... "); | 653 | message = i18n(" Rereading all data ... "); |
638 | status.setText ( message ); | 654 | status.setText ( message ); |
639 | qApp->processEvents(); | 655 | qApp->processEvents(); |
640 | CalendarLocal* calendarTemp = new CalendarLocal(); | 656 | CalendarLocal* calendarTemp = new CalendarLocal(); |
641 | calendarTemp->setTimeZoneId( calendar->timeZoneId()); | 657 | calendarTemp->setTimeZoneId( calendar->timeZoneId()); |
642 | if ( ! load( calendarTemp,calendar) ){ | 658 | if ( ! load( calendarTemp,calendar) ){ |
643 | qDebug("error reloading calendar "); | 659 | qDebug("error reloading calendar "); |
644 | delete calendarTemp; | 660 | delete calendarTemp; |
645 | return false; | 661 | return false; |
646 | } | 662 | } |
647 | // 6 compare data | 663 | // 6 compare data |
648 | 664 | ||
649 | //algo 6 compare event | 665 | //algo 6 compare event |
650 | er = calendar->rawEvents(); | 666 | er = calendar->rawEvents(); |
651 | ev = er.first(); | 667 | ev = er.first(); |
652 | message = i18n(" Comparing event # "); | 668 | message = i18n(" Comparing event # "); |
653 | QPtrList<Event> er1 = calendarTemp->rawEvents(); | 669 | QPtrList<Event> er1 = calendarTemp->rawEvents(); |
654 | Event* ev1; | 670 | Event* ev1; |
655 | int procCount = 0; | 671 | int procCount = 0; |
656 | while ( ev ) { | 672 | while ( ev ) { |
657 | //qDebug("event new ID %s",ev->summary().latin1()); | 673 | //qDebug("event new ID %s",ev->summary().latin1()); |
658 | status.setText ( message + QString::number ( ++procCount ) ); | 674 | status.setText ( message + QString::number ( ++procCount ) ); |
diff --git a/libkcal/phoneformat.h b/libkcal/phoneformat.h index 2d1ff79..61e8160 100644 --- a/libkcal/phoneformat.h +++ b/libkcal/phoneformat.h | |||
@@ -27,35 +27,37 @@ | |||
27 | 27 | ||
28 | #include "vcalformat.h" | 28 | #include "vcalformat.h" |
29 | #include "calformat.h" | 29 | #include "calformat.h" |
30 | 30 | ||
31 | namespace KCal { | 31 | namespace KCal { |
32 | 32 | ||
33 | /** | 33 | /** |
34 | This class implements the calendar format used by Phone. | 34 | This class implements the calendar format used by Phone. |
35 | */ | 35 | */ |
36 | class Event; | 36 | class Event; |
37 | class Todo; | 37 | class Todo; |
38 | class PhoneFormat : public QObject { | 38 | class PhoneFormat : public QObject { |
39 | public: | 39 | public: |
40 | /** Create new iCalendar format. */ | 40 | /** Create new iCalendar format. */ |
41 | PhoneFormat(QString profileName, QString device,QString connection, QString model); | 41 | PhoneFormat(QString profileName, QString device,QString connection, QString model); |
42 | virtual ~PhoneFormat(); | 42 | virtual ~PhoneFormat(); |
43 | 43 | ||
44 | bool load( Calendar * ,Calendar * ); | 44 | bool load( Calendar * ,Calendar * ); |
45 | bool save( Calendar * ); | 45 | bool save( Calendar * ); |
46 | bool fromString( Calendar *, const QString & ); | 46 | bool fromString( Calendar *, const QString & ); |
47 | QString toString( Calendar * ); | 47 | QString toString( Calendar * ); |
48 | static ulong getCsum( const QStringList & ); | 48 | static ulong getCsum( const QStringList & ); |
49 | static ulong getCsumTodo( Todo* to ); | 49 | static ulong getCsumTodo( Todo* to ); |
50 | static ulong getCsumEvent( Event* ev ); | 50 | static ulong getCsumEvent( Event* ev ); |
51 | static void writeConfig( QString device,QString connection, QString model ); | ||
52 | static bool writeToPhone( Calendar * ); | ||
51 | private: | 53 | private: |
52 | void copyEvent( Event* to, Event* from ); | 54 | void copyEvent( Event* to, Event* from ); |
53 | void copyTodo( Todo* to, Todo* from ); | 55 | void copyTodo( Todo* to, Todo* from ); |
54 | //int initDevice(GSM_StateMachine *s); | 56 | //int initDevice(GSM_StateMachine *s); |
55 | QString mProfileName; | 57 | QString mProfileName; |
56 | void afterSave( Incidence* ); | 58 | void afterSave( Incidence* ); |
57 | }; | 59 | }; |
58 | 60 | ||
59 | } | 61 | } |
60 | 62 | ||
61 | #endif | 63 | #endif |