-rw-r--r-- | libkcal/phoneformat.cpp | 194 | ||||
-rw-r--r-- | libkcal/phoneformat.h | 4 |
2 files changed, 165 insertions, 33 deletions
diff --git a/libkcal/phoneformat.cpp b/libkcal/phoneformat.cpp index b8fed47..e43a507 100644 --- a/libkcal/phoneformat.cpp +++ b/libkcal/phoneformat.cpp @@ -81,5 +81,4 @@ public: GSM_Category Category; int error; - QString completedString = "no"; for (j=0;j<ToDo->EntriesNum;j++) { @@ -93,5 +92,4 @@ public: if ( ToDo->Entries[j].Number == 1 ) { todo->setCompleted( true ); - completedString = "yes"; } else { @@ -183,16 +181,6 @@ public: } // csum ***************************************** - QStringList attList; uint cSum; - if ( todo->hasDueDate() ) - attList << dtToString ( todo->dtDue() ); - attList << QString::number( id ); - attList << todo->summary(); - attList << completedString; - attList << QString::number( todo->priority() ); - attList << alarmString; - attList << todo->categoriesStr(); - attList << todo->secrecyStr(); - cSum = PhoneFormat::getCsum(attList ); + cSum = PhoneFormat::getCsumTodo( todo ); todo->setCsum( mProfileName, QString::number( cSum )); todo->setTempSyncStat( SYNC_TEMPSTATE_NEW_EXTERNAL ); @@ -461,5 +449,4 @@ public: categoryList << getCategory( Note ); event->setCategories( categoryList ); - QString alarmString = "na"; // strange 0 semms to mean: alarm enabled if ( alarm ) { @@ -475,5 +462,4 @@ public: int alarmOffset = alarmDt.secsTo( event->dtStart() ); alarm->setStartOffset( -alarmOffset ); - alarmString = QString::number( alarmOffset ); } else { Alarm *alarm; @@ -486,16 +472,7 @@ public: } // csum ***************************************** - QStringList attList; + uint cSum; - attList << dtToString ( event->dtStart() ); - attList << dtToString ( event->dtEnd() ); - attList << QString::number( id ); - attList << event->summary(); - attList << event->location(); - attList << alarmString; - attList << recurString; - attList << event->categoriesStr(); - attList << event->secrecyStr(); - cSum = PhoneFormat::getCsum(attList ); + cSum = PhoneFormat::getCsumEvent( event ); event->setCsum( mProfileName, QString::number( cSum )); event->setTempSyncStat( SYNC_TEMPSTATE_NEW_EXTERNAL ); @@ -524,5 +501,5 @@ public: } - QString dtToString( const QDateTime& dti, bool useTZ = false ) + static QString dtToString( const QDateTime& dti, bool useTZ = false ) { QString datestr; @@ -630,4 +607,135 @@ int PhoneFormat::initDevice(GSM_StateMachine *s) return error; } +ulong PhoneFormat::getCsumTodo( Todo* todo ) +{ + QStringList attList; + if ( todo->hasDueDate() ) + attList << PhoneParser::dtToString ( todo->dtDue() ); + attList << todo->summary(); + QString completedString = "no"; + if ( todo->isCompleted() ) + completedString = "yes"; + attList << completedString; + attList << QString::number( todo->priority() ); + QString alarmString = "na"; + Alarm *alarm; + if ( todo->alarms().count() > 0 ) { + alarm = todo->alarms().first(); + if ( alarm->enabled() ) { + alarmString = QString::number(alarm->startOffset().asSeconds() ); + } + } + attList << alarmString; + attList << todo->categoriesStr(); + attList << todo->secrecyStr(); + return PhoneFormat::getCsum(attList ); + +} +ulong PhoneFormat::getCsumEvent( Event* event ) +{ + QStringList attList; + attList << PhoneParser::dtToString ( event->dtStart() ); + attList << PhoneParser::dtToString ( event->dtEnd() ); + attList << event->summary(); + attList << event->location(); + QString alarmString = "na"; + Alarm *alarm; + if ( event->alarms().count() > 0 ) { + alarm = event->alarms().first(); + if ( alarm->enabled() ) { + alarmString = QString::number( alarm->startOffset().asSeconds() ); + } + } + attList << alarmString; + Recurrence* rec = event->recurrence(); + QStringList list; + bool writeEndDate = false; + switch ( rec->doesRecur() ) + { + case Recurrence::rDaily: // 0 + list.append( "0" ); + list.append( QString::number( rec->frequency() ));//12 + list.append( "0" ); + list.append( "0" ); + writeEndDate = true; + break; + case Recurrence::rWeekly:// 1 + list.append( "1" ); + list.append( QString::number( rec->frequency()) );//12 + list.append( "0" ); + { + int days = 0; + QBitArray weekDays = rec->days(); + int i; + for( i = 1; i <= 7; ++i ) { + if ( weekDays[i-1] ) { + days += 1 << (i-1); + } + } + list.append( QString::number( days ) ); + } + //pending weekdays + writeEndDate = true; + + break; + case Recurrence::rMonthlyPos:// 2 + list.append( "2" ); + list.append( QString::number( rec->frequency()) );//12 + + writeEndDate = true; + { + int count = 1; + QPtrList<Recurrence::rMonthPos> rmp; + rmp = rec->monthPositions(); + if ( rmp.first()->negative ) + count = 5 - rmp.first()->rPos - 1; + else + count = rmp.first()->rPos - 1; + list.append( QString::number( count ) ); + + } + + list.append( "0" ); + break; + case Recurrence::rMonthlyDay:// 3 + list.append( "3" ); + list.append( QString::number( rec->frequency()) );//12 + list.append( "0" ); + list.append( "0" ); + writeEndDate = true; + break; + case Recurrence::rYearlyMonth://4 + list.append( "4" ); + list.append( QString::number( rec->frequency()) );//12 + list.append( "0" ); + list.append( "0" ); + writeEndDate = true; + break; + + default: + list.append( "255" ); + list.append( QString() ); + list.append( "0" ); + list.append( QString() ); + list.append( "0" ); + list.append( "20991231T000000" ); + break; + } + if ( writeEndDate ) { + + if ( rec->endDate().isValid() ) { // 15 + 16 + list.append( "1" ); + list.append( PhoneParser::dtToString( rec->endDate()) ); + } else { + list.append( "0" ); + list.append( "20991231T000000" ); + } + + } + attList << list.join(""); + attList << event->categoriesStr(); + attList << event->secrecyStr(); + return PhoneFormat::getCsum(attList ); +} ulong PhoneFormat::getCsum( const QStringList & attList) { @@ -799,4 +907,15 @@ void PhoneFormat::todo2GSM( Todo* todo, GSM_ToDoEntry *gsm ) #endif } +void PhoneFormat::afterSave( Incidence* inc) +{ + uint csum; + if ( inc->type() == "Event") + csum = PhoneFormat::getCsumEvent( (Event*) inc ); + else + csum = PhoneFormat::getCsumTodo( (Todo*) inc ); + inc->setCsum( mProfileName, QString::number( csum )); + inc->setTempSyncStat( SYNC_TEMPSTATE_NEW_ID ); + +} bool PhoneFormat::save( Calendar *calendar) { @@ -846,5 +965,5 @@ bool PhoneFormat::save( Calendar *calendar) } else { // change existing - error = Phone->AddCalendar(&s, &Note); + error = Phone->SetCalendar(&s, &Note); } } @@ -858,8 +977,13 @@ bool PhoneFormat::save( Calendar *calendar) status.setText ( message + QString::number ( ++procCount ) ); qApp->processEvents(); - int newID ;//= pending - ev->setID(mProfileName, QString::number( newID )); + //int newID ;//= pending + //ev->setID(mProfileName, QString::number( newID )); event2GSM( ev, &Note ); + Note.Location = 0; error = Phone->AddCalendar(&s, &Note); + ev->setID( mProfileName, QString::number( Note.Location ) ); + afterSave( ev ); + } else { + afterSave( ev ); // setting temp sync stat for changed items } } @@ -897,8 +1021,14 @@ bool PhoneFormat::save( Calendar *calendar) status.setText ( message + QString::number ( ++procCount ) ); qApp->processEvents(); - int newID ;//= pending - to->setID(mProfileName, QString::number( newID )); + //int newID ;//= pending + //to->setID(mProfileName, QString::number( newID )); todo2GSM( to, &ToDoEntry ); + ToDoEntry.Location = 0; error=Phone->AddToDo(&s,&ToDoEntry); + to->setID(mProfileName, QString::number( ToDoEntry.Location )); + afterSave( to ); + qDebug("New Todo. Location %d ",ToDoEntry.Location ); + } else { + afterSave( to ); } } diff --git a/libkcal/phoneformat.h b/libkcal/phoneformat.h index 1472880..7b7dd04 100644 --- a/libkcal/phoneformat.h +++ b/libkcal/phoneformat.h @@ -48,5 +48,6 @@ class PhoneFormat : public QObject { QString toString( Calendar * ); static ulong getCsum( const QStringList & ); - + static ulong getCsumTodo( Todo* to ); + static ulong getCsumEvent( Event* ev ); private: void event2GSM( Event* ev, GSM_CalendarEntry*Note ); @@ -57,4 +58,5 @@ class PhoneFormat : public QObject { QString dtToGSM( const QDateTime& dt, bool useTZ = true ); QString mProfileName, mDevice, mConnection, mModel; + void afterSave( Incidence* ); }; |