summaryrefslogtreecommitdiffabout
authorzautrix <zautrix>2004-08-10 19:41:31 (UTC)
committer zautrix <zautrix>2004-08-10 19:41:31 (UTC)
commit2f1b58e344b882578977dd3786f7a94495096d22 (patch) (unidiff)
tree6658bef546b6feac1688aa465ca94344e15704d7
parent467e50111dfd6d66aca205501b6bf369b7f0a166 (diff)
downloadkdepimpi-2f1b58e344b882578977dd3786f7a94495096d22.zip
kdepimpi-2f1b58e344b882578977dd3786f7a94495096d22.tar.gz
kdepimpi-2f1b58e344b882578977dd3786f7a94495096d22.tar.bz2
More syncing stuff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libkcal/calendar.cpp15
-rw-r--r--libkcal/calendar.h1
-rw-r--r--libkcal/incidencebase.cpp3
-rw-r--r--libkcal/phoneformat.cpp227
-rw-r--r--libkcal/phoneformat.h4
-rw-r--r--libkcal/vcalformat.cpp7
-rw-r--r--libkcal/vcalformat.h4
7 files changed, 221 insertions, 40 deletions
diff --git a/libkcal/calendar.cpp b/libkcal/calendar.cpp
index 32aac7a..a3977d7 100644
--- a/libkcal/calendar.cpp
+++ b/libkcal/calendar.cpp
@@ -21,24 +21,25 @@
21 21
22#include <stdlib.h> 22#include <stdlib.h>
23#include <time.h> 23#include <time.h>
24 24
25#include <kdebug.h> 25#include <kdebug.h>
26#include <kglobal.h> 26#include <kglobal.h>
27#include <klocale.h> 27#include <klocale.h>
28 28
29#include "exceptions.h" 29#include "exceptions.h"
30#include "calfilter.h" 30#include "calfilter.h"
31 31
32#include "calendar.h" 32#include "calendar.h"
33#include "syncdefines.h"
33 34
34using namespace KCal; 35using namespace KCal;
35 36
36Calendar::Calendar() 37Calendar::Calendar()
37{ 38{
38 39
39 init(); 40 init();
40 setTimeZoneId( i18n (" 00:00 Europe/London(UTC)") ); 41 setTimeZoneId( i18n (" 00:00 Europe/London(UTC)") );
41} 42}
42 43
43Calendar::Calendar( const QString &timeZoneId ) 44Calendar::Calendar( const QString &timeZoneId )
44{ 45{
@@ -238,25 +239,39 @@ QPtrList<Incidence> Calendar::incidences()
238 239
239 QPtrList<Event> e = events(); 240 QPtrList<Event> e = events();
240 for( i = e.first(); i; i = e.next() ) incidences.append( i ); 241 for( i = e.first(); i; i = e.next() ) incidences.append( i );
241 242
242 QPtrList<Todo> t = todos(); 243 QPtrList<Todo> t = todos();
243 for( i = t.first(); i; i = t.next() ) incidences.append( i ); 244 for( i = t.first(); i; i = t.next() ) incidences.append( i );
244 245
245 QPtrList<Journal> j = journals(); 246 QPtrList<Journal> j = journals();
246 for( i = j.first(); i; i = j.next() ) incidences.append( i ); 247 for( i = j.first(); i; i = j.next() ) incidences.append( i );
247 248
248 return incidences; 249 return incidences;
249} 250}
251void Calendar::resetTempSyncStat()
252{
253 QPtrList<Incidence> incidences;
254
255 Incidence *i;
256
257 QPtrList<Event> e = rawEvents();
258 for( i = e.first(); i; i = e.next() ) i->setTempSyncStat( SYNC_TEMPSTATE_INITIAL );
250 259
260 QPtrList<Todo> t = rawTodos();
261 for( i = t.first(); i; i = t.next() ) i->setTempSyncStat( SYNC_TEMPSTATE_INITIAL );
262
263 QPtrList<Journal> j = journals();
264 for( i = j.first(); i; i = j.next() ) i->setTempSyncStat( SYNC_TEMPSTATE_INITIAL );
265}
251QPtrList<Incidence> Calendar::rawIncidences() 266QPtrList<Incidence> Calendar::rawIncidences()
252{ 267{
253 QPtrList<Incidence> incidences; 268 QPtrList<Incidence> incidences;
254 269
255 Incidence *i; 270 Incidence *i;
256 271
257 QPtrList<Event> e = rawEvents(); 272 QPtrList<Event> e = rawEvents();
258 for( i = e.first(); i; i = e.next() ) incidences.append( i ); 273 for( i = e.first(); i; i = e.next() ) incidences.append( i );
259 274
260 QPtrList<Todo> t = rawTodos(); 275 QPtrList<Todo> t = rawTodos();
261 for( i = t.first(); i; i = t.next() ) incidences.append( i ); 276 for( i = t.first(); i; i = t.next() ) incidences.append( i );
262 277
diff --git a/libkcal/calendar.h b/libkcal/calendar.h
index 4a3223c..06a911c 100644
--- a/libkcal/calendar.h
+++ b/libkcal/calendar.h
@@ -57,24 +57,25 @@ class CalFilter;
57 visible in the Calendar. You shouldn't delete any Event object you get from 57 visible in the Calendar. You shouldn't delete any Event object you get from
58 Calendar. 58 Calendar.
59*/ 59*/
60class Calendar : public QObject, public CustomProperties, 60class Calendar : public QObject, public CustomProperties,
61 public IncidenceBase::Observer 61 public IncidenceBase::Observer
62{ 62{
63 Q_OBJECT 63 Q_OBJECT
64public: 64public:
65 Calendar(); 65 Calendar();
66 Calendar(const QString &timeZoneId); 66 Calendar(const QString &timeZoneId);
67 virtual ~Calendar(); 67 virtual ~Calendar();
68 void deleteIncidence(Incidence *in); 68 void deleteIncidence(Incidence *in);
69 void resetTempSyncStat();
69 /** 70 /**
70 Clears out the current calendar, freeing all used memory etc. 71 Clears out the current calendar, freeing all used memory etc.
71 */ 72 */
72 virtual void close() = 0; 73 virtual void close() = 0;
73 74
74 /** 75 /**
75 Sync changes in memory to persistant storage. 76 Sync changes in memory to persistant storage.
76 */ 77 */
77 virtual void save() = 0; 78 virtual void save() = 0;
78 virtual QPtrList<Event> getExternLastSyncEvents() = 0; 79 virtual QPtrList<Event> getExternLastSyncEvents() = 0;
79 virtual bool isSaving() { return false; } 80 virtual bool isSaving() { return false; }
80 81
diff --git a/libkcal/incidencebase.cpp b/libkcal/incidencebase.cpp
index 15c4fa8..64a343c 100644
--- a/libkcal/incidencebase.cpp
+++ b/libkcal/incidencebase.cpp
@@ -15,41 +15,42 @@
15 You should have received a copy of the GNU Library General Public License 15 You should have received a copy of the GNU Library General Public License
16 along with this library; see the file COPYING.LIB. If not, write to 16 along with this library; see the file COPYING.LIB. If not, write to
17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 Boston, MA 02111-1307, USA. 18 Boston, MA 02111-1307, USA.
19*/ 19*/
20 20
21#include <kglobal.h> 21#include <kglobal.h>
22#include <klocale.h> 22#include <klocale.h>
23#include <kdebug.h> 23#include <kdebug.h>
24#include <kidmanager.h> 24#include <kidmanager.h>
25 25
26#include "calformat.h" 26#include "calformat.h"
27#include "syncdefines.h"
27 28
28#include "incidencebase.h" 29#include "incidencebase.h"
29 30
30using namespace KCal; 31using namespace KCal;
31 32
32IncidenceBase::IncidenceBase() : 33IncidenceBase::IncidenceBase() :
33 mReadOnly(false), mFloats(true), mDuration(0), mHasDuration(false), 34 mReadOnly(false), mFloats(true), mDuration(0), mHasDuration(false),
34 mPilotId(0), mSyncStatus(SYNCMOD) 35 mPilotId(0), mSyncStatus(SYNCMOD)
35{ 36{
36 setUid(CalFormat::createUniqueId()); 37 setUid(CalFormat::createUniqueId());
37 mOrganizer = ""; 38 mOrganizer = "";
38 mFloats = false; 39 mFloats = false;
39 mDuration = 0; 40 mDuration = 0;
40 mHasDuration = false; 41 mHasDuration = false;
41 mPilotId = 0; 42 mPilotId = 0;
42 mExternalId = ":"; 43 mExternalId = ":";
43 mTempSyncStat = 0; 44 mTempSyncStat = SYNC_TEMPSTATE_INITIAL;
44 mSyncStatus = 0; 45 mSyncStatus = 0;
45 mAttendees.setAutoDelete( true ); 46 mAttendees.setAutoDelete( true );
46} 47}
47 48
48IncidenceBase::IncidenceBase(const IncidenceBase &i) : 49IncidenceBase::IncidenceBase(const IncidenceBase &i) :
49 CustomProperties( i ) 50 CustomProperties( i )
50{ 51{
51 mReadOnly = i.mReadOnly; 52 mReadOnly = i.mReadOnly;
52 mDtStart = i.mDtStart; 53 mDtStart = i.mDtStart;
53 mDuration = i.mDuration; 54 mDuration = i.mDuration;
54 mHasDuration = i.mHasDuration; 55 mHasDuration = i.mHasDuration;
55 mOrganizer = i.mOrganizer; 56 mOrganizer = i.mOrganizer;
diff --git a/libkcal/phoneformat.cpp b/libkcal/phoneformat.cpp
index e6d4879..6bbc0a3 100644
--- a/libkcal/phoneformat.cpp
+++ b/libkcal/phoneformat.cpp
@@ -57,27 +57,27 @@ public:
57 57
58 int id = ToDo->Location; 58 int id = ToDo->Location;
59 Todo *todo; 59 Todo *todo;
60 todo = existingCalendar->todo( mProfileName ,QString::number( id ) ); 60 todo = existingCalendar->todo( mProfileName ,QString::number( id ) );
61 if (todo ) 61 if (todo )
62 todo = (Todo *)todo->clone(); 62 todo = (Todo *)todo->clone();
63 else 63 else
64 todo = new Todo; 64 todo = new Todo;
65 todo->setID( mProfileName,QString::number( id ) ); 65 todo->setID( mProfileName,QString::number( id ) );
66 todo->setTempSyncStat(SYNC_TEMPSTATE_NEW_EXTERNAL ); 66 todo->setTempSyncStat(SYNC_TEMPSTATE_NEW_EXTERNAL );
67 int priority; 67 int priority;
68 switch (ToDo->Priority) { 68 switch (ToDo->Priority) {
69 case GSM_Priority_Low : priority = 1; break; 69 case GSM_Priority_Low : priority = 5; break;
70 case GSM_Priority_Medium : priority = 3; break; 70 case GSM_Priority_Medium : priority = 3; break;
71 case GSM_Priority_High : priority = 5; break; 71 case GSM_Priority_High : priority = 1; break;
72 default :priority = 3 ;break; 72 default :priority = 3 ;break;
73 } 73 }
74 todo->setPriority( priority ); 74 todo->setPriority( priority );
75 GSM_Phone_Functions*Phone; 75 GSM_Phone_Functions*Phone;
76 Phone=s->Phone.Functions; 76 Phone=s->Phone.Functions;
77 int j; 77 int j;
78 GSM_DateTime* dtp; 78 GSM_DateTime* dtp;
79 bool alarm = false; 79 bool alarm = false;
80 QDateTime alarmDt; 80 QDateTime alarmDt;
81 GSM_Category Category; 81 GSM_Category Category;
82 int error; 82 int error;
83 for (j=0;j<ToDo->EntriesNum;j++) { 83 for (j=0;j<ToDo->EntriesNum;j++) {
@@ -221,24 +221,25 @@ public:
221 221
222 //qDebug(" for ev"); 222 //qDebug(" for ev");
223 switch (Note->Entries[i].EntryType) { 223 switch (Note->Entries[i].EntryType) {
224 case CAL_START_DATETIME: 224 case CAL_START_DATETIME:
225 dtp = &Note->Entries[i].Date ; 225 dtp = &Note->Entries[i].Date ;
226 if ( dtp->Hour > 24 ) { 226 if ( dtp->Hour > 24 ) {
227 event->setFloats( true ); 227 event->setFloats( true );
228 event->setDtStart( QDateTime (datefromGSM ( dtp ), QTime(0,0,0 ))); 228 event->setDtStart( QDateTime (datefromGSM ( dtp ), QTime(0,0,0 )));
229 } else { 229 } else {
230 event->setDtStart (fromGSM ( dtp )); 230 event->setDtStart (fromGSM ( dtp ));
231 231
232 } 232 }
233 //Note->Entries[i].Date.Hour = 5;
233 break; 234 break;
234 case CAL_END_DATETIME: 235 case CAL_END_DATETIME:
235 dtp = &Note->Entries[i].Date ; 236 dtp = &Note->Entries[i].Date ;
236 if ( dtp->Hour > 24 ) { 237 if ( dtp->Hour > 24 ) {
237 event->setFloats( true ); 238 event->setFloats( true );
238 event->setDtEnd( QDateTime (datefromGSM ( dtp ), QTime(0,0,0 ))); 239 event->setDtEnd( QDateTime (datefromGSM ( dtp ), QTime(0,0,0 )));
239 } else { 240 } else {
240 event->setDtEnd (fromGSM ( dtp )); 241 event->setDtEnd (fromGSM ( dtp ));
241 } 242 }
242 break; 243 break;
243 case CAL_ALARM_DATETIME: 244 case CAL_ALARM_DATETIME:
244 dtp = &Note->Entries[i].Date ; 245 dtp = &Note->Entries[i].Date ;
@@ -761,31 +762,31 @@ ulong PhoneFormat::getCsum( const QStringList & attList)
761 762
762} 763}
763//extern "C" GSM_Error GSM_InitConnection(GSM_StateMachine *s, int ReplyNum); 764//extern "C" GSM_Error GSM_InitConnection(GSM_StateMachine *s, int ReplyNum);
764#include <stdlib.h> 765#include <stdlib.h>
765#define DEBUGMODE false 766#define DEBUGMODE false
766bool PhoneFormat::load( Calendar *calendar, Calendar *existingCal) 767bool PhoneFormat::load( Calendar *calendar, Calendar *existingCal)
767{ 768{
768 GSM_StateMachines; 769 GSM_StateMachines;
769 qDebug(" load "); 770 qDebug(" load ");
770 s.opened = false; 771 s.opened = false;
771 s.msg = NULL; 772 s.msg = NULL;
772 s.ConfigNum = 0; 773 s.ConfigNum = 0;
773 QLabel status ( i18n("Reading data. Opening device ..."), 0 ); 774 QLabel status ( i18n("Opening device ..."), 0 );
774 int w = status.sizeHint().width()+20 ; 775 int w = status.sizeHint().width()+20 ;
775 if ( w < 200 ) w = 200; 776 if ( w < 200 ) w = 230;
776 int h = status.sizeHint().height()+20 ; 777 int h = status.sizeHint().height()+20 ;
777 int dw = QApplication::desktop()->width(); 778 int dw = QApplication::desktop()->width();
778 int dh = QApplication::desktop()->height(); 779 int dh = QApplication::desktop()->height();
779 status.setCaption(i18n("Reading Phone Data") ); 780 status.setCaption(i18n("Reading phone...") );
780 status.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 781 status.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
781 status.show(); 782 status.show();
782 status.raise(); 783 status.raise();
783 qApp->processEvents(); 784 qApp->processEvents();
784#if 0 785#if 0
785 static char*cp; 786 static char*cp;
786 static INI_Section *cfg = NULL; 787 static INI_Section *cfg = NULL;
787 cfg=GSM_FindGammuRC(); 788 cfg=GSM_FindGammuRC();
788 int i; 789 int i;
789 for (i = 0; i <= MAX_CONFIG_NUM; i++) { 790 for (i = 0; i <= MAX_CONFIG_NUM; i++) {
790 if (cfg!=NULL) { 791 if (cfg!=NULL) {
791 cp = (char *)INI_GetValue(cfg, (unsigned char*) "gammu", (unsigned char*)"gammucoding", false); 792 cp = (char *)INI_GetValue(cfg, (unsigned char*) "gammu", (unsigned char*)"gammucoding", false);
@@ -826,200 +827,360 @@ bool PhoneFormat::load( Calendar *calendar, Calendar *existingCal)
826#endif 827#endif
827 int error=initDevice(&s); 828 int error=initDevice(&s);
828 qDebug("GSM Init %d (no error is %d)", error, ERR_NONE); 829 qDebug("GSM Init %d (no error is %d)", error, ERR_NONE);
829 if ( error != ERR_NONE ) 830 if ( error != ERR_NONE )
830 return false; 831 return false;
831 GSM_Phone_Functions*Phone; 832 GSM_Phone_Functions*Phone;
832 GSM_CalendarEntrynote; 833 GSM_CalendarEntrynote;
833 bool start = true; 834 bool start = true;
834 Phone=s.Phone.Functions; 835 Phone=s.Phone.Functions;
835 bool gshutdown = false; 836 bool gshutdown = false;
836 PhoneParser handler( calendar, mProfileName ); 837 PhoneParser handler( calendar, mProfileName );
837 int ccc = 0; 838 int ccc = 0;
838 QString message = i18n("Processing event # "); 839 QString message = i18n(" Reading event # ");
839 int procCount = 0; 840 int procCount = 0;
840 qDebug("Debug: only 10 calender items are downloaded "); 841 qDebug("Debug: only 10 calender items are downloaded ");
841 while (!gshutdown && ccc++ < 10) { 842 while (!gshutdown && ccc++ < 10) {
842 status.setText ( message + QString::number ( ++procCount ) ); 843 status.setText ( message + QString::number ( ++procCount ) );
843 qApp->processEvents(); 844 qApp->processEvents();
844 qDebug("readEvent %d ", ccc); 845 qDebug("readEvent %d ", ccc);
845 error=Phone->GetNextCalendar(&s,&note,start); 846 error=Phone->GetNextCalendar(&s,&note,start);
846 if (error == ERR_EMPTY) break; 847 if (error == ERR_EMPTY) break;
847 start = false; 848 start = false;
848 handler.readEvent( existingCal, &note ); 849 handler.readEvent( existingCal, &note );
850 qDebug("Org loc %d ",note.Location);
851 //note.Location = 0;
852 error=Phone->SetCalendar(&s,&note);
853 qDebug("new loc %d ",note.Location);
849 } 854 }
850 855
851 start = true; 856 start = true;
852 GSM_ToDoEntry ToDo; 857 GSM_ToDoEntry ToDo;
853 ccc = 0; 858 ccc = 0;
854 message = i18n("Processing todo # "); 859 message = i18n(" Reading todo # ");
855 procCount = 0; 860 procCount = 0;
856 while (!gshutdown) { 861 while (!gshutdown && ccc++ < 10) {
857 status.setText ( message + QString::number ( ++procCount ) ); 862 status.setText ( message + QString::number ( ++procCount ) );
858 qApp->processEvents(); 863 qApp->processEvents();
859 error = Phone->GetNextToDo(&s, &ToDo, start); 864 error = Phone->GetNextToDo(&s, &ToDo, start);
860 if (error == ERR_EMPTY) break; 865 if (error == ERR_EMPTY) break;
861 start = false; 866 start = false;
862 qDebug("ReadTodo %d ", ++ccc); 867 qDebug("ReadTodo %d ", ccc);
863 handler.readTodo( existingCal, &ToDo, &s); 868 handler.readTodo( existingCal, &ToDo, &s);
864 869
865 } 870 }
866 871
867 error=GSM_TerminateConnection(&s); 872 error=GSM_TerminateConnection(&s);
868 873
869 return true; 874 return true;
870} 875}
871void PhoneFormat::event2GSM( Event* ev, GSM_CalendarEntry*Note ) 876#include <qcstring.h>
877void PhoneFormat::event2GSM( Calendar *cal,Event* ev, GSM_CalendarEntry*Note )
872{ 878{
873 QString eText = vfconverter.eventToString( ev ); 879 QString eText = vfconverter.eventToString( ev, cal );
874 int pos = 0; 880 int pos = 0;
875 GSM_ToDoEntry dummy; 881 GSM_ToDoEntry dummy;
876 GSM_DecodeVCALENDAR_VTODO( (unsigned char*)eText.latin1(), &pos, Note , &dummy, Nokia_VCalendar, Nokia_VToDo ); 882 qDebug( "Convert event");
883 QByteArray ba;
884 QDataStream s ( ba, IO_WriteOnly );
885 s << eText.utf8();
886 GSM_DecodeVCALENDAR_VTODO( (unsigned char*) ba.data(), &pos, Note , &dummy, Nokia_VCalendar, Nokia_VToDo );
887 qDebug( "Convert event done");
888 Note->Location = 0;
889 QString loc = ev->getID(mProfileName);
890 if ( !loc.isEmpty() ){
891 Note->Location = loc.toInt();
892 }
893
877} 894}
878void PhoneFormat::todo2GSM( Todo* todo, GSM_ToDoEntry *gsmTodo ) 895void PhoneFormat::todo2GSM( Calendar *cal, Todo* todo, GSM_ToDoEntry *gsmTodo )
879{ 896{
880 QString tText = vfconverter.todoToString( todo ); 897 qDebug( "Convert todo1");
898 QString tText = vfconverter.todoToString( todo, cal );
881 int pos = 0; 899 int pos = 0;
882 GSM_CalendarEntry dummy; 900 GSM_CalendarEntry dummy;
883 GSM_DecodeVCALENDAR_VTODO( (unsigned char*)tText.latin1(), &pos, &dummy, gsmTodo, Nokia_VCalendar, Nokia_VToDo ); 901 QByteArray ba;
902 QDataStream s ( ba, IO_WriteOnly );
903 s << tText.utf8();
904 GSM_DecodeVCALENDAR_VTODO( (unsigned char*) ba.data(), &pos, &dummy, gsmTodo, Nokia_VCalendar, Nokia_VToDo );
905 qDebug( "Convert todo done ");
906 gsmTodo->Location = 0;
907 QString loc = todo->getID(mProfileName);
908 if ( !loc.isEmpty() ){
909 gsmTodo->Location = loc.toInt();
910 }
911
884} 912}
885void PhoneFormat::afterSave( Incidence* inc) 913void PhoneFormat::afterSave( Incidence* inc)
886{ 914{
887 uint csum; 915 uint csum;
888 if ( inc->type() == "Event") 916 if ( inc->type() == "Event")
889 csum = PhoneFormat::getCsumEvent( (Event*) inc ); 917 csum = PhoneFormat::getCsumEvent( (Event*) inc );
890 else 918 else
891 csum = PhoneFormat::getCsumTodo( (Todo*) inc ); 919 csum = PhoneFormat::getCsumTodo( (Todo*) inc );
892 inc->setCsum( mProfileName, QString::number( csum )); 920 inc->setCsum( mProfileName, QString::number( csum ));
893 inc->setTempSyncStat( SYNC_TEMPSTATE_NEW_ID ); 921 inc->setTempSyncStat( SYNC_TEMPSTATE_NEW_ID );
894 922
895} 923}
896bool PhoneFormat::save( Calendar *calendar) 924bool PhoneFormat::save( Calendar *calendar)
897{ 925{
926 return true;
898 GSM_StateMachines; 927 GSM_StateMachines;
899 qDebug(" save "); 928 qDebug(" save ");
900 s.opened = false; 929 s.opened = false;
901 s.msg = NULL; 930 s.msg = NULL;
902 s.ConfigNum = 0; 931 s.ConfigNum = 0;
903 QLabel status ( i18n("Writing data. Opening device ..."), 0 ); 932 QLabel status ( i18n(" Opening device ..."), 0 );
904 int w = status.sizeHint().width()+20 ; 933 int w = status.sizeHint().width()+20 ;
905 if ( w < 200 ) w = 200; 934 if ( w < 200 ) w = 230;
906 int h = status.sizeHint().height()+20 ; 935 int h = status.sizeHint().height()+20 ;
907 int dw = QApplication::desktop()->width(); 936 int dw = QApplication::desktop()->width();
908 int dh = QApplication::desktop()->height(); 937 int dh = QApplication::desktop()->height();
909 status.setCaption(i18n("Writing Phone Data") ); 938 status.setCaption(i18n("Writing to phone...") );
910 status.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 939 status.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
911 status.show(); 940 status.show();
912 status.raise(); 941 status.raise();
913 qApp->processEvents(); 942 qApp->processEvents();
914 943
915 int error=initDevice(&s); 944 int error=initDevice(&s);
916 qDebug("GSM Init %d (no error is %d)", error, ERR_NONE); 945 qDebug("GSM Init %d (no error is %d)", error, ERR_NONE);
917 if ( error != ERR_NONE ) 946 if ( error != ERR_NONE )
918 return false; 947 return false;
919 GSM_Phone_Functions*Phone; 948 GSM_Phone_Functions*Phone;
920 GSM_CalendarEntryNote; 949 GSM_CalendarEntryNote;
921 bool start = true; 950 bool start = true;
922 Phone=s.Phone.Functions; 951 Phone=s.Phone.Functions;
923 bool gshutdown = false; 952 bool gshutdown = false;
924 QPtrList<Event> er = calendar->rawEvents(); 953 QPtrList<Event> er = calendar->rawEvents();
925 Event* ev = er.first(); 954 Event* ev = er.first();
926 QString message = i18n("Processing event # "); 955 QString message = i18n(" Processing event # ");
927 int procCount = 0; 956 int procCount = 0;
928 while ( ev ) { 957 bool planB = true;// false;
929 //qDebug("i %d ", ++i); 958 while ( ev && ! planB) {
930 if ( ev->tempSyncStat() != SYNC_TEMPSTATE_NEW_EXTERNAL ) { // event was changed during sync or is a new one 959 if ( ev->tempSyncStat() != SYNC_TEMPSTATE_NEW_EXTERNAL ) { // event was changed during sync or is a new one
931 960
932 status.setText ( message + QString::number ( ++procCount ) ); 961 status.setText ( message + QString::number ( ++procCount ) );
933 qApp->processEvents(); 962 qApp->processEvents();
934 event2GSM( ev, &Note ); 963 qDebug("event1 %d ", procCount);
964 event2GSM( calendar, ev, &Note );
935 if ( ev->tempSyncStat() == SYNC_TEMPSTATE_DELETE ) { // delete 965 if ( ev->tempSyncStat() == SYNC_TEMPSTATE_DELETE ) { // delete
936 error = Phone->DeleteCalendar(&s, &Note); 966 error = Phone->DeleteCalendar(&s, &Note);
967 if (error == ERR_NOTSUPPORTED || error == ERR_NOTIMPLEMENTED) {
968 planB = true;
969 qDebug(" e delete planB %d ", error);
970 break;
971 }
937 } 972 }
938 else if ( ev->getID(mProfileName).isEmpty() ) { // add new 973 else if ( ev->getID(mProfileName).isEmpty() ) { // add new
939 // we have to do this later after deleting 974 // we have to do this later after deleting
940 975
941 } 976 }
942 else { // change existing 977 else { // change existing
943 error = Phone->SetCalendar(&s, &Note); 978 error = Phone->SetCalendar(&s, &Note);
979 if (error == ERR_NOTSUPPORTED || error == ERR_NOTIMPLEMENTED) {
980 planB = true;
981 qDebug(" e change planB %d ", error);
982 break;
983 }
984 qDebug("Change Calendar. Location %d status: %d",Note.Location, error );
944 } 985 }
945 } 986 }
946 ev = er.next(); 987 ev = er.next();
947 } 988 }
948 ev = er.first(); 989 ev = er.first();
949 // pending get empty slots 990 // pending get empty slots
950 while ( ev ) { 991 int loc = 0;
992 while ( ev && ! planB) {
951 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) {
994 qDebug("event2 %d ", procCount);
952 if ( ev->getID(mProfileName).isEmpty() ) { 995 if ( ev->getID(mProfileName).isEmpty() ) {
953 status.setText ( message + QString::number ( ++procCount ) ); 996 status.setText ( message + QString::number ( ++procCount ) );
954 qApp->processEvents(); 997 qApp->processEvents();
955 //int newID ;//= pending 998 //int newID ;//= pending
956 //ev->setID(mProfileName, QString::number( newID )); 999 //ev->setID(mProfileName, QString::number( newID ));
957 event2GSM( ev, &Note ); 1000 event2GSM( calendar, ev, &Note );
958 Note.Location = 0; 1001 ++loc;
1002 Note.Location = loc;
959 error = Phone->AddCalendar(&s, &Note); 1003 error = Phone->AddCalendar(&s, &Note);
1004 if (error == ERR_NOTSUPPORTED || error == ERR_NOTIMPLEMENTED) {
1005 planB = true;
1006 qDebug(" e add planB %d ", error);
1007 break;
1008 }
960 ev->setID( mProfileName, QString::number( Note.Location ) ); 1009 ev->setID( mProfileName, QString::number( Note.Location ) );
961 qDebug("New Calendar. Location %d ",Note.Location ); 1010 qDebug("New Calendar. Location %d stat %d %d",Note.Location ,error, ERR_UNKNOWN);
962 afterSave( ev ); 1011 afterSave( ev );
963 } else { 1012 } else {
964 afterSave( ev ); // setting temp sync stat for changed items 1013 afterSave( ev ); // setting temp sync stat for changed items
965 } 1014 }
966 } 1015 }
967 ev = er.next(); 1016 ev = er.next();
968 } 1017 }
1018
1019
1020 if ( planB ) {
1021 qDebug("delete all calendar...");
1022 status.setText ( i18n("Deleting all calendar..."));
1023 qApp->processEvents();
1024 error=Phone->DeleteAllCalendar(&s);
1025 if (error == ERR_NOTSUPPORTED || error == ERR_NOTIMPLEMENTED) {
1026 message = i18n(" Deleting event # ");
1027 procCount = 0;
1028 while (1) {
1029 status.setText ( message + QString::number ( ++procCount ) );
1030 qApp->processEvents();
1031 qDebug("deleting event ... %d", procCount);
1032 error = Phone->GetNextCalendar(&s,&Note,true);
1033 if (error != ERR_NONE) break;
1034 error = Phone->DeleteCalendar(&s,&Note);
1035 }
1036 qDebug("deleting calendar ... finished");
1037 } else {
1038 status.setText ( i18n("All calendar deleted!"));
1039 qDebug("all cal deleted");
1040 }
1041 bool planC = false;
1042 ev = er.first();
1043 procCount = 0;
1044 message = i18n(" Writing event # ");
1045 while ( ev && ! planC) {
1046 status.setText ( message + QString::number ( ++procCount ) );
1047 qApp->processEvents();
1048 event2GSM( calendar, ev, &Note );
1049 Note.Location = procCount;
1050 error=Phone->AddCalendar(&s,&Note);
1051 if (error != ERR_NONE ) {
1052 // we have currently no planC :-(
1053 // planC = true;
1054 //qDebug("add planC %d ", error);
1055 //break;
1056 // we remove the ID such that this todo is not deleted after next sync
1057 ev->removeID(mProfileName);
1058 ev->setTempSyncStat( SYNC_TEMPSTATE_NEW_ID );
1059 qDebug("error :cal adding loc %d planB stat %d ", Note.Location ,error);
1060 } else {
1061 qDebug("cal adding loc %d planB stat %d ", Note.Location ,error);
1062 ev->setID(mProfileName, QString::number( Note.Location ));
1063 afterSave( ev );
1064 }
1065 ev = er.next();
1066 }
1067 if ( planC ) {
1068 qDebug("writing cal went wrong...");
1069
1070 // we have currently no planC :-(
1071 }
1072 }
969 GSM_ToDoEntry ToDoEntry; 1073 GSM_ToDoEntry ToDoEntry;
970 QPtrList<Todo> tl = calendar->rawTodos(); 1074 QPtrList<Todo> tl = calendar->rawTodos();
971 Todo* to = tl.first(); 1075 Todo* to = tl.first();
972 1076
973 message = i18n("Processing todo # "); 1077 message = i18n(" Processing todo # ");
974 procCount = 0; 1078 procCount = 0;
975 while ( to ) { 1079 planB = false;
1080 while ( to && ! planB ) {
976 if ( to->tempSyncStat() != SYNC_TEMPSTATE_NEW_EXTERNAL ) { 1081 if ( to->tempSyncStat() != SYNC_TEMPSTATE_NEW_EXTERNAL ) {
1082 qDebug("todo3 %d ", procCount);
977 status.setText ( message + QString::number ( ++procCount ) ); 1083 status.setText ( message + QString::number ( ++procCount ) );
978 qApp->processEvents(); 1084 qApp->processEvents();
979 todo2GSM( to, &ToDoEntry ); 1085 qDebug("todo5 %d ", procCount);
1086 todo2GSM( calendar, to, &ToDoEntry );
980 if ( to->tempSyncStat() == SYNC_TEMPSTATE_DELETE ) { // delete 1087 if ( to->tempSyncStat() == SYNC_TEMPSTATE_DELETE ) { // delete
981 error=Phone->DeleteToDo(&s,&ToDoEntry); 1088 error=Phone->DeleteToDo(&s,&ToDoEntry);
1089 if (error == ERR_NOTSUPPORTED || error == ERR_NOTIMPLEMENTED) {
1090 planB = true;
1091 qDebug("delete planB %d ", error);
1092 }
982 } 1093 }
983 else if ( to->getID("Sharp_DTM").isEmpty() ) { // add new 1094 else if ( to->getID(mProfileName).isEmpty() ) { // add new
984 ; 1095 ;
985 } 1096 }
986 else { // change existing 1097 else { // change existing
987 error=Phone->SetToDo(&s,&ToDoEntry); 1098 error=Phone->SetToDo(&s,&ToDoEntry);
1099 if (error == ERR_NOTSUPPORTED || error == ERR_NOTIMPLEMENTED) {
1100 planB = true;
1101 qDebug("set planB %d ", error);
1102 }
1103 qDebug("Old Todo. Location %d %d",ToDoEntry.Location , error );
988 } 1104 }
989 } 1105 }
990 to = tl.next(); 1106 to = tl.next();
991 } 1107 }
992 1108
993 // pending get empty slots 1109 // pending get empty slots
994 to = tl.first(); 1110 to = tl.first();
995 while ( to ) { 1111 while ( to && ! planB ) {
1112 qDebug("todo2 %d ", procCount);
996 if ( to->tempSyncStat() != SYNC_TEMPSTATE_NEW_EXTERNAL && to->tempSyncStat() != SYNC_TEMPSTATE_DELETE) { 1113 if ( to->tempSyncStat() != SYNC_TEMPSTATE_NEW_EXTERNAL && to->tempSyncStat() != SYNC_TEMPSTATE_DELETE) {
1114 qDebug("todo4 %d ", procCount);
997 if ( to->getID(mProfileName).isEmpty() ) { 1115 if ( to->getID(mProfileName).isEmpty() ) {
998 status.setText ( message + QString::number ( ++procCount ) ); 1116 status.setText ( message + QString::number ( ++procCount ) );
999 qApp->processEvents(); 1117 qApp->processEvents();
1000 //int newID ;//= pending 1118 //int newID ;//= pending
1001 //to->setID(mProfileName, QString::number( newID )); 1119 //to->setID(mProfileName, QString::number( newID ));
1002 todo2GSM( to, &ToDoEntry ); 1120 todo2GSM( calendar,to, &ToDoEntry );
1003 ToDoEntry.Location = 0; 1121 ToDoEntry.Location = 0;
1004 error=Phone->AddToDo(&s,&ToDoEntry); 1122 error=Phone->AddToDo(&s,&ToDoEntry);
1123 if (error == ERR_NOTSUPPORTED || error == ERR_NOTIMPLEMENTED) {
1124 planB = true;
1125 qDebug("new planB %d ", error);
1126 }
1005 to->setID(mProfileName, QString::number( ToDoEntry.Location )); 1127 to->setID(mProfileName, QString::number( ToDoEntry.Location ));
1006 afterSave( to ); 1128 afterSave( to );
1007 qDebug("New Todo. Location %d ",ToDoEntry.Location ); 1129 qDebug("New Todo. Location %d %d",ToDoEntry.Location, error );
1008 } else { 1130 } else {
1009 afterSave( to ); 1131 afterSave( to );
1010 } 1132 }
1011 } 1133 }
1012 to = tl.next(); 1134 to = tl.next();
1013 } 1135 }
1136 if ( planB ) {
1137 qDebug("delete all ...");
1138 error=Phone->DeleteAllToDo(&s);
1139 if (error == ERR_NOTSUPPORTED || error == ERR_NOTIMPLEMENTED) {
1140 while (1) {
1141 qDebug("deleting todo ...");
1142 error = Phone->GetNextToDo(&s,&ToDoEntry,true);
1143 if (error != ERR_NONE) break;
1144 error = Phone->DeleteToDo(&s,&ToDoEntry);
1145 }
1146 qDebug("deleting todo ... finished");
1147 } else {
1148 qDebug("all todo deleted");
1149 }
1150 bool planC = false;
1151 to = tl.first();
1152 while ( to && ! planC ) {
1153 todo2GSM( calendar,to, &ToDoEntry );
1154 ToDoEntry.Location = 0;
1155 error=Phone->AddToDo(&s,&ToDoEntry);
1156 if (error == ERR_NOTSUPPORTED || error == ERR_NOTIMPLEMENTED) {
1157 // we have currently no planC :-(
1158 // planC = true;
1159 //qDebug("add planC %d ", error);
1160 //break;
1161 // we remove the ID such that this todo is not deleted after next sync
1162 to->removeID(mProfileName);
1163 to->setTempSyncStat( SYNC_TEMPSTATE_NEW_ID );
1164 } else {
1165 qDebug("adding %d planB %d ", ToDoEntry.Location ,error);
1166 to->setID(mProfileName, QString::number( ToDoEntry.Location ));
1167 afterSave( to );
1168 }
1169 to = tl.next();
1170 }
1171 if ( planC ) {
1172 // we have currently no planC :-(
1173 }
1174 }
1014 return true; 1175 return true;
1015} 1176}
1016QString PhoneFormat::dtToGSM( const QDateTime& dti, bool useTZ ) 1177QString PhoneFormat::dtToGSM( const QDateTime& dti, bool useTZ )
1017{ 1178{
1018 QString datestr; 1179 QString datestr;
1019 QString timestr; 1180 QString timestr;
1020 int offset = KGlobal::locale()->localTimeOffset( dti ); 1181 int offset = KGlobal::locale()->localTimeOffset( dti );
1021 QDateTime dt; 1182 QDateTime dt;
1022 if (useTZ) 1183 if (useTZ)
1023 dt = dti.addSecs ( -(offset*60)); 1184 dt = dti.addSecs ( -(offset*60));
1024 else 1185 else
1025 dt = dti; 1186 dt = dti;
diff --git a/libkcal/phoneformat.h b/libkcal/phoneformat.h
index 33b2091..2c2e51c 100644
--- a/libkcal/phoneformat.h
+++ b/libkcal/phoneformat.h
@@ -43,25 +43,25 @@ class PhoneFormat : public QObject {
43 PhoneFormat(QString profileName, QString device,QString connection, QString model); 43 PhoneFormat(QString profileName, QString device,QString connection, QString model);
44 virtual ~PhoneFormat(); 44 virtual ~PhoneFormat();
45 45
46 bool load( Calendar * ,Calendar * ); 46 bool load( Calendar * ,Calendar * );
47 bool save( Calendar * ); 47 bool save( Calendar * );
48 bool fromString( Calendar *, const QString & ); 48 bool fromString( Calendar *, const QString & );
49 QString toString( Calendar * ); 49 QString toString( Calendar * );
50 static ulong getCsum( const QStringList & ); 50 static ulong getCsum( const QStringList & );
51 static ulong getCsumTodo( Todo* to ); 51 static ulong getCsumTodo( Todo* to );
52 static ulong getCsumEvent( Event* ev ); 52 static ulong getCsumEvent( Event* ev );
53 private: 53 private:
54 VCalFormat vfconverter; 54 VCalFormat vfconverter;
55 void event2GSM( Event* ev, GSM_CalendarEntry*Note ); 55 void event2GSM( Calendar *, Event* ev, GSM_CalendarEntry*Note );
56 void todo2GSM( Todo* ev, GSM_ToDoEntry *ToDo ); 56 void todo2GSM( Calendar *, Todo* ev, GSM_ToDoEntry *ToDo );
57 int initDevice(GSM_StateMachine *s); 57 int initDevice(GSM_StateMachine *s);
58 QString getEventString( Event* ); 58 QString getEventString( Event* );
59 QString getTodoString( Todo* ); 59 QString getTodoString( Todo* );
60 QString dtToGSM( const QDateTime& dt, bool useTZ = true ); 60 QString dtToGSM( const QDateTime& dt, bool useTZ = true );
61 QString mProfileName, mDevice, mConnection, mModel; 61 QString mProfileName, mDevice, mConnection, mModel;
62 void afterSave( Incidence* ); 62 void afterSave( Incidence* );
63}; 63};
64 64
65} 65}
66 66
67#endif 67#endif
diff --git a/libkcal/vcalformat.cpp b/libkcal/vcalformat.cpp
index 1167e58..076cd3f 100644
--- a/libkcal/vcalformat.cpp
+++ b/libkcal/vcalformat.cpp
@@ -36,24 +36,25 @@
36#include "vcc.h" 36#include "vcc.h"
37#include "vobject.h" 37#include "vobject.h"
38 38
39#include "vcaldrag.h" 39#include "vcaldrag.h"
40#include "calendar.h" 40#include "calendar.h"
41 41
42#include "vcalformat.h" 42#include "vcalformat.h"
43 43
44using namespace KCal; 44using namespace KCal;
45 45
46VCalFormat::VCalFormat() 46VCalFormat::VCalFormat()
47{ 47{
48 mCalendar = 0;
48} 49}
49 50
50VCalFormat::~VCalFormat() 51VCalFormat::~VCalFormat()
51{ 52{
52} 53}
53 54
54bool VCalFormat::load(Calendar *calendar, const QString &fileName) 55bool VCalFormat::load(Calendar *calendar, const QString &fileName)
55{ 56{
56 mCalendar = calendar; 57 mCalendar = calendar;
57 58
58 clearException(); 59 clearException();
59 60
@@ -156,36 +157,38 @@ bool VCalFormat::fromString( Calendar *calendar, const QString &text )
156 calendar->addEvent( event ); 157 calendar->addEvent( event );
157 } else { 158 } else {
158 kdDebug(5800) << "VCalFormat::fromString(): Unknown object type." << endl; 159 kdDebug(5800) << "VCalFormat::fromString(): Unknown object type." << endl;
159 deleteVObject( vcal ); 160 deleteVObject( vcal );
160 return false; 161 return false;
161 } 162 }
162 163
163 deleteVObject( vcal ); 164 deleteVObject( vcal );
164 165
165 return true; 166 return true;
166} 167}
167 168
168QString VCalFormat::eventToString( Event * event) 169QString VCalFormat::eventToString( Event * event, Calendar *calendar)
169{ 170{
170 if ( !event ) return QString::null; 171 if ( !event ) return QString::null;
172 mCalendar = calendar;
171 VObject *vevent = eventToVEvent( event ); 173 VObject *vevent = eventToVEvent( event );
172 char *buf = writeMemVObject( 0, 0, vevent ); 174 char *buf = writeMemVObject( 0, 0, vevent );
173 QString result( buf ); 175 QString result( buf );
174 cleanVObject( vevent ); 176 cleanVObject( vevent );
175 return result; 177 return result;
176} 178}
177QString VCalFormat::todoToString( Todo * todo ) 179QString VCalFormat::todoToString( Todo * todo, Calendar *calendar )
178{ 180{
179 if ( !todo ) return QString::null; 181 if ( !todo ) return QString::null;
182 mCalendar = calendar;
180 VObject *vevent = eventToVTodo( todo ); 183 VObject *vevent = eventToVTodo( todo );
181 char *buf = writeMemVObject( 0, 0, vevent ); 184 char *buf = writeMemVObject( 0, 0, vevent );
182 QString result( buf ); 185 QString result( buf );
183 cleanVObject( vevent ); 186 cleanVObject( vevent );
184 return result; 187 return result;
185} 188}
186 189
187QString VCalFormat::toString( Calendar *calendar ) 190QString VCalFormat::toString( Calendar *calendar )
188{ 191{
189 // TODO: Factor out VCalFormat::asString() 192 // TODO: Factor out VCalFormat::asString()
190 193
191 VObject *vcal = newVObject(VCCalProp); 194 VObject *vcal = newVObject(VCCalProp);
diff --git a/libkcal/vcalformat.h b/libkcal/vcalformat.h
index 8490125..7b9ca26 100644
--- a/libkcal/vcalformat.h
+++ b/libkcal/vcalformat.h
@@ -53,26 +53,26 @@ class VCalFormat : public CalFormat {
53 * @param fileName the name of the file 53 * @param fileName the name of the file
54 */ 54 */
55 bool save(Calendar *,const QString &fileName); 55 bool save(Calendar *,const QString &fileName);
56 56
57 /** 57 /**
58 Parse string and populate calendar with that information. 58 Parse string and populate calendar with that information.
59 */ 59 */
60 bool fromString( Calendar *, const QString & ); 60 bool fromString( Calendar *, const QString & );
61 /** 61 /**
62 Return calendar information as string. 62 Return calendar information as string.
63 */ 63 */
64 QString toString( Calendar * ); 64 QString toString( Calendar * );
65 QString eventToString( Event * ); 65 QString eventToString( Event *, Calendar *calendar );
66 QString todoToString( Todo * ); 66 QString todoToString( Todo * ,Calendar *calendar );
67 67
68 protected: 68 protected:
69 /** translates a VObject of the TODO type into a Event */ 69 /** translates a VObject of the TODO type into a Event */
70 Todo *VTodoToEvent(VObject *vtodo); 70 Todo *VTodoToEvent(VObject *vtodo);
71 /** translates a VObject into a Event and returns a pointer to it. */ 71 /** translates a VObject into a Event and returns a pointer to it. */
72 Event *VEventToEvent(VObject *vevent); 72 Event *VEventToEvent(VObject *vevent);
73 /** translate a Event into a VTodo-type VObject and return pointer */ 73 /** translate a Event into a VTodo-type VObject and return pointer */
74 VObject *eventToVTodo(const Todo *anEvent); 74 VObject *eventToVTodo(const Todo *anEvent);
75 /** translate a Event into a VObject and returns a pointer to it. */ 75 /** translate a Event into a VObject and returns a pointer to it. */
76 VObject* eventToVEvent(const Event *anEvent); 76 VObject* eventToVEvent(const Event *anEvent);
77 77
78 /** takes a QDate and returns a string in the format YYYYMMDDTHHMMSS */ 78 /** takes a QDate and returns a string in the format YYYYMMDDTHHMMSS */