-rw-r--r-- | library/datebookdb.cpp | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/library/datebookdb.cpp b/library/datebookdb.cpp index 000ff71..188d8e1 100644 --- a/library/datebookdb.cpp +++ b/library/datebookdb.cpp @@ -74,52 +74,55 @@ bool nextOccurance(const Event &e, const QDate &from, QDateTime &next) if (e.repeatPattern().hasEndDate && e.repeatPattern().endDate() < from) return FALSE; if (e.start() >= from) { next = e.start(); return TRUE; } switch ( e.repeatPattern().type ) { case Event::Weekly: /* weekly is just daily by 7 */ /* first convert the repeatPattern.Days() mask to the next day of week valid after from */ dayOfWeek = from.dayOfWeek(); dayOfWeek--; /* we want 0-6, doco for above specs 1-7 */ /* this is done in case freq > 1 and from in week not for this round */ // firstOfWeek = 0; this is already done at decl. while(!((1 << firstOfWeek) & e.repeatPattern().days)) firstOfWeek++; + + /* there is at least one 'day', or there would be no event */ while(!((1 << (dayOfWeek % 7)) & e.repeatPattern().days)) dayOfWeek++; + dayOfWeek = dayOfWeek % 7; /* the actual day of week */ dayOfWeek -= e.start().date().dayOfWeek() -1; firstOfWeek = firstOfWeek % 7; /* the actual first of week */ firstOfWeek -= e.start().date().dayOfWeek() -1; // dayOfWeek may be negitive now // day of week is number of days to add to start day freq *= 7; // FALL-THROUGH !!!!! case Event::Daily: // the add is for the possible fall through from weekly */ if(e.start().date().addDays(dayOfWeek) > from) { /* first week exception */ next = QDateTime(e.start().date().addDays(dayOfWeek), e.start().time()); if ((next.date() > e.repeatPattern().endDate()) && e.repeatPattern().hasEndDate) return FALSE; return TRUE; } /* if from is middle of a non-week */ @@ -870,48 +873,55 @@ void DateBookDB::loadFile( const QString &strFile ) break; } case FNote: e.setNotes( value ); break; case FCreated: rp.createTime = value.toInt(); break; case FAction: currentAction = value.toInt(); break; case FActionKey: journalKey = value.toInt(); break; case FJournalOrigHadRepeat: origHadRepeat = value.toInt(); break; default: qDebug( "huh??? missing enum? -- attr.: %s", attr ); break; } #endif } // "post processing" (dates, times, alarm, recurrence) + + // other half of 1169 fixlet without getting into regression + // if rp.days == 0 and rp.type == Event::Weekly + if ( rp.type == Event::Weekly && rp.days == 0 ) + rp.days = Event::day( e.start().date().dayOfWeek() ); + + // start date/time e.setRepeat( rp.type != Event::NoRepeat, rp ); if ( alarmTime != -1 ) e.setAlarm( TRUE, alarmTime, alarmSound ); // now do our action based on the current action... switch ( currentAction ) { case ACTION_ADD: addJFEvent( e ); break; case ACTION_REMOVE: removeJFEvent( e ); break; case ACTION_REPLACE: // be a little bit careful, // in case of a messed up journal... if ( journalKey > -1 && origHadRepeat > -1 ) { // get the original from proper list... if ( origHadRepeat ) removeJFEvent( *(repeatEvents.at(journalKey)) ); else removeJFEvent( *(eventList.at(journalKey)) ); addJFEvent( e ); |