39 using namespace KCalCore;
46 class KCalCore::Alarm::Private
51 mType(
Alarm::Invalid),
57 mHasLocationRadius(false),
60 Private(
const Private &other)
61 : mParent(other.mParent),
63 mDescription(other.mDescription),
65 mMailSubject(other.mMailSubject),
66 mMailAttachFiles(other.mMailAttachFiles),
67 mMailAddresses(other.mMailAddresses),
68 mAlarmTime(other.mAlarmTime),
69 mAlarmSnoozeTime(other.mAlarmSnoozeTime),
70 mAlarmRepeatCount(other.mAlarmRepeatCount),
71 mOffset(other.mOffset),
72 mEndOffset(other.mEndOffset),
73 mHasTime(other.mHasTime),
74 mAlarmEnabled(other.mAlarmEnabled),
75 mHasLocationRadius(other.mHasLocationRadius),
76 mLocationRadius(other.mLocationRadius)
85 QStringList mMailAttachFiles;
91 int mAlarmRepeatCount;
100 bool mHasLocationRadius;
123 d->mParent = a.d->mParent;
124 d->mType = a.d->mType;
125 d->mDescription = a.d->mDescription;
126 d->mFile = a.d->mFile;
127 d->mMailAttachFiles = a.d->mMailAttachFiles;
128 d->mMailAddresses = a.d->mMailAddresses;
129 d->mMailSubject = a.d->mMailSubject;
130 d->mAlarmSnoozeTime = a.d->mAlarmSnoozeTime;
131 d->mAlarmRepeatCount = a.d->mAlarmRepeatCount;
132 d->mAlarmTime = a.d->mAlarmTime;
133 d->mOffset = a.d->mOffset;
134 d->mEndOffset = a.d->mEndOffset;
135 d->mHasTime = a.d->mHasTime;
136 d->mAlarmEnabled = a.d->mAlarmEnabled;
144 if (d->mType != rhs.d->mType ||
145 d->mAlarmSnoozeTime != rhs.d->mAlarmSnoozeTime ||
146 d->mAlarmRepeatCount != rhs.d->mAlarmRepeatCount ||
147 d->mAlarmEnabled != rhs.d->mAlarmEnabled ||
148 d->mHasTime != rhs.d->mHasTime ||
149 d->mHasLocationRadius != rhs.d->mHasLocationRadius ||
150 d->mLocationRadius != rhs.d->mLocationRadius) {
155 if (d->mAlarmTime != rhs.d->mAlarmTime) {
159 if (d->mOffset != rhs.d->mOffset || d->mEndOffset != rhs.d->mEndOffset) {
166 return d->mDescription == rhs.d->mDescription;
169 return d->mDescription == rhs.d->mDescription &&
170 d->mMailAttachFiles == rhs.d->mMailAttachFiles &&
171 d->mMailAddresses == rhs.d->mMailAddresses &&
172 d->mMailSubject == rhs.d->mMailSubject;
175 return d->mFile == rhs.d->mFile &&
176 d->mDescription == rhs.d->mDescription;
179 return d->mFile == rhs.d->mFile;
194 if (type == d->mType) {
199 d->mParent->update();
203 d->mDescription =
"";
206 d->mFile = d->mDescription =
"";
212 d->mMailSubject = d->mDescription =
"";
213 d->mMailAddresses.clear();
214 d->mMailAttachFiles.clear();
220 d->mParent->updated();
226 d->mParent->updated();
238 d->mParent->update();
243 d->mParent->updated();
249 if (d->mType ==
Audio) {
251 d->mParent->update();
255 d->mParent->updated();
262 return (d->mType ==
Audio) ? d->mFile : QString();
266 const QString &arguments)
269 d->mParent->update();
273 d->mDescription = arguments;
275 d->mParent->updated();
283 d->mParent->update();
287 d->mParent->updated();
294 return (d->mType ==
Procedure) ? d->mFile : QString();
301 d->mParent->update();
303 d->mDescription = arguments;
305 d->mParent->updated();
312 return (d->mType ==
Procedure) ? d->mDescription : QString();
317 const QStringList &attachments)
320 d->mParent->update();
323 d->mMailSubject = subject;
324 d->mDescription =
text;
325 d->mMailAddresses = addressees;
326 d->mMailAttachFiles = attachments;
328 d->mParent->updated();
334 if (d->mType ==
Email) {
336 d->mParent->update();
338 d->mMailAddresses.clear();
339 d->mMailAddresses.append(mailAddress);
341 d->mParent->updated();
348 if (d->mType ==
Email) {
350 d->mParent->update();
354 d->mParent->updated();
361 if (d->mType ==
Email) {
363 d->mParent->update();
365 d->mMailAddresses.append(mailAddress);
367 d->mParent->updated();
379 if (d->mType ==
Email) {
381 d->mParent->update();
383 d->mMailSubject = mailAlarmSubject;
385 d->mParent->updated();
392 return (d->mType ==
Email) ? d->mMailSubject : QString();
397 if (d->mType ==
Email) {
399 d->mParent->update();
401 d->mMailAttachFiles.clear();
402 d->mMailAttachFiles += mailAttachFile;
404 d->mParent->updated();
411 if (d->mType ==
Email) {
413 d->mParent->update();
415 d->mMailAttachFiles = mailAttachFiles;
417 d->mParent->updated();
424 if (d->mType ==
Email) {
426 d->mParent->update();
428 d->mMailAttachFiles += mailAttachFile;
430 d->mParent->updated();
437 return (d->mType ==
Email) ? d->mMailAttachFiles : QStringList();
442 if (d->mType ==
Email) {
444 d->mParent->update();
446 d->mDescription =
text;
448 d->mParent->updated();
455 return (d->mType ==
Email) ? d->mDescription : QString();
461 d->mParent->update();
464 if (!text.isNull()) {
465 d->mDescription =
text;
468 d->mParent->updated();
476 d->mParent->update();
478 d->mDescription =
text;
480 d->mParent->updated();
487 return (d->mType ==
Display) ? d->mDescription : QString();
493 d->mParent->update();
495 d->mAlarmTime = alarmTime;
499 d->mParent->updated();
506 return d->mAlarmTime;
507 }
else if (d->mParent) {
510 return d->mOffset.end(dt);
513 return d->mOffset.end(dt);
522 if (d->mParent && d->mParent->recurs()) {
525 KDateTime dtStart = d->mParent->dtStart();
528 KDateTime alarmStart = d->mOffset.end(d->mEndOffset ? dtEnd : dtStart);
531 Duration alarmOffset(dtStart, alarmStart);
539 if (alarmStart > preTime) {
543 if (d->mAlarmRepeatCount && !ignoreRepetitions) {
546 KDateTime prevRecurrence = d->mParent->recurrence()->getPreviousDateTime(preTime);
547 if (prevRecurrence.isValid()) {
548 KDateTime prevLastRepeat = alarmOffset.
end(
duration().end(prevRecurrence));
551 if (prevLastRepeat > preTime) {
553 KDateTime prevAlarm = alarmOffset.
end(prevRecurrence);
560 KDateTime nextRecurrence = d->mParent->recurrence()->getNextDateTime(preTime);
561 if (nextRecurrence.isValid()) {
562 KDateTime nextAlarm = alarmOffset.
end(nextRecurrence);
567 if (nextAlarm > preTime) {
574 KDateTime alarmTime =
time();
575 if (alarmTime > preTime) {
588 const KDateTime::Spec &newSpec)
591 d->mParent->update();
593 d->mAlarmTime = d->mAlarmTime.toTimeSpec(oldSpec);
594 d->mAlarmTime.setTimeSpec(newSpec);
596 d->mParent->updated();
602 if (alarmSnoozeTime.
value() > 0) {
604 d->mParent->update();
606 d->mAlarmSnoozeTime = alarmSnoozeTime;
608 d->mParent->updated();
615 return d->mAlarmSnoozeTime;
621 d->mParent->update();
623 d->mAlarmRepeatCount = alarmRepeatCount;
625 d->mParent->updated();
631 return d->mAlarmRepeatCount;
636 return Duration(d->mAlarmSnoozeTime.value() * d->mAlarmRepeatCount,
637 d->mAlarmSnoozeTime.type());
646 if (!d->mAlarmRepeatCount) {
651 int interval = d->mAlarmSnoozeTime.value();
652 bool daily = d->mAlarmSnoozeTime.isDaily();
654 int daysTo = at.daysTo(preTime);
655 if (!preTime.isDateOnly() && preTime.time() <= at.time()) {
658 repetition = daysTo / interval + 1;
660 repetition = at.secsTo_long(preTime) / interval + 1;
662 if (repetition > d->mAlarmRepeatCount) {
666 return daily ? at.addDays(
int(repetition * interval))
667 : at.addSecs(repetition * interval);
672 KDateTime at =
time();
673 if (at >= afterTime) {
677 if (!d->mAlarmRepeatCount) {
681 int interval = d->mAlarmSnoozeTime.value();
682 bool daily = d->mAlarmSnoozeTime.isDaily();
684 int daysTo = at.daysTo(afterTime);
685 if (afterTime.isDateOnly() || afterTime.time() <= at.time()) {
688 repetition = daysTo / interval;
690 repetition = (at.secsTo_long(afterTime) - 1) / interval;
692 if (repetition > d->mAlarmRepeatCount) {
693 repetition = d->mAlarmRepeatCount;
695 return daily ? at.addDays(
int(repetition * interval))
696 : at.addSecs(repetition * interval);
701 if (!d->mAlarmRepeatCount) {
704 if (d->mAlarmSnoozeTime.isDaily()) {
705 return time().addDays(d->mAlarmRepeatCount * d->mAlarmSnoozeTime.asDays());
707 return time().addSecs(d->mAlarmRepeatCount * d->mAlarmSnoozeTime.asSeconds());
714 d->mParent->update();
716 d->mAlarmEnabled = !d->mAlarmEnabled;
718 d->mParent->updated();
725 d->mParent->update();
727 d->mAlarmEnabled = enable;
729 d->mParent->updated();
735 return d->mAlarmEnabled;
741 d->mParent->update();
744 d->mEndOffset =
false;
747 d->mParent->updated();
753 return (d->mHasTime || d->mEndOffset) ?
Duration(0) : d->mOffset;
758 return !d->mHasTime && !d->mEndOffset;
763 return !d->mHasTime && d->mEndOffset;
769 d->mParent->update();
772 d->mEndOffset =
true;
775 d->mParent->updated();
781 return (d->mHasTime || !d->mEndOffset) ?
Duration(0) : d->mOffset;
791 return d->mParent ? d->mParent->uid() : QString();
797 d->mParent->update();
798 d->mParent->updated();
805 d->mParent->update();
808 if (hasLocationRadius) {
814 d->mParent->updated();
820 return d->mHasLocationRadius;
826 d->mParent->update();
830 d->mParent->updated();
836 return d->mLocationRadius;