//@cond PRIVATE bool Todo::Private::recurTodo( Todo *todo ) { if ( todo->recurs() ) { Recurrence *r = todo->recurrence(); KDateTime endDateTime = r->endDateTime(); KDateTime nextDate = r->getNextDateTime( todo->dtDue() ); if ( ( r->duration() == -1 || ( nextDate.isValid() && endDateTime.isValid() && nextDate <= endDateTime ) ) ) { while ( !todo->recursAt( nextDate ) || nextDate <= KDateTime::currentUtcDateTime() ) { if ( !nextDate.isValid() || ( nextDate > endDateTime && r->duration() != -1 ) ) { return false; } nextDate = r->getNextDateTime( nextDate ); } todo->setDtDue( nextDate ); todo->setCompleted( false ); todo->setRevision( todo->revision() + 1 ); return true; } } return false; }
void KCalResourceSlox::createRecurrenceAttributes( QDomDocument &doc, QDomElement &parent, KCal::Incidence *incidence ) { if ( !incidence->recurs() ) { WebdavHandler::addSloxElement( this, doc, parent, fieldName( RecurrenceType ), type() == "ox" ? "none" : "no" ); return; } Recurrence *r = incidence->recurrence(); int monthOffset = ( type() == "ox" ? -1 : 0 ); switch ( r->recurrenceType() ) { case Recurrence::rDaily: WebdavHandler::addSloxElement( this, doc, parent, fieldName( RecurrenceType ), "daily" ); WebdavHandler::addSloxElement( this, doc, parent, fieldName( RecurrenceDailyFreq ), QString::number( r->frequency() ) ); break; case Recurrence::rWeekly: { WebdavHandler::addSloxElement( this, doc, parent, fieldName( RecurrenceType ), "weekly" ); WebdavHandler::addSloxElement( this, doc, parent, fieldName( RecurrenceWeeklyFreq ), QString::number( r->frequency() ) ); // TODO: SLOX support int oxDays = 0; for ( int i = 0; i < 7; ++i ) { if ( r->days()[i] ) oxDays += 1 << ( ( i + 1 ) % 7 ); } if ( type() == "ox" ) WebdavHandler::addSloxElement( this, doc, parent, "days", QString::number( oxDays ) ); break; } case Recurrence::rMonthlyDay: WebdavHandler::addSloxElement( this, doc, parent, fieldName( RecurrenceType ), "monthly" ); WebdavHandler::addSloxElement( this, doc, parent, fieldName( RecurrenceMonthlyFreq ), QString::number( r->frequency() ) ); WebdavHandler::addSloxElement( this, doc, parent, fieldName( RecurrenceMonthlyDay ), QString::number( r->monthDays().first() ) ); break; case Recurrence::rMonthlyPos: { WebdavHandler::addSloxElement( this, doc, parent, fieldName( RecurrenceType ), type() == "ox" ? "monthly" : "monthly2" ); WebdavHandler::addSloxElement( this, doc, parent, fieldName( RecurrenceMonthly2Freq ), QString::number( r->frequency() ) ); RecurrenceRule::WDayPos wdp = r->monthPositions().first(); // TODO: SLOX support WebdavHandler::addSloxElement( this, doc, parent, fieldName( RecurrenceMonthly2Day ), QString::number( 1 << wdp.day() ) ); WebdavHandler::addSloxElement( this, doc, parent, fieldName( RecurrenceMonthly2Pos ), QString::number( wdp.pos() ) ); break; } case Recurrence::rYearlyMonth: WebdavHandler::addSloxElement( this, doc, parent, fieldName( RecurrenceType ), "yearly" ); WebdavHandler::addSloxElement( this, doc, parent, fieldName( RecurrenceYearlyDay ), QString::number( r->yearDates().first() ) ); WebdavHandler::addSloxElement( this, doc, parent, fieldName( RecurrenceYearlyMonth ), QString::number( r->yearMonths().first() + monthOffset ) ); if ( type() == "ox" ) WebdavHandler::addSloxElement( this, doc, parent, "interval", "1" ); break; case Recurrence::rYearlyPos: { WebdavHandler::addSloxElement( this, doc, parent, fieldName( RecurrenceType ), type() == "ox" ? "yearly" : "yearly2" ); RecurrenceRule::WDayPos wdp = r->monthPositions().first(); // TODO: SLOX support WebdavHandler::addSloxElement( this, doc, parent, fieldName( RecurrenceYearly2Day ), QString::number( 1 << wdp.day() ) ); WebdavHandler::addSloxElement( this, doc, parent, fieldName( RecurrenceYearly2Pos ), QString::number( wdp.pos() ) ); WebdavHandler::addSloxElement( this, doc, parent, fieldName( RecurrenceYearly2Month ), QString::number( r->yearMonths().first() + monthOffset ) ); if ( type() == "ox" ) WebdavHandler::addSloxElement( this, doc, parent, "interval", "1" ); break; } default: kDebug() << "unsupported recurrence type:" << r->recurrenceType(); } WebdavHandler::addSloxElement( this, doc, parent, fieldName( RecurrenceEnd ), WebdavHandler::kDateTimeToSlox( r->endDateTime() ) ); // delete exceptions DateList exlist = r->exDates(); QStringList res; for ( DateList::ConstIterator it = exlist.constBegin(); it != exlist.constEnd(); ++it ) res.append( WebdavHandler::qDateTimeToSlox( QDateTime( *it ) ) ); WebdavHandler::addSloxElement( this, doc, parent, fieldName( RecurrenceDelEx ), res.join( "," ) ); }