author | zautrix <zautrix> | 2004-09-12 19:26:13 (UTC) |
---|---|---|
committer | zautrix <zautrix> | 2004-09-12 19:26:13 (UTC) |
commit | 5b434dd78f71bcea5e6067fc8ae0faaaea313f9d (patch) (side-by-side diff) | |
tree | ed532e602a3b503b72a46ea18d40e3a5dc97aa3f | |
parent | bc4153a99e205f43d0144e2e910730dd1a14d402 (diff) | |
download | kdepimpi-5b434dd78f71bcea5e6067fc8ae0faaaea313f9d.zip kdepimpi-5b434dd78f71bcea5e6067fc8ae0faaaea313f9d.tar.gz kdepimpi-5b434dd78f71bcea5e6067fc8ae0faaaea313f9d.tar.bz2 |
phone fixes
-rw-r--r-- | korganizer/calendarview.cpp | 23 | ||||
-rw-r--r-- | libkcal/alarm.cpp | 16 | ||||
-rw-r--r-- | libkcal/alarm.h | 2 | ||||
-rw-r--r-- | libkcal/phoneformat.cpp | 58 |
4 files changed, 63 insertions, 36 deletions
diff --git a/korganizer/calendarview.cpp b/korganizer/calendarview.cpp index cfd9290..d5d31e2 100644 --- a/korganizer/calendarview.cpp +++ b/korganizer/calendarview.cpp @@ -1119,33 +1119,43 @@ bool CalendarView::synchronizeCalendar( Calendar* local, Calendar* remote, int remote->addIncidence( inL->clone() ); } } } } } inL = el.next(); } + int delFut = 0; if ( KOPrefs::instance()->mWriteBackInFuture ) { er = remote->rawIncidences(); inR = er.first(); QDateTime dt; QDateTime cur = QDateTime::currentDateTime(); QDateTime end = cur.addSecs( KOPrefs::instance()->mWriteBackInFuture * 3600 *24 *7 ); while ( inR ) { if ( inR->type() == "Todo" ) { Todo * t = (Todo*)inR; if ( t->hasDueDate() ) dt = t->dtDue(); else dt = cur.addSecs( 62 ); } - else dt = inR->dtStart(); - if ( dt < cur || dt > end ) + else if (inR->type() == "Event" ) { + bool ok; + dt = inR->getNextOccurence( cur, &ok ); + if ( !ok ) + dt = cur.addSecs( -62 ); + } + else + dt = inR->dtStart(); + if ( dt < cur || dt > end ) { remote->deleteIncidence( inR ); + ++delFut; + } inR = er.next(); } } bar.hide(); mLastCalendarSync = QDateTime::currentDateTime().addSecs( 1 ); eventLSync->setReadOnly( false ); eventLSync->setDtStart( mLastCalendarSync ); eventRSync->setDtStart( mLastCalendarSync ); @@ -1153,16 +1163,21 @@ bool CalendarView::synchronizeCalendar( Calendar* local, Calendar* remote, int eventRSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) ); eventRSync->setLocation( i18n("Remote from: ")+mCurrentSyncName ) ; eventLSync->setLocation(i18n("Local from: ") + mCurrentSyncName ); eventLSync->setReadOnly( true ); if ( mGlobalSyncMode == SYNC_MODE_NORMAL) remote->addEvent( eventRSync ); QString mes; mes .sprintf( i18n("Synchronization summary:\n\n %d items added to local\n %d items added to remote\n %d items updated on local\n %d items updated on remote\n %d items deleted on local\n %d items deleted on remote\n"),addedEvent, addedEventR, changedLocal, changedRemote, deletedEventL, deletedEventR ); + QString delmess; + if ( delFut ) { + delmess.sprintf( i18n("%d items skipped on remote,\nbecause they are in the past or\nmore than %d weeks in the future.\n"),delFut, KOPrefs::instance()->mWriteBackInFuture ); + mes += delmess; + } if ( KOPrefs::instance()->mShowSyncSummary ) { KMessageBox::information(this, mes, i18n("KO/Pi Synchronization") ); } qDebug( mes ); mCalendar->checkAlarmForIncidence( 0, true ); return syncOK; } @@ -1240,22 +1255,20 @@ void CalendarView::syncExternal( int mode ) syncOK = synchronizeCalendar( mCalendar, calendar, KOPrefs::instance()->mSyncAlgoPrefs ); getEventViewerDialog()->setSyncMode( false ); qApp->processEvents(); if ( syncOK ) { if ( KOPrefs::instance()->mWriteBackFile ) { QPtrList<Incidence> iL = mCalendar->rawIncidences(); Incidence* inc = iL.first(); - /* obsolete while ( inc ) { - inc->setZaurusStat( inc->revision () ); + inc->removeID(mCurrentSyncDevice); inc = iL.next(); } - */ #ifndef DESKTOP_VERSION if ( sharpFormat ) sharpFormat->save(calendar); #endif if ( phoneFormat ) phoneFormat->save(calendar); iL = calendar->rawIncidences(); inc = iL.first(); diff --git a/libkcal/alarm.cpp b/libkcal/alarm.cpp index 07812c2..29e6205 100644 --- a/libkcal/alarm.cpp +++ b/libkcal/alarm.cpp @@ -295,16 +295,32 @@ QString Alarm::text() const void Alarm::setTime(const QDateTime &alarmTime) { mAlarmTime = alarmTime; mHasTime = true; mParent->updated(); } +int Alarm::offset() +{ + if ( hasTime() ) { + if (mParent->type()=="Todo") { + Todo *t = static_cast<Todo*>(mParent); + return t->dtDue().secsTo( mAlarmTime ) ; + } else + return mParent->dtStart().secsTo( mAlarmTime ) ; + } + else + { + return mOffset.asSeconds(); + } + +} + QDateTime Alarm::time() const { if ( hasTime() ) return mAlarmTime; else { if (mParent->type()=="Todo") { diff --git a/libkcal/alarm.h b/libkcal/alarm.h index ae2eca3..682b626 100644 --- a/libkcal/alarm.h +++ b/libkcal/alarm.h @@ -53,17 +53,17 @@ class Alarm : public CustomProperties /** Set the type of the alarm. If the specified type is different from the current type of the alarm, the alarm's type-specific properties are initialised to null. @param type type of alarm. */ void setType(Type type); /** Return the type of the alarm */ Type type() const; - + int offset(); /** Set the alarm to be a display alarm. @param text text to display when the alarm is triggered. */ void setDisplayAlarm(const QString &text); /** Set the text to be displayed when the alarm is triggered. Ignored if the alarm is not a display alarm. */ void setText(const QString &text); diff --git a/libkcal/phoneformat.cpp b/libkcal/phoneformat.cpp index 6d0da5c..178a63e 100644 --- a/libkcal/phoneformat.cpp +++ b/libkcal/phoneformat.cpp @@ -133,17 +133,17 @@ ulong PhoneFormat::getCsumTodo( Todo* todo ) if( prio == 2 ) prio = 1; if (prio == 4 ) prio = 5 ; attList << QString::number( prio ); QString alarmString = "na"; Alarm *alarm; if ( todo->alarms().count() > 0 ) { alarm = todo->alarms().first(); if ( alarm->enabled() ) { - alarmString = QString::number(alarm->startOffset().asSeconds() ); + alarmString = QString::number(alarm->offset() ); } } attList << alarmString; attList << todo->categoriesStr(); attList << todo->secrecyStr(); return PhoneFormat::getCsum(attList ); } @@ -154,17 +154,17 @@ ulong PhoneFormat::getCsumEvent( Event* event ) 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() ); + alarmString = QString::number( alarm->offset() ); } } attList << alarmString; Recurrence* rec = event->recurrence(); QStringList list; bool writeEndDate = false; switch ( rec->doesRecur() ) { @@ -272,18 +272,18 @@ ulong PhoneFormat::getCsum( const QStringList & attList) mul = mul * mul; int ii = i+1; add = add * mul *ii*ii*ii; cSum += add; } } } - QString dump = attList.join(","); - qDebug("csum: %d %s", cSum,dump.latin1()); + //QString dump = attList.join(","); + //qDebug("csum: %d %s", cSum,dump.latin1()); return cSum; } //extern "C" GSM_Error GSM_InitConnection(GSM_StateMachine *s, int ReplyNum); #include <stdlib.h> #define DEBUGMODE false bool PhoneFormat::load( Calendar *calendar, Calendar *existingCal) @@ -296,17 +296,16 @@ bool PhoneFormat::load( Calendar *calendar, Calendar *existingCal) fileName = "/tmp/kdepimtemp.vcs"; #endif QString command ="./kammu --backup " + fileName + " -yes" ; int ret = system ( command.latin1() ); if ( ret != 0 ) { qDebug("Error::command returned %d", ret); return false; } - qDebug("Command returned %d", ret); VCalFormat vfload; vfload.setLocalTime ( true ); qDebug("loading file ..."); if ( ! vfload.load( calendar, fileName ) ) return false; QPtrList<Event> er = calendar->rawEvents(); Event* ev = er.first(); @@ -343,17 +342,17 @@ bool PhoneFormat::load( Calendar *calendar, Calendar *existingCal) QStringList cat = ev->categories(); if ( cat.contains( "MeetingDEF" )) { ev->setCategories( QStringList() ); } int id = ev->pilotId(); Todo *event; event = existingCal->todo( mProfileName ,QString::number( id ) ); if ( event ) { - qDebug("copy todo %s ", event->summary().latin1()); + //qDebug("copy todo %s ", event->summary().latin1()); event = (Todo*)event->clone(); copyTodo( event, ev ); calendar->deleteTodo( ev ); calendar->addTodo( event); } else event = ev; @@ -375,25 +374,27 @@ void PhoneFormat::copyEvent( Event* to, Event* from ) to->setDtEnd( from->dtEnd() ); if ( !from->location().isEmpty() ) to->setLocation( from->location() ); if ( !from->description().isEmpty() ) to->setDescription( from->description() ); if ( !from->summary().isEmpty() ) to->setSummary( from->summary() ); - QPtrListIterator<Alarm> it( from->alarms() ); - if ( it.current() ) + if ( from->alarms().count() ) { to->clearAlarms(); - const Alarm *a; - while( (a = it.current()) ) { - Alarm *b = new Alarm( *a ); - b->setParent( to ); - to->addAlarm( b ); - ++it; + Alarm *a = from->alarms().first(); + Alarm *b = to->newAlarm( ); + b->setEnabled( a->enabled() ); + if ( a->hasStartOffset() ) { + b->setStartOffset( a->startOffset() ); + } + if ( a->hasTime() ) + b->setTime( a->time() ); + } QStringList cat = to->categories(); QStringList catFrom = from->categories(); QString nCat; int iii; for ( iii = 0; iii < catFrom.count();++iii ) { nCat = catFrom[iii]; if ( !nCat.isEmpty() ) @@ -415,26 +416,27 @@ void PhoneFormat::copyTodo( Todo* to, Todo* from ) to->setDtDue( from->dtDue() ); if ( !from->location().isEmpty() ) to->setLocation( from->location() ); if ( !from->description().isEmpty() ) to->setDescription( from->description() ); if ( !from->summary().isEmpty() ) to->setSummary( from->summary() ); - QPtrListIterator<Alarm> it( from->alarms() ); - if ( it.current() ) + if ( from->alarms().count() ) { to->clearAlarms(); - const Alarm *a; - while( (a = it.current()) ) { - Alarm *b = new Alarm( *a ); - b->setParent( to ); - to->addAlarm( b ); - ++it; + Alarm *a = from->alarms().first(); + Alarm *b = to->newAlarm( ); + b->setEnabled( a->enabled() ); + if ( a->hasStartOffset() ) + b->setStartOffset( a->startOffset() ); + if ( a->hasTime() ) + b->setTime( a->time() ); } + QStringList cat = to->categories(); QStringList catFrom = from->categories(); QString nCat; int iii; for ( iii = 0; iii < catFrom.count();++iii ) { nCat = catFrom[iii]; if ( !nCat.isEmpty() ) if ( !cat.contains( nCat )) { @@ -528,20 +530,17 @@ bool PhoneFormat::save( Calendar *calendar) int ret; while ( (ret = system ( command.latin1())) != 0 ) { qDebug("Error S::command returned %d. asking users", ret); int retval = KMessageBox::warningContinueCancel(0, i18n("Error accessing device!\nPlease turn on connection\nand retry!"),i18n("KO/Pi phone sync"),i18n("Retry"),i18n("Cancel")); if ( retval != KMessageBox::Continue ) return false; } - if ( ret != 0 ) { - qDebug("Error S::command returned %d", ret); - return false; - } + // 5 reread data message = i18n(" Rereading all data ... "); status.setText ( message ); qApp->processEvents(); CalendarLocal* calendarTemp = new CalendarLocal(); calendarTemp->setTimeZoneId( calendar->timeZoneId()); if ( ! load( calendarTemp,calendar) ){ qDebug("error reloading calendar "); @@ -574,51 +573,50 @@ bool PhoneFormat::save( Calendar *calendar) ev->setID(mProfileName, ev1->getID(mProfileName) ); //qDebug("Event found on phone for %s ", ev->summary().latin1()); break; } ev1 = er1.next(); } if ( ! ev1 ) { - ev->removeID(mProfileName); + // ev->removeID(mProfileName); qDebug("ERROR: No event found on phone for %s ", ev->summary().latin1()); } ev = er.next(); } //algo 6 compare todo tl = calendar->rawTodos(); to = tl.first(); procCount = 0; QPtrList<Todo> tl1 = calendarTemp->rawTodos(); Todo* to1 ; message = i18n(" Comparing todo # "); while ( to ) { - qDebug("todo2 %d ", procCount); status.setText ( message + QString::number ( ++procCount ) ); qApp->processEvents(); uint csum; csum = PhoneFormat::getCsumTodo( to ); QString cSum = QString::number( csum ); //to->setCsum( mProfileName, cSum ); - qDebug("Todo cSum %s ", cSum.latin1()); + //qDebug("Todo cSum %s ", cSum.latin1()); Todo* to1 = tl1.first(); while ( to1 ) { if ( to1->getCsum( mProfileName ) == cSum ) { tl1.remove( to1 ); afterSave( to ); to->setID(mProfileName, to1->getID(mProfileName) ); break; } to1 = tl1.next(); } if ( ! to1 ) { - to->removeID(mProfileName); + //to->removeID(mProfileName); qDebug("ERROR: No todo found on phone for %s ", to->summary().latin1()); } to = tl.next(); } delete calendarTemp; return true; |