45 #include <QtCore/QStringList>
47 using namespace KCalCore;
54 class KCalCore::IncidenceBase::Private
60 mUpdatedPending(false),
65 Private(
const Private &other)
66 : mUpdateGroupLevel(0),
67 mUpdatedPending(false),
78 void init(
const Private &other);
80 KDateTime mLastModified;
85 int mUpdateGroupLevel;
90 QStringList mComments;
91 QStringList mContacts;
92 QList<IncidenceObserver*> mObservers;
93 QSet<Field> mDirtyFields;
97 void IncidenceBase::Private::init(
const Private &other)
99 mLastModified = other.mLastModified;
100 mDtStart = other.mDtStart;
101 mOrganizer = other.mOrganizer;
103 mDuration = other.mDuration;
104 mAllDay = other.mAllDay;
105 mHasDuration = other.mHasDuration;
107 mComments = other.mComments;
108 mContacts = other.mContacts;
111 Attendee::List::ConstIterator it;
112 for (it = other.mAttendees.constBegin(); it != other.mAttendees.constEnd(); ++it) {
153 const bool uidChanged = other.
uid() !=
uid();
157 d->mDirtyFields.clear();
191 Attendee::List::ConstIterator a1 = al1.constBegin();
192 Attendee::List::ConstIterator a2 = al2.constBegin();
195 for (; a1 != al1.constEnd() && a2 != al2.constEnd(); ++a1, ++a2) {
196 if (!(**a1 == **a2)) {
201 if (!CustomProperties::operator==(i2)) {
246 KDateTime current = lm.toUtc();
247 QTime t = current.time();
248 t.setHMS(t.hour(), t.minute(), t.second(), 0);
251 d->mLastModified = current;
256 return d->mLastModified;
277 if (mail.startsWith(QLatin1String(
"MAILTO:"), Qt::CaseInsensitive)) {
278 mail = mail.remove(0, 7);
291 return d->mOrganizer;
309 kWarning() <<
"Invalid dtStart";
314 d->mAllDay = dtStart.isDateOnly();
315 d->mDirtyFields.insert(FieldDtStart);
336 if (d->mDtStart.isValid()) {
337 d->mDirtyFields.insert(FieldDtStart);
343 const KDateTime::Spec &newSpec)
346 d->mDtStart = d->mDtStart.toTimeSpec(oldSpec);
347 d->mDtStart.setTimeSpec(newSpec);
348 d->mDirtyFields.insert(FieldDtStart);
355 d->mComments += comment;
361 QStringList::Iterator i;
363 for (i = d->mComments.begin(); !found && i != d->mComments.end(); ++i) {
364 if ((*i) == comment) {
366 d->mComments.erase(i);
380 d->mComments.clear();
390 if (!contact.isEmpty()) {
391 d->mContacts += contact;
399 QStringList::Iterator i;
401 for (i = d->mContacts.begin(); !found && i != d->mContacts.end(); ++i) {
402 if ((*i) == contact) {
404 d->mContacts.erase(i);
418 d->mContacts.clear();
432 Q_ASSERT(!d->mAttendees.contains(a));
437 if (a->name().left(7).toUpper() ==
"MAILTO:") {
438 a->setName(a->name().remove(0, 7));
449 if (a->uid().isEmpty()) {
450 a->setUid(QString::number((qlonglong)a.data()));
453 d->mAttendees.append(a);
466 int index = d->mAttendees.indexOf(a);
472 d->mAttendees.remove(index);
483 return d->mAttendees;
488 return d->mAttendees.count();
497 d->mAttendees.clear();
502 Attendee::List::ConstIterator it;
503 for (it = d->mAttendees.constBegin(); it != d->mAttendees.constEnd(); ++it) {
504 if ((*it)->email() == email) {
513 const QString &email)
const
515 QStringList mails = emails;
516 if (!email.isEmpty()) {
520 Attendee::List::ConstIterator itA;
521 for (itA = d->mAttendees.constBegin(); itA != d->mAttendees.constEnd(); ++itA) {
522 for (QStringList::const_iterator it = mails.constBegin(); it != mails.constEnd(); ++it) {
523 if ((*itA)->email() == (*it)) {
534 Attendee::List::ConstIterator it;
535 for (it = d->mAttendees.constBegin(); it != d->mAttendees.constEnd(); ++it) {
536 if ((*it)->uid() ==
uid) {
565 return d->mHasDuration;
570 if (observer && !d->mObservers.contains(observer)) {
571 d->mObservers.append(observer);
577 d->mObservers.removeAll(observer);
582 if (!d->mUpdateGroupLevel) {
583 d->mUpdatedPending =
true;
593 if (d->mUpdateGroupLevel) {
594 d->mUpdatedPending =
true;
606 ++d->mUpdateGroupLevel;
611 if (d->mUpdateGroupLevel > 0) {
612 if (--d->mUpdateGroupLevel == 0 && d->mUpdatedPending) {
613 d->mUpdatedPending =
false;
636 d->mDirtyFields.clear();
641 return d->mDirtyFields;
646 d->mDirtyFields.insert(field);
651 return KUrl(QString(
"urn:x-ical:") +
uid());