summaryrefslogtreecommitdiffabout
path: root/libkcal
authorzautrix <zautrix>2005-07-08 10:00:24 (UTC)
committer zautrix <zautrix>2005-07-08 10:00:24 (UTC)
commite1ed9342934d027f8b72a97eb710a52abe53b719 (patch) (side-by-side diff)
tree2d1eef77b64cb5cc9e040fea3a35d240fee5bfd2 /libkcal
parent9635c9a7b8f5c19a1784079d4b67cb3ca600fc33 (diff)
downloadkdepimpi-e1ed9342934d027f8b72a97eb710a52abe53b719.zip
kdepimpi-e1ed9342934d027f8b72a97eb710a52abe53b719.tar.gz
kdepimpi-e1ed9342934d027f8b72a97eb710a52abe53b719.tar.bz2
rec dect fix
Diffstat (limited to 'libkcal') (more/less context) (show whitespace changes)
-rw-r--r--libkcal/event.cpp73
1 files changed, 65 insertions, 8 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*
}
+ 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;
+ }
- QDateTime incidenceStart = mDtStart;
+ }
+ }
+ 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;