summaryrefslogtreecommitdiff
path: root/library
Unidiff
Diffstat (limited to 'library') (more/less context) (ignore whitespace changes)
-rw-r--r--library/datebookdb.cpp3
1 files changed, 3 insertions, 0 deletions
diff --git a/library/datebookdb.cpp b/library/datebookdb.cpp
index e4ec2bf..165a637 100644
--- a/library/datebookdb.cpp
+++ b/library/datebookdb.cpp
@@ -297,192 +297,195 @@ bool nextOccurance(const Event &e, const QDate &from, QDateTime &next)
297 /* else divides by 4 already, leave freq alone */ 297 /* else divides by 4 already, leave freq alone */
298 diff = 4; 298 diff = 4;
299 } 299 }
300 300
301 a = from.year() - e.start().date().year(); 301 a = from.year() - e.start().date().year();
302 if(a % freq) { 302 if(a % freq) {
303 a = freq - (a % freq); 303 a = freq - (a % freq);
304 iyear = iyear + a; 304 iyear = iyear + a;
305 } 305 }
306 306
307 /* under the assumption we won't hit one of the special not-leap years twice */ 307 /* under the assumption we won't hit one of the special not-leap years twice */
308 if(!QDate::isValid(iyear, imonth, iday)) { 308 if(!QDate::isValid(iyear, imonth, iday)) {
309 /* must have been skipping by leap years and hit one that wasn't, (e.g. 2100) */ 309 /* must have been skipping by leap years and hit one that wasn't, (e.g. 2100) */
310 iyear += freq; 310 iyear += freq;
311 } 311 }
312 312
313 if(QDate(iyear, imonth, iday) >= from) { 313 if(QDate(iyear, imonth, iday) >= from) {
314 next = QDateTime(QDate(iyear, imonth, iday), 314 next = QDateTime(QDate(iyear, imonth, iday),
315 e.start().time()); 315 e.start().time());
316 if ((next.date() > e.repeatPattern().endDate()) && e.repeatPattern().hasEndDate) 316 if ((next.date() > e.repeatPattern().endDate()) && e.repeatPattern().hasEndDate)
317 return FALSE; 317 return FALSE;
318 return TRUE; 318 return TRUE;
319 } 319 }
320 /* iyear == from.year(), need to advance again */ 320 /* iyear == from.year(), need to advance again */
321 iyear += freq; 321 iyear += freq;
322 /* under the assumption we won't hit one of the special not-leap years twice */ 322 /* under the assumption we won't hit one of the special not-leap years twice */
323 if(!QDate::isValid(iyear, imonth, iday)) { 323 if(!QDate::isValid(iyear, imonth, iday)) {
324 /* must have been skipping by leap years and hit one that wasn't, (e.g. 2100) */ 324 /* must have been skipping by leap years and hit one that wasn't, (e.g. 2100) */
325 iyear += freq; 325 iyear += freq;
326 } 326 }
327 327
328 next = QDateTime(QDate(iyear, imonth, iday), e.start().time()); 328 next = QDateTime(QDate(iyear, imonth, iday), e.start().time());
329 if ((next.date() > e.repeatPattern().endDate()) && e.repeatPattern().hasEndDate) 329 if ((next.date() > e.repeatPattern().endDate()) && e.repeatPattern().hasEndDate)
330 return FALSE; 330 return FALSE;
331 return TRUE; 331 return TRUE;
332 default: 332 default:
333 return FALSE; 333 return FALSE;
334 } 334 }
335} 335}
336 336
337static bool nextAlarm( const Event &ev, QDateTime& when, int& warn) 337static bool nextAlarm( const Event &ev, QDateTime& when, int& warn)
338{ 338{
339 QDateTime now = QDateTime::currentDateTime(); 339 QDateTime now = QDateTime::currentDateTime();
340 if ( ev.hasRepeat() ) { 340 if ( ev.hasRepeat() ) {
341 QDateTime ralarm; 341 QDateTime ralarm;
342 if (nextOccurance(ev, now.date(), ralarm)) { 342 if (nextOccurance(ev, now.date(), ralarm)) {
343 ralarm = ralarm.addSecs(-ev.alarmTime()*60); 343 ralarm = ralarm.addSecs(-ev.alarmTime()*60);
344 if ( ralarm > now ) { 344 if ( ralarm > now ) {
345 when = ralarm; 345 when = ralarm;
346 warn = ev.alarmTime(); 346 warn = ev.alarmTime();
347 } else if ( nextOccurance(ev, now.date().addDays(1), ralarm) ) { 347 } else if ( nextOccurance(ev, now.date().addDays(1), ralarm) ) {
348 ralarm = ralarm.addSecs( -ev.alarmTime()*60 ); 348 ralarm = ralarm.addSecs( -ev.alarmTime()*60 );
349 if ( ralarm > now ) { 349 if ( ralarm > now ) {
350 when = ralarm; 350 when = ralarm;
351 warn = ev.alarmTime(); 351 warn = ev.alarmTime();
352 } 352 }
353 } 353 }
354 } 354 }
355 } else { 355 } else {
356 warn = ev.alarmTime(); 356 warn = ev.alarmTime();
357 when = ev.start().addSecs( -ev.alarmTime()*60 ); 357 when = ev.start().addSecs( -ev.alarmTime()*60 );
358 } 358 }
359 return when > now; 359 return when > now;
360} 360}
361 361
362static void addEventAlarm( const Event &ev ) 362static void addEventAlarm( const Event &ev )
363{ 363{
364 QDateTime when; 364 QDateTime when;
365 int warn; 365 int warn;
366 if ( nextAlarm(ev,when,warn) ) 366 if ( nextAlarm(ev,when,warn) )
367 AlarmServer::addAlarm( when, 367 AlarmServer::addAlarm( when,
368 "QPE/Application/datebook", 368 "QPE/Application/datebook",
369 "alarm(QDateTime,int)", warn ); 369 "alarm(QDateTime,int)", warn );
370} 370}
371 371
372static void delEventAlarm( const Event &ev ) 372static void delEventAlarm( const Event &ev )
373{ 373{
374 QDateTime when; 374 QDateTime when;
375 int warn; 375 int warn;
376 if ( nextAlarm(ev,when,warn) ) 376 if ( nextAlarm(ev,when,warn) )
377 AlarmServer::deleteAlarm( when, 377 AlarmServer::deleteAlarm( when,
378 "QPE/Application/datebook", 378 "QPE/Application/datebook",
379 "alarm(QDateTime,int)", warn ); 379 "alarm(QDateTime,int)", warn );
380} 380}
381 381
382 382
383DateBookDB::DateBookDB() 383DateBookDB::DateBookDB()
384{ 384{
385 init(); 385 init();
386} 386}
387 387
388DateBookDB::~DateBookDB() 388DateBookDB::~DateBookDB()
389{ 389{
390 save(); 390 save();
391 eventList.clear(); 391 eventList.clear();
392 repeatEvents.clear(); 392 repeatEvents.clear();
393
394 delete d;
395 d=0;
393} 396}
394 397
395 398
396//#### Why is this code duplicated in getEffectiveEvents ????? 399//#### Why is this code duplicated in getEffectiveEvents ?????
397//#### Addendum. Don't use this function, lets faze it out if we can. 400//#### Addendum. Don't use this function, lets faze it out if we can.
398QValueList<Event> DateBookDB::getEvents( const QDate &from, const QDate &to ) 401QValueList<Event> DateBookDB::getEvents( const QDate &from, const QDate &to )
399{ 402{
400 QValueList<Event> tmpList; 403 QValueList<Event> tmpList;
401 tmpList = getNonRepeatingEvents( from, to ); 404 tmpList = getNonRepeatingEvents( from, to );
402 405
403 // check for repeating events... 406 // check for repeating events...
404 for (QValueList<Event>::ConstIterator it = repeatEvents.begin(); 407 for (QValueList<Event>::ConstIterator it = repeatEvents.begin();
405 it != repeatEvents.end(); ++it) { 408 it != repeatEvents.end(); ++it) {
406 QDate itDate = from; 409 QDate itDate = from;
407 QDateTime due; 410 QDateTime due;
408 411
409 /* create a false end date, to short circuit on hard 412 /* create a false end date, to short circuit on hard
410 MonthlyDay recurences */ 413 MonthlyDay recurences */
411 Event dummy_event = *it; 414 Event dummy_event = *it;
412 Event::RepeatPattern r = dummy_event.repeatPattern(); 415 Event::RepeatPattern r = dummy_event.repeatPattern();
413 if ( !r.hasEndDate || r.endDate() > to ) { 416 if ( !r.hasEndDate || r.endDate() > to ) {
414 r.setEndDate( to ); 417 r.setEndDate( to );
415 r.hasEndDate = TRUE; 418 r.hasEndDate = TRUE;
416 } 419 }
417 dummy_event.setRepeat(TRUE, r); 420 dummy_event.setRepeat(TRUE, r);
418 421
419 while (nextOccurance(dummy_event, itDate, due)) { 422 while (nextOccurance(dummy_event, itDate, due)) {
420 if (due.date() > to) 423 if (due.date() > to)
421 break; 424 break;
422 Event newEvent = *it; 425 Event newEvent = *it;
423 newEvent.setStart(due); 426 newEvent.setStart(due);
424 newEvent.setEnd(due.addSecs((*it).start().secsTo((*it).end()))); 427 newEvent.setEnd(due.addSecs((*it).start().secsTo((*it).end())));
425 428
426 tmpList.append(newEvent); 429 tmpList.append(newEvent);
427 itDate = due.date().addDays(1); /* the next event */ 430 itDate = due.date().addDays(1); /* the next event */
428 } 431 }
429 } 432 }
430 qHeapSort(tmpList); 433 qHeapSort(tmpList);
431 return tmpList; 434 return tmpList;
432} 435}
433 436
434QValueList<Event> DateBookDB::getEvents( const QDateTime &start ) 437QValueList<Event> DateBookDB::getEvents( const QDateTime &start )
435{ 438{
436 QValueList<Event> day = getEvents(start.date(),start.date()); 439 QValueList<Event> day = getEvents(start.date(),start.date());
437 440
438 QValueListConstIterator<Event> it; 441 QValueListConstIterator<Event> it;
439 QDateTime dtTmp; 442 QDateTime dtTmp;
440 QValueList<Event> tmpList; 443 QValueList<Event> tmpList;
441 for (it = day.begin(); it != day.end(); ++it ) { 444 for (it = day.begin(); it != day.end(); ++it ) {
442 dtTmp = (*it).start(TRUE); 445 dtTmp = (*it).start(TRUE);
443 if ( dtTmp == start ) 446 if ( dtTmp == start )
444 tmpList.append( *it ); 447 tmpList.append( *it );
445 } 448 }
446 return tmpList; 449 return tmpList;
447} 450}
448 451
449//#### Why is this code duplicated in getEvents ????? 452//#### Why is this code duplicated in getEvents ?????
450 453
451QValueList<EffectiveEvent> DateBookDB::getEffectiveEvents( const QDate &from, 454QValueList<EffectiveEvent> DateBookDB::getEffectiveEvents( const QDate &from,
452 const QDate &to ) 455 const QDate &to )
453{ 456{
454 QValueList<EffectiveEvent> tmpList; 457 QValueList<EffectiveEvent> tmpList;
455 QValueListIterator<Event> it; 458 QValueListIterator<Event> it;
456 459
457 EffectiveEvent effEv; 460 EffectiveEvent effEv;
458 QDateTime dtTmp, 461 QDateTime dtTmp,
459 dtEnd; 462 dtEnd;
460 463
461 for (it = eventList.begin(); it != eventList.end(); ++it ) { 464 for (it = eventList.begin(); it != eventList.end(); ++it ) {
462 if (!(*it).isValidUid()) 465 if (!(*it).isValidUid())
463 (*it).assignUid(); // FIXME: Hack to restore cleared uids 466 (*it).assignUid(); // FIXME: Hack to restore cleared uids
464 467
465 dtTmp = (*it).start(TRUE); 468 dtTmp = (*it).start(TRUE);
466 dtEnd = (*it).end(TRUE); 469 dtEnd = (*it).end(TRUE);
467 470
468 if ( dtTmp.date() >= from && dtTmp.date() <= to ) { 471 if ( dtTmp.date() >= from && dtTmp.date() <= to ) {
469 Event tmpEv = *it; 472 Event tmpEv = *it;
470 effEv.setEvent(tmpEv); 473 effEv.setEvent(tmpEv);
471 effEv.setDate( dtTmp.date() ); 474 effEv.setDate( dtTmp.date() );
472 effEv.setStart( dtTmp.time() ); 475 effEv.setStart( dtTmp.time() );
473 if ( dtTmp.date() != dtEnd.date() ) 476 if ( dtTmp.date() != dtEnd.date() )
474 effEv.setEnd( QTime(23, 59, 0) ); 477 effEv.setEnd( QTime(23, 59, 0) );
475 else 478 else
476 effEv.setEnd( dtEnd.time() ); 479 effEv.setEnd( dtEnd.time() );
477 tmpList.append( effEv ); 480 tmpList.append( effEv );
478 } 481 }
479 // we must also check for end date information... 482 // we must also check for end date information...
480 if ( dtEnd.date() != dtTmp.date() && dtEnd.date() >= from ) { 483 if ( dtEnd.date() != dtTmp.date() && dtEnd.date() >= from ) {
481 QDateTime dt = dtTmp.addDays( 1 ); 484 QDateTime dt = dtTmp.addDays( 1 );
482 dt.setTime( QTime(0, 0, 0) ); 485 dt.setTime( QTime(0, 0, 0) );
483 QDateTime dtStop; 486 QDateTime dtStop;
484 if ( dtEnd > to ) { 487 if ( dtEnd > to ) {
485 dtStop = to; 488 dtStop = to;
486 } else 489 } else
487 dtStop = dtEnd; 490 dtStop = dtEnd;
488 while ( dt <= dtStop ) { 491 while ( dt <= dtStop ) {