summaryrefslogtreecommitdiffabout
path: root/libkcal
Unidiff
Diffstat (limited to 'libkcal') (more/less context) (ignore whitespace changes)
-rw-r--r--libkcal/event.cpp75
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*
199 } 199 }
200 if ( !doesFloat() && !testEvent->doesFloat() && !isMultiDay() && !testEvent->isMultiDay() ) {
201 if ( mDtStart.time() >= testEvent->mDtEnd.time() || testEvent->mDtStart.time() >= mDtEnd.time() ) {
202 // no need to test. times mismatch
203 //fprintf(stderr,"timi ");
204 return false;
205 }
206 }
200 Event *nonRecur = 0; 207 Event *nonRecur = 0;
@@ -219,2 +226,3 @@ bool Event::isOverlapping ( Event* testEvent, QDateTime* overlapDT, QDateTime*
219 return false; 226 return false;
227
220 int recDuration = recurEvent->mDtStart.secsTo( recurEvent->mDtEnd ); 228 int recDuration = recurEvent->mDtStart.secsTo( recurEvent->mDtEnd );
@@ -222,4 +230,15 @@ bool Event::isOverlapping ( Event* testEvent, QDateTime* overlapDT, QDateTime*
222 recDuration += 86400; 230 recDuration += 86400;
223 bool ok = true; 231 bool ok = false;
224 QDateTime recStart = recurEvent->mDtStart.addSecs( -300);; 232 QDateTime recStart;
233 if ( startDT ) {
234 recStart = recurEvent->recurrence()->getPreviousDateTime( startDT->addSecs( 61 ), &ok );
235 }
236 if ( recStart.isValid() ) {
237 //qDebug("%s start at %s ", startDT-> toString().latin1(), recStart.toString().latin1());
238 recStart = recStart.addSecs( -300);
239 }
240 else
241 recStart = recurEvent->mDtStart.addSecs( -300);
242 ok = true;
243
225 while ( ok ) { 244 while ( ok ) {
@@ -245,4 +264,27 @@ bool Event::isOverlapping ( Event* testEvent, QDateTime* overlapDT, QDateTime*
245 } 264 }
246 265 if ( !doesFloat() && !testEvent->doesFloat() && !isMultiDay() && !testEvent->isMultiDay() ) {
247 QDateTime incidenceStart = mDtStart; 266 if ( recurrence()->doesRecur() == Recurrence::rWeekly && testEvent->recurrence()->doesRecur() == Recurrence::rWeekly ) {
267 bool found = false;
268 uint i;
269 for ( i=0; i< recurrence()->days().size();++i ) {
270 found = found || (recurrence()->days().testBit( i ) && testEvent->recurrence()->days().testBit( i ) );
271 }
272 if ( ! found ) {
273 //qDebug("recurring days mismatch %s -- %s", summary().latin1(),testEvent->summary().latin1());
274 return false;
275 }
276
277 }
278 }
279 bool ok = true;
280 QDateTime incidenceStart;// = mDtStart;
281 QDateTime testincidenceStart;// = testEvent->mDtStart;
282 if ( startDT ) {
283 incidenceStart = recurrence()->getPreviousDateTime( startDT->addSecs( 61 ), &ok );
284 testincidenceStart = testEvent->recurrence()->getPreviousDateTime( startDT->addSecs( 61 ), &ok );
285 }
286 if ( !testincidenceStart.isValid() )
287 testincidenceStart = testEvent->mDtStart;
288 if ( !incidenceStart.isValid() )
289 incidenceStart = mDtStart;
248 int duration = mDtStart.secsTo( mDtEnd ); 290 int duration = mDtStart.secsTo( mDtEnd );
@@ -250,3 +292,2 @@ bool Event::isOverlapping ( Event* testEvent, QDateTime* overlapDT, QDateTime*
250 duration += 86400; 292 duration += 86400;
251 QDateTime testincidenceStart = testEvent->mDtStart;
252 int testduration = testEvent->mDtStart.secsTo( testEvent->mDtEnd ); 293 int testduration = testEvent->mDtStart.secsTo( testEvent->mDtEnd );
@@ -257,3 +298,2 @@ bool Event::isOverlapping ( Event* testEvent, QDateTime* overlapDT, QDateTime*
257 computeThis = true; 298 computeThis = true;
258 bool ok = true;
259 if ( computeThis ) 299 if ( computeThis )
@@ -263,9 +303,25 @@ bool Event::isOverlapping ( Event* testEvent, QDateTime* overlapDT, QDateTime*
263 int count = 0; 303 int count = 0;
304 ok = true;
305 int countbreak = 2000;
306 QDateTime stopSearch;
307 bool testStop = false;
308 if ( startDT ) {
309 stopSearch = startDT->addDays( 365*3 );
310 testStop = true;
311 }
264 while ( ok ) { 312 while ( ok ) {
265 ++count; 313 ++count;
266 if ( count > 1000 ) break; 314 if ( count > countbreak ) break;
267 if ( computeThis ) 315 if ( computeThis ) {
316 if ( testStop )
317 if ( testincidenceStart > stopSearch )
318 break;
268 incidenceStart = getNextOccurence( incidenceStart.addSecs( 60 ), &ok ); 319 incidenceStart = getNextOccurence( incidenceStart.addSecs( 60 ), &ok );
269 else 320 }
321 else {
322 if ( testStop )
323 if ( incidenceStart > stopSearch )
324 break;
270 testincidenceStart = testEvent->getNextOccurence( testincidenceStart.addSecs( 60 ), &ok ); 325 testincidenceStart = testEvent->getNextOccurence( testincidenceStart.addSecs( 60 ), &ok );
326 }
271 if ( ok ) { 327 if ( ok ) {
@@ -286,2 +342,3 @@ bool Event::isOverlapping ( Event* testEvent, QDateTime* overlapDT, QDateTime*
286 } 342 }
343 //qDebug("%d rec counter stopped at %d - %s %s", ok ,count, summary().latin1(),testEvent->summary().latin1() );
287 return false; 344 return false;