Diffstat (limited to 'core/pim/datebook/datebook.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | core/pim/datebook/datebook.cpp | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/core/pim/datebook/datebook.cpp b/core/pim/datebook/datebook.cpp index 832b2f8..24affd0 100644 --- a/core/pim/datebook/datebook.cpp +++ b/core/pim/datebook/datebook.cpp @@ -994,19 +994,28 @@ void DateBook::slotDoFind( const QString& txt, const QDate &dt, if ( !inSearch ) { rev.setStart( QDateTime(QDate(1960, 1, 1), QTime(0, 0, 0)) ); nonrev.setStart( rev.start() ); inSearch = true; } static QDate searchDate = dt; + // if true at the end we will start at the begin again and afterwards + // we will emit string not found static bool wrapAround = true; bool candidtate; candidtate = false; QValueList<Event> repeats = db->getRawRepeats(); // find the candidate for the first repeat that matches... + // first check if there can ever be a match and then compute + // the next occurence from start. See if this event is closer + // to the beginning (start. next < dtEnd) and not smaller then the last + // result. If we find a canditate we set the dtEnd to the time + // of the ocurrence and rev to this occurence. + // set wrap around to true because there might be more events coming + // and we're not at the end. QValueListConstIterator<Event> it; QDate start = dt; for ( it = repeats.begin(); it != repeats.end(); ++it ) { if ( catComp( (*it).categories(), category ) ) { if ( (*it).match( r ) ) { if ( nextOccurance( *it, start, next ) ) { @@ -1020,12 +1029,15 @@ void DateBook::slotDoFind( const QString& txt, const QDate &dt, } } } } // now the for first non repeat... + // dtEnd is set by the previous iteration of repeatingEvents + // check if we find a closer item. Also set dtEnd to find even + // more close occurrence QValueList<Event> nonRepeats = db->getNonRepeatingEvents( dt, dtEnd.date() ); qHeapSort( nonRepeats.begin(), nonRepeats.end() ); for ( it = nonRepeats.begin(); it != nonRepeats.end(); ++it ) { if ( catComp( (*it).categories(), category ) ) { if ( (*it).start() < dtEnd ) { if ( (*it).match( r ) && !(*it <= nonrev) ) { |