summaryrefslogtreecommitdiffabout
path: root/libkcal
authorzautrix <zautrix>2004-08-09 16:25:52 (UTC)
committer zautrix <zautrix>2004-08-09 16:25:52 (UTC)
commitecdcad49975976ff877ff506fae3b14934c01898 (patch) (side-by-side diff)
tree55d79a2b7d90c4c7ce097063449946f2b2504d6a /libkcal
parentad99dd380750834b3ccc4dd6fdcdd446ca5ba7ee (diff)
downloadkdepimpi-ecdcad49975976ff877ff506fae3b14934c01898.zip
kdepimpi-ecdcad49975976ff877ff506fae3b14934c01898.tar.gz
kdepimpi-ecdcad49975976ff877ff506fae3b14934c01898.tar.bz2
more phone sync
Diffstat (limited to 'libkcal') (more/less context) (ignore whitespace changes)
-rw-r--r--libkcal/phoneformat.cpp194
-rw-r--r--libkcal/phoneformat.h4
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
@@ -80,7 +80,6 @@ public:
QDateTime alarmDt;
GSM_Category Category;
int error;
- QString completedString = "no";
for (j=0;j<ToDo->EntriesNum;j++) {
//qDebug(" for todo %d",ToDo->Location );
@@ -92,7 +91,6 @@ public:
case TODO_COMPLETED:
if ( ToDo->Entries[j].Number == 1 ) {
todo->setCompleted( true );
- completedString = "yes";
}
else {
todo->setCompleted( false );
@@ -182,18 +180,8 @@ 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 );
mCalendar->addTodo( todo);
@@ -460,7 +448,6 @@ public:
QStringList categoryList;
categoryList << getCategory( Note );
event->setCategories( categoryList );
- QString alarmString = "na";
// strange 0 semms to mean: alarm enabled
if ( alarm ) {
Alarm *alarm;
@@ -474,7 +461,6 @@ public:
alarm->setEnabled( true );
int alarmOffset = alarmDt.secsTo( event->dtStart() );
alarm->setStartOffset( -alarmOffset );
- alarmString = QString::number( alarmOffset );
} else {
Alarm *alarm;
if ( event->alarms().count() > 0 ) {
@@ -485,18 +471,9 @@ 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 );
mCalendar->addEvent( event);
@@ -523,7 +500,7 @@ public:
}
- QString dtToString( const QDateTime& dti, bool useTZ = false )
+ static QString dtToString( const QDateTime& dti, bool useTZ = false )
{
QString datestr;
QString timestr;
@@ -629,6 +606,137 @@ int PhoneFormat::initDevice(GSM_StateMachine *s)
int error=GSM_InitConnection(s,3);
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)
{
int max = attList.count() -1;
@@ -798,6 +906,17 @@ void PhoneFormat::todo2GSM( Todo* todo, GSM_ToDoEntry *gsm )
return list.join(",");
#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)
{
GSM_StateMachine s;
@@ -845,7 +964,7 @@ bool PhoneFormat::save( Calendar *calendar)
}
else { // change existing
- error = Phone->AddCalendar(&s, &Note);
+ error = Phone->SetCalendar(&s, &Note);
}
}
ev = er.next();
@@ -857,10 +976,15 @@ bool PhoneFormat::save( Calendar *calendar)
if ( ev->getID(mProfileName).isEmpty() ) {
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
}
}
ev = er.next();
@@ -896,10 +1020,16 @@ bool PhoneFormat::save( Calendar *calendar)
if ( to->getID(mProfileName).isEmpty() ) {
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 );
}
}
to = tl.next();
diff --git a/libkcal/phoneformat.h b/libkcal/phoneformat.h
index 1472880..7b7dd04 100644
--- a/libkcal/phoneformat.h
+++ b/libkcal/phoneformat.h
@@ -47,7 +47,8 @@ class PhoneFormat : public QObject {
bool fromString( Calendar *, const QString & );
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 );
void todo2GSM( Todo* ev, GSM_ToDoEntry *ToDo );
@@ -56,6 +57,7 @@ class PhoneFormat : public QObject {
QString getTodoString( Todo* );
QString dtToGSM( const QDateTime& dt, bool useTZ = true );
QString mProfileName, mDevice, mConnection, mModel;
+ void afterSave( Incidence* );
};
}