author | zautrix <zautrix> | 2005-07-08 10:00:24 (UTC) |
---|---|---|
committer | zautrix <zautrix> | 2005-07-08 10:00:24 (UTC) |
commit | e1ed9342934d027f8b72a97eb710a52abe53b719 (patch) (side-by-side diff) | |
tree | 2d1eef77b64cb5cc9e040fea3a35d240fee5bfd2 /libkcal | |
parent | 9635c9a7b8f5c19a1784079d4b67cb3ca600fc33 (diff) | |
download | kdepimpi-e1ed9342934d027f8b72a97eb710a52abe53b719.zip kdepimpi-e1ed9342934d027f8b72a97eb710a52abe53b719.tar.gz kdepimpi-e1ed9342934d027f8b72a97eb710a52abe53b719.tar.bz2 |
rec dect fix
-rw-r--r-- | libkcal/event.cpp | 75 |
1 files changed, 66 insertions, 9 deletions
diff --git a/libkcal/event.cpp b/libkcal/event.cpp index 46e8174..5285559 100644 --- a/libkcal/event.cpp +++ b/libkcal/event.cpp @@ -199,2 +199,9 @@ bool Event::isOverlapping ( Event* testEvent, QDateTime* overlapDT, QDateTime* } + if ( !doesFloat() && !testEvent->doesFloat() && !isMultiDay() && !testEvent->isMultiDay() ) { + if ( mDtStart.time() >= testEvent->mDtEnd.time() || testEvent->mDtStart.time() >= mDtEnd.time() ) { + // no need to test. times mismatch + //fprintf(stderr,"timi "); + return false; + } + } Event *nonRecur = 0; @@ -219,2 +226,3 @@ bool Event::isOverlapping ( Event* testEvent, QDateTime* overlapDT, QDateTime* return false; + int recDuration = recurEvent->mDtStart.secsTo( recurEvent->mDtEnd ); @@ -222,4 +230,15 @@ bool Event::isOverlapping ( Event* testEvent, QDateTime* overlapDT, QDateTime* recDuration += 86400; - bool ok = true; - QDateTime recStart = recurEvent->mDtStart.addSecs( -300);; + bool ok = false; + QDateTime recStart; + if ( startDT ) { + recStart = recurEvent->recurrence()->getPreviousDateTime( startDT->addSecs( 61 ), &ok ); + } + if ( recStart.isValid() ) { + //qDebug("%s start at %s ", startDT-> toString().latin1(), recStart.toString().latin1()); + recStart = recStart.addSecs( -300); + } + else + recStart = recurEvent->mDtStart.addSecs( -300); + ok = true; + while ( ok ) { @@ -245,4 +264,27 @@ bool Event::isOverlapping ( Event* testEvent, QDateTime* overlapDT, QDateTime* } - - QDateTime incidenceStart = mDtStart; + if ( !doesFloat() && !testEvent->doesFloat() && !isMultiDay() && !testEvent->isMultiDay() ) { + if ( recurrence()->doesRecur() == Recurrence::rWeekly && testEvent->recurrence()->doesRecur() == Recurrence::rWeekly ) { + bool found = false; + uint i; + for ( i=0; i< recurrence()->days().size();++i ) { + found = found || (recurrence()->days().testBit( i ) && testEvent->recurrence()->days().testBit( i ) ); + } + if ( ! found ) { + //qDebug("recurring days mismatch %s -- %s", summary().latin1(),testEvent->summary().latin1()); + return false; + } + + } + } + bool ok = true; + QDateTime incidenceStart;// = mDtStart; + QDateTime testincidenceStart;// = testEvent->mDtStart; + if ( startDT ) { + incidenceStart = recurrence()->getPreviousDateTime( startDT->addSecs( 61 ), &ok ); + testincidenceStart = testEvent->recurrence()->getPreviousDateTime( startDT->addSecs( 61 ), &ok ); + } + if ( !testincidenceStart.isValid() ) + testincidenceStart = testEvent->mDtStart; + if ( !incidenceStart.isValid() ) + incidenceStart = mDtStart; int duration = mDtStart.secsTo( mDtEnd ); @@ -250,3 +292,2 @@ bool Event::isOverlapping ( Event* testEvent, QDateTime* overlapDT, QDateTime* duration += 86400; - QDateTime testincidenceStart = testEvent->mDtStart; int testduration = testEvent->mDtStart.secsTo( testEvent->mDtEnd ); @@ -257,3 +298,2 @@ bool Event::isOverlapping ( Event* testEvent, QDateTime* overlapDT, QDateTime* computeThis = true; - bool ok = true; if ( computeThis ) @@ -263,9 +303,25 @@ bool Event::isOverlapping ( Event* testEvent, QDateTime* overlapDT, QDateTime* int count = 0; + ok = true; + int countbreak = 2000; + QDateTime stopSearch; + bool testStop = false; + if ( startDT ) { + stopSearch = startDT->addDays( 365*3 ); + testStop = true; + } while ( ok ) { ++count; - if ( count > 1000 ) break; - if ( computeThis ) + if ( count > countbreak ) break; + if ( computeThis ) { + if ( testStop ) + if ( testincidenceStart > stopSearch ) + break; incidenceStart = getNextOccurence( incidenceStart.addSecs( 60 ), &ok ); - else + } + else { + if ( testStop ) + if ( incidenceStart > stopSearch ) + break; testincidenceStart = testEvent->getNextOccurence( testincidenceStart.addSecs( 60 ), &ok ); + } if ( ok ) { @@ -286,2 +342,3 @@ bool Event::isOverlapping ( Event* testEvent, QDateTime* overlapDT, QDateTime* } + //qDebug("%d rec counter stopped at %d - %s %s", ok ,count, summary().latin1(),testEvent->summary().latin1() ); return false; |