author | zautrix <zautrix> | 2004-08-10 19:41:31 (UTC) |
---|---|---|
committer | zautrix <zautrix> | 2004-08-10 19:41:31 (UTC) |
commit | 2f1b58e344b882578977dd3786f7a94495096d22 (patch) (side-by-side diff) | |
tree | 6658bef546b6feac1688aa465ca94344e15704d7 /libkcal | |
parent | 467e50111dfd6d66aca205501b6bf369b7f0a166 (diff) | |
download | kdepimpi-2f1b58e344b882578977dd3786f7a94495096d22.zip kdepimpi-2f1b58e344b882578977dd3786f7a94495096d22.tar.gz kdepimpi-2f1b58e344b882578977dd3786f7a94495096d22.tar.bz2 |
More syncing stuff
-rw-r--r-- | libkcal/calendar.cpp | 15 | ||||
-rw-r--r-- | libkcal/calendar.h | 1 | ||||
-rw-r--r-- | libkcal/incidencebase.cpp | 3 | ||||
-rw-r--r-- | libkcal/phoneformat.cpp | 227 | ||||
-rw-r--r-- | libkcal/phoneformat.h | 4 | ||||
-rw-r--r-- | libkcal/vcalformat.cpp | 7 | ||||
-rw-r--r-- | libkcal/vcalformat.h | 4 |
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 @@ -32,2 +32,3 @@ #include "calendar.h" +#include "syncdefines.h" @@ -249,3 +250,17 @@ QPtrList<Incidence> Calendar::incidences() } +void Calendar::resetTempSyncStat() +{ + QPtrList<Incidence> incidences; + + Incidence *i; + + QPtrList<Event> e = rawEvents(); + for( i = e.first(); i; i = e.next() ) i->setTempSyncStat( SYNC_TEMPSTATE_INITIAL ); + QPtrList<Todo> t = rawTodos(); + for( i = t.first(); i; i = t.next() ) i->setTempSyncStat( SYNC_TEMPSTATE_INITIAL ); + + QPtrList<Journal> j = journals(); + for( i = j.first(); i; i = j.next() ) i->setTempSyncStat( SYNC_TEMPSTATE_INITIAL ); +} QPtrList<Incidence> Calendar::rawIncidences() diff --git a/libkcal/calendar.h b/libkcal/calendar.h index 4a3223c..06a911c 100644 --- a/libkcal/calendar.h +++ b/libkcal/calendar.h @@ -68,2 +68,3 @@ public: void deleteIncidence(Incidence *in); + void resetTempSyncStat(); /** diff --git a/libkcal/incidencebase.cpp b/libkcal/incidencebase.cpp index 15c4fa8..64a343c 100644 --- a/libkcal/incidencebase.cpp +++ b/libkcal/incidencebase.cpp @@ -26,2 +26,3 @@ #include "calformat.h" +#include "syncdefines.h" @@ -42,3 +43,3 @@ IncidenceBase::IncidenceBase() : mExternalId = ":"; - mTempSyncStat = 0; + mTempSyncStat = SYNC_TEMPSTATE_INITIAL; mSyncStatus = 0; diff --git a/libkcal/phoneformat.cpp b/libkcal/phoneformat.cpp index e6d4879..6bbc0a3 100644 --- a/libkcal/phoneformat.cpp +++ b/libkcal/phoneformat.cpp @@ -68,5 +68,5 @@ public: switch (ToDo->Priority) { - case GSM_Priority_Low : priority = 1; break; + case GSM_Priority_Low : priority = 5; break; case GSM_Priority_Medium : priority = 3; break; - case GSM_Priority_High : priority = 5; break; + case GSM_Priority_High : priority = 1; break; default :priority = 3 ; break; @@ -232,2 +232,3 @@ public: } + //Note->Entries[i].Date.Hour = 5; break; @@ -772,5 +773,5 @@ bool PhoneFormat::load( Calendar *calendar, Calendar *existingCal) s.ConfigNum = 0; - QLabel status ( i18n("Reading data. Opening device ..."), 0 ); + QLabel status ( i18n("Opening device ..."), 0 ); int w = status.sizeHint().width()+20 ; - if ( w < 200 ) w = 200; + if ( w < 200 ) w = 230; int h = status.sizeHint().height()+20 ; @@ -778,3 +779,3 @@ bool PhoneFormat::load( Calendar *calendar, Calendar *existingCal) int dh = QApplication::desktop()->height(); - status.setCaption(i18n("Reading Phone Data") ); + status.setCaption(i18n("Reading phone...") ); status.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); @@ -837,3 +838,3 @@ bool PhoneFormat::load( Calendar *calendar, Calendar *existingCal) int ccc = 0; - QString message = i18n("Processing event # "); + QString message = i18n(" Reading event # "); int procCount = 0; @@ -848,2 +849,6 @@ bool PhoneFormat::load( Calendar *calendar, Calendar *existingCal) handler.readEvent( existingCal, ¬e ); + qDebug("Org loc %d ",note.Location); + //note.Location = 0; + error=Phone->SetCalendar(&s,¬e); + qDebug("new loc %d ",note.Location); } @@ -853,5 +858,5 @@ bool PhoneFormat::load( Calendar *calendar, Calendar *existingCal) ccc = 0; - message = i18n("Processing todo # "); + message = i18n(" Reading todo # "); procCount = 0; - while (!gshutdown) { + while (!gshutdown && ccc++ < 10) { status.setText ( message + QString::number ( ++procCount ) ); @@ -861,3 +866,3 @@ bool PhoneFormat::load( Calendar *calendar, Calendar *existingCal) start = false; - qDebug("ReadTodo %d ", ++ccc); + qDebug("ReadTodo %d ", ccc); handler.readTodo( existingCal, &ToDo, &s); @@ -870,15 +875,38 @@ bool PhoneFormat::load( Calendar *calendar, Calendar *existingCal) } -void PhoneFormat::event2GSM( Event* ev, GSM_CalendarEntry*Note ) +#include <qcstring.h> +void PhoneFormat::event2GSM( Calendar *cal,Event* ev, GSM_CalendarEntry*Note ) { - QString eText = vfconverter.eventToString( ev ); + QString eText = vfconverter.eventToString( ev, cal ); int pos = 0; GSM_ToDoEntry dummy; - GSM_DecodeVCALENDAR_VTODO( (unsigned char*)eText.latin1(), &pos, Note , &dummy, Nokia_VCalendar, Nokia_VToDo ); + qDebug( "Convert event"); + QByteArray ba; + QDataStream s ( ba, IO_WriteOnly ); + s << eText.utf8(); + GSM_DecodeVCALENDAR_VTODO( (unsigned char*) ba.data(), &pos, Note , &dummy, Nokia_VCalendar, Nokia_VToDo ); + qDebug( "Convert event done"); + Note->Location = 0; + QString loc = ev->getID(mProfileName); + if ( !loc.isEmpty() ){ + Note->Location = loc.toInt(); + } + } -void PhoneFormat::todo2GSM( Todo* todo, GSM_ToDoEntry *gsmTodo ) +void PhoneFormat::todo2GSM( Calendar *cal, Todo* todo, GSM_ToDoEntry *gsmTodo ) { - QString tText = vfconverter.todoToString( todo ); + qDebug( "Convert todo1"); + QString tText = vfconverter.todoToString( todo, cal ); int pos = 0; GSM_CalendarEntry dummy; - GSM_DecodeVCALENDAR_VTODO( (unsigned char*)tText.latin1(), &pos, &dummy, gsmTodo, Nokia_VCalendar, Nokia_VToDo ); + QByteArray ba; + QDataStream s ( ba, IO_WriteOnly ); + s << tText.utf8(); + GSM_DecodeVCALENDAR_VTODO( (unsigned char*) ba.data(), &pos, &dummy, gsmTodo, Nokia_VCalendar, Nokia_VToDo ); + qDebug( "Convert todo done "); + gsmTodo->Location = 0; + QString loc = todo->getID(mProfileName); + if ( !loc.isEmpty() ){ + gsmTodo->Location = loc.toInt(); + } + } @@ -897,2 +925,3 @@ bool PhoneFormat::save( Calendar *calendar) { + return true; GSM_StateMachine s; @@ -902,5 +931,5 @@ bool PhoneFormat::save( Calendar *calendar) s.ConfigNum = 0; - QLabel status ( i18n("Writing data. Opening device ..."), 0 ); + QLabel status ( i18n(" Opening device ..."), 0 ); int w = status.sizeHint().width()+20 ; - if ( w < 200 ) w = 200; + if ( w < 200 ) w = 230; int h = status.sizeHint().height()+20 ; @@ -908,3 +937,3 @@ bool PhoneFormat::save( Calendar *calendar) int dh = QApplication::desktop()->height(); - status.setCaption(i18n("Writing Phone Data") ); + status.setCaption(i18n("Writing to phone...") ); status.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); @@ -925,6 +954,6 @@ bool PhoneFormat::save( Calendar *calendar) Event* ev = er.first(); - QString message = i18n("Processing event # "); + QString message = i18n(" Processing event # "); int procCount = 0; - while ( ev ) { - //qDebug("i %d ", ++i); + bool planB = true;// false; + while ( ev && ! planB) { if ( ev->tempSyncStat() != SYNC_TEMPSTATE_NEW_EXTERNAL ) { // event was changed during sync or is a new one @@ -933,5 +962,11 @@ bool PhoneFormat::save( Calendar *calendar) qApp->processEvents(); - event2GSM( ev, &Note ); + qDebug("event1 %d ", procCount); + event2GSM( calendar, ev, &Note ); if ( ev->tempSyncStat() == SYNC_TEMPSTATE_DELETE ) { // delete error = Phone->DeleteCalendar(&s, &Note); + if (error == ERR_NOTSUPPORTED || error == ERR_NOTIMPLEMENTED) { + planB = true; + qDebug(" e delete planB %d ", error); + break; + } } @@ -943,2 +978,8 @@ bool PhoneFormat::save( Calendar *calendar) error = Phone->SetCalendar(&s, &Note); + if (error == ERR_NOTSUPPORTED || error == ERR_NOTIMPLEMENTED) { + planB = true; + qDebug(" e change planB %d ", error); + break; + } + qDebug("Change Calendar. Location %d status: %d",Note.Location, error ); } @@ -949,4 +990,6 @@ bool PhoneFormat::save( Calendar *calendar) // pending get empty slots - while ( ev ) { + int loc = 0; + while ( ev && ! planB) { if ( ev->tempSyncStat() != SYNC_TEMPSTATE_NEW_EXTERNAL && ev->tempSyncStat() != SYNC_TEMPSTATE_DELETE) { + qDebug("event2 %d ", procCount); if ( ev->getID(mProfileName).isEmpty() ) { @@ -956,7 +999,13 @@ bool PhoneFormat::save( Calendar *calendar) //ev->setID(mProfileName, QString::number( newID )); - event2GSM( ev, &Note ); - Note.Location = 0; + event2GSM( calendar, ev, &Note ); + ++loc; + Note.Location = loc; error = Phone->AddCalendar(&s, &Note); + if (error == ERR_NOTSUPPORTED || error == ERR_NOTIMPLEMENTED) { + planB = true; + qDebug(" e add planB %d ", error); + break; + } ev->setID( mProfileName, QString::number( Note.Location ) ); - qDebug("New Calendar. Location %d ",Note.Location ); + qDebug("New Calendar. Location %d stat %d %d",Note.Location ,error, ERR_UNKNOWN); afterSave( ev ); @@ -968,2 +1017,57 @@ bool PhoneFormat::save( Calendar *calendar) } + + + if ( planB ) { + qDebug("delete all calendar..."); + status.setText ( i18n("Deleting all calendar...")); + qApp->processEvents(); + error=Phone->DeleteAllCalendar(&s); + if (error == ERR_NOTSUPPORTED || error == ERR_NOTIMPLEMENTED) { + message = i18n(" Deleting event # "); + procCount = 0; + while (1) { + status.setText ( message + QString::number ( ++procCount ) ); + qApp->processEvents(); + qDebug("deleting event ... %d", procCount); + error = Phone->GetNextCalendar(&s,&Note,true); + if (error != ERR_NONE) break; + error = Phone->DeleteCalendar(&s,&Note); + } + qDebug("deleting calendar ... finished"); + } else { + status.setText ( i18n("All calendar deleted!")); + qDebug("all cal deleted"); + } + bool planC = false; + ev = er.first(); + procCount = 0; + message = i18n(" Writing event # "); + while ( ev && ! planC) { + status.setText ( message + QString::number ( ++procCount ) ); + qApp->processEvents(); + event2GSM( calendar, ev, &Note ); + Note.Location = procCount; + error=Phone->AddCalendar(&s,&Note); + if (error != ERR_NONE ) { + // we have currently no planC :-( + // planC = true; + //qDebug("add planC %d ", error); + //break; + // we remove the ID such that this todo is not deleted after next sync + ev->removeID(mProfileName); + ev->setTempSyncStat( SYNC_TEMPSTATE_NEW_ID ); + qDebug("error :cal adding loc %d planB stat %d ", Note.Location ,error); + } else { + qDebug("cal adding loc %d planB stat %d ", Note.Location ,error); + ev->setID(mProfileName, QString::number( Note.Location )); + afterSave( ev ); + } + ev = er.next(); + } + if ( planC ) { + qDebug("writing cal went wrong..."); + + // we have currently no planC :-( + } + } GSM_ToDoEntry ToDoEntry; @@ -972,13 +1076,20 @@ bool PhoneFormat::save( Calendar *calendar) - message = i18n("Processing todo # "); + message = i18n(" Processing todo # "); procCount = 0; - while ( to ) { + planB = false; + while ( to && ! planB ) { if ( to->tempSyncStat() != SYNC_TEMPSTATE_NEW_EXTERNAL ) { + qDebug("todo3 %d ", procCount); status.setText ( message + QString::number ( ++procCount ) ); qApp->processEvents(); - todo2GSM( to, &ToDoEntry ); + qDebug("todo5 %d ", procCount); + todo2GSM( calendar, to, &ToDoEntry ); if ( to->tempSyncStat() == SYNC_TEMPSTATE_DELETE ) { // delete error=Phone->DeleteToDo(&s,&ToDoEntry); + if (error == ERR_NOTSUPPORTED || error == ERR_NOTIMPLEMENTED) { + planB = true; + qDebug("delete planB %d ", error); + } } - else if ( to->getID("Sharp_DTM").isEmpty() ) { // add new + else if ( to->getID(mProfileName).isEmpty() ) { // add new ; @@ -987,2 +1098,7 @@ bool PhoneFormat::save( Calendar *calendar) error=Phone->SetToDo(&s,&ToDoEntry); + if (error == ERR_NOTSUPPORTED || error == ERR_NOTIMPLEMENTED) { + planB = true; + qDebug("set planB %d ", error); + } + qDebug("Old Todo. Location %d %d",ToDoEntry.Location , error ); } @@ -994,4 +1110,6 @@ bool PhoneFormat::save( Calendar *calendar) to = tl.first(); - while ( to ) { + while ( to && ! planB ) { + qDebug("todo2 %d ", procCount); if ( to->tempSyncStat() != SYNC_TEMPSTATE_NEW_EXTERNAL && to->tempSyncStat() != SYNC_TEMPSTATE_DELETE) { + qDebug("todo4 %d ", procCount); if ( to->getID(mProfileName).isEmpty() ) { @@ -1001,8 +1119,12 @@ bool PhoneFormat::save( Calendar *calendar) //to->setID(mProfileName, QString::number( newID )); - todo2GSM( to, &ToDoEntry ); + todo2GSM( calendar,to, &ToDoEntry ); ToDoEntry.Location = 0; error=Phone->AddToDo(&s,&ToDoEntry); + if (error == ERR_NOTSUPPORTED || error == ERR_NOTIMPLEMENTED) { + planB = true; + qDebug("new planB %d ", error); + } to->setID(mProfileName, QString::number( ToDoEntry.Location )); afterSave( to ); - qDebug("New Todo. Location %d ",ToDoEntry.Location ); + qDebug("New Todo. Location %d %d",ToDoEntry.Location, error ); } else { @@ -1013,2 +1135,41 @@ bool PhoneFormat::save( Calendar *calendar) } + if ( planB ) { + qDebug("delete all ..."); + error=Phone->DeleteAllToDo(&s); + if (error == ERR_NOTSUPPORTED || error == ERR_NOTIMPLEMENTED) { + while (1) { + qDebug("deleting todo ..."); + error = Phone->GetNextToDo(&s,&ToDoEntry,true); + if (error != ERR_NONE) break; + error = Phone->DeleteToDo(&s,&ToDoEntry); + } + qDebug("deleting todo ... finished"); + } else { + qDebug("all todo deleted"); + } + bool planC = false; + to = tl.first(); + while ( to && ! planC ) { + todo2GSM( calendar,to, &ToDoEntry ); + ToDoEntry.Location = 0; + error=Phone->AddToDo(&s,&ToDoEntry); + if (error == ERR_NOTSUPPORTED || error == ERR_NOTIMPLEMENTED) { + // we have currently no planC :-( + // planC = true; + //qDebug("add planC %d ", error); + //break; + // we remove the ID such that this todo is not deleted after next sync + to->removeID(mProfileName); + to->setTempSyncStat( SYNC_TEMPSTATE_NEW_ID ); + } else { + qDebug("adding %d planB %d ", ToDoEntry.Location ,error); + to->setID(mProfileName, QString::number( ToDoEntry.Location )); + afterSave( to ); + } + to = tl.next(); + } + if ( planC ) { + // we have currently no planC :-( + } + } return true; diff --git a/libkcal/phoneformat.h b/libkcal/phoneformat.h index 33b2091..2c2e51c 100644 --- a/libkcal/phoneformat.h +++ b/libkcal/phoneformat.h @@ -54,4 +54,4 @@ class PhoneFormat : public QObject { VCalFormat vfconverter; - void event2GSM( Event* ev, GSM_CalendarEntry*Note ); - void todo2GSM( Todo* ev, GSM_ToDoEntry *ToDo ); + void event2GSM( Calendar *, Event* ev, GSM_CalendarEntry*Note ); + void todo2GSM( Calendar *, Todo* ev, GSM_ToDoEntry *ToDo ); int initDevice(GSM_StateMachine *s); diff --git a/libkcal/vcalformat.cpp b/libkcal/vcalformat.cpp index 1167e58..076cd3f 100644 --- a/libkcal/vcalformat.cpp +++ b/libkcal/vcalformat.cpp @@ -47,2 +47,3 @@ VCalFormat::VCalFormat() { + mCalendar = 0; } @@ -167,5 +168,6 @@ bool VCalFormat::fromString( Calendar *calendar, const QString &text ) -QString VCalFormat::eventToString( Event * event) +QString VCalFormat::eventToString( Event * event, Calendar *calendar) { if ( !event ) return QString::null; + mCalendar = calendar; VObject *vevent = eventToVEvent( event ); @@ -176,5 +178,6 @@ QString VCalFormat::eventToString( Event * event) } -QString VCalFormat::todoToString( Todo * todo ) +QString VCalFormat::todoToString( Todo * todo, Calendar *calendar ) { if ( !todo ) return QString::null; + mCalendar = calendar; VObject *vevent = eventToVTodo( todo ); diff --git a/libkcal/vcalformat.h b/libkcal/vcalformat.h index 8490125..7b9ca26 100644 --- a/libkcal/vcalformat.h +++ b/libkcal/vcalformat.h @@ -64,4 +64,4 @@ class VCalFormat : public CalFormat { QString toString( Calendar * ); - QString eventToString( Event * ); - QString todoToString( Todo * ); + QString eventToString( Event *, Calendar *calendar ); + QString todoToString( Todo * ,Calendar *calendar ); |